ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhNjE5OQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsMTg1IEBACisqIHRleHQ9YXV0byAhZW9sCisKKyouYyB0ZXh0ICFlb2wKKyouY2MgdGV4dCAhZW9sCisqLmNsYXNzcGF0aCB0ZXh0ICFlb2wKKyouY3BwIHRleHQgIWVvbAorKi5jc3MgdGV4dCAhZW9sCisqLmRzcCB0ZXh0ICFlb2wKKyouZHN3IHRleHQgIWVvbAorKi5maWx0ZXJzIHRleHQgIWVvbAorKi5oIHRleHQgIWVvbAorKi5odG0gdGV4dCAhZW9sCisqLmh0bWwgdGV4dCAhZW9sCisqLmluIHRleHQgIWVvbAorKi5qYXZhIHRleHQgIWVvbAorKi5sYXVuY2ggdGV4dCAhZW9sCisqLm1hayB0ZXh0ICFlb2wKKyoubWQgdGV4dCAhZW9sCisqLk1GIHRleHQgIWVvbAorKi5tayB0ZXh0ICFlb2wKKyoucGwgdGV4dCAhZW9sCisqLnBtIHRleHQgIWVvbAorKi5wcm9qZWN0IHRleHQgIWVvbAorKi5wcm9wZXJ0aWVzIHRleHQgIWVvbAorKi5weSB0ZXh0ICFlb2wKKyoucmMgdGV4dCAhZW9sCisqLnNoIHRleHQgZW9sPWxmCisqLnNsbiB0ZXh0ICFlb2wKKyouc3R1YiB0ZXh0ICFlb2wKKyoudHh0IHRleHQgIWVvbAorKi51Y20gdGV4dCAhZW9sCisqLnZjcHJvaiB0ZXh0ICFlb2wKKyoudmN4cHJvaiB0ZXh0ICFlb2wKKyoueG1sIHRleHQgIWVvbAorKi54c2wgdGV4dCAhZW9sCisqLnhzbHQgdGV4dCAhZW9sCitNYWtlZmlsZSB0ZXh0ICFlb2wKK2NvbmZpZ3VyZSB0ZXh0ICFlb2wKK0xJQ0VOU0UgdGV4dCAhZW9sCitSRUFETUUgdGV4dCAhZW9sCisKKyouYmluIC10ZXh0CisqLmJyayAtdGV4dAorKi5jbnYgLXRleHQKKyouaWN1IC10ZXh0CisqLnJlcyAtdGV4dAorKi5ucm0gLXRleHQKKyouc3BwIC10ZXh0CisqLnRyaTIgLXRleHQKKworY3VycmVuY3kvLmNsYXNzcGF0aCAtdGV4dAorY3VycmVuY3kvLnByb2plY3QgLXRleHQKK2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyAtdGV4dAorY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIC10ZXh0CitjdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIC10ZXh0CittdWx0aS9jL01ha2VmaWxlLWMuaW5jIC10ZXh0CittdWx0aS9jL3BhdGNoLzNfMCAtdGV4dAorbXVsdGkvYy9wYXRjaC8zXzIgLXRleHQKK211bHRpL2MvcGF0Y2gvM180XzEgLXRleHQKK211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMgLXRleHQKK211bHRpL2ovTWFrZWZpbGUtai5pbmMgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlIC10ZXh0CittdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2MgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2ogLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL2R0ZC9pY3VjYXBzLmR0ZCAtdGV4dAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vb2xkLXhtbHMudGFyLmJ6MiAtdGV4dAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNlZCAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vLmNsYXNzcGF0aCAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vLnByb2plY3QgLXRleHQKK211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBEb2N1bWVudC5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRWxlbWVudC5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwTm9kZS5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwU2Nhbi5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbklDVS5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbkphdmEuamF2YSAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NpbXBsZVNjYW4uamF2YSAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NwaW5uZXIuamF2YSAtdGV4dAorbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZS5sb2NhbC1zYW1wbGUgLXRleHQKK211bHRpL3Byb2ovcHJvdmlkZXIvaWN1LWNvbmZpZy5zZWQgLXRleHQKK211bHRpL3Byb2ovcHJvdmlkZXIvcmVhZG1lLnR4dCAtdGV4dAorcmVsZWFzZS9jL2JvbWZpeC5weSAtdGV4dAorcmVsZWFzZS9qYXZhLy5jbGFzc3BhdGggLXRleHQKK3JlbGVhc2UvamF2YS8ucHJvamVjdCAtdGV4dAorcmVsZWFzZS9qYXZhL01ha2VmaWxlIC10ZXh0CityZWxlYXNlL2phdmEvaWN1NGMuY3NzIC10ZXh0CityZWxlYXNlL2phdmEvbGliL0xJQ0VOU0UudHh0IC10ZXh0CityZWxlYXNlL2phdmEvbGliL1JFQURNRS5UWFQgLXRleHQKK3JlbGVhc2UvamF2YS9saWIvc2VyaWFsaXplci5qYXIgLXRleHQKK3JlbGVhc2UvamF2YS9saWIveGFsYW4uamFyIC10ZXh0CityZWxlYXNlL2phdmEvbGliL3hlcmNlc0ltcGwuamFyIC10ZXh0CityZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdCAtdGV4dAorcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdCAtdGV4dAorcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5yZXBvcnRfeG1sLnhzbHQgLXRleHQKK3NjcmlwdHMvaWN1cnVuIC10ZXh0CitzY3JpcHRzL3JldGlja2V0IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9fX2luaXRfXy5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvZGN1dC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9yZXZpZXcucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9ub3RoaW5nLmh0bWwgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90a3RsaXN0LnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2xpY2Vuc2UuaHRtbCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9yZWFkbWUudHh0IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLmNmZyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2RjdXQucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9jc3MvaWN1eHRuLmNzcyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2pzL3Jldmlldy5qcyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGt0bGlzdC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdHJhY2NoZWNrLnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2xpY2Vuc2UuaHRtbCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9yZWFkbWUudHh0IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL3NldHVwLmNmZyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5weSAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9hcnJvd19idWxsZXQuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvaWJtX2xvZ29fc21hbGxfd2hpdGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvUkJSZXBvcnRlci5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19maWxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX2dyb3VwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3Jlc291cmNlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3RyYW5zbGF0aW9uLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3VudHJhbnNsYXRlZC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9jcmVhdGVfZ3JvdXAuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfZ3JvdXAuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfcmVzb3VyY2UuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfc2NyZWVuLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3dpdGhfcHJlZmVyZW5jZXMuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX21ldGFsLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tb3RpZi5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfd2luZG93cy5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sb29rdXBfcmVzb3VyY2UuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWFpbl9wYWdlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfZXhwb3J0LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9pbXBvcnQuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9oZWxwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfb3B0aW9ucy5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X3BvcHVwX3RyZWUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2Jhc2VjbGFzcy5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9uZXdfYnVuZGxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ByZWZlcmVuY2VzX2RpYWxvZy5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19idW5kbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfZmlsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3NlYXJjaC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2J1bmRsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2ZpbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld190cmVlX2Jhc2ljLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19idW5kbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2RpYWxvZzAuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2ZpbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc3BhY2VyLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2J1bmRsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9jb3VudHJ5LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2ZpbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZ3JvdXAuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25faXRlbS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9sYW5ndWFnZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9wcm9qZWN0LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX3ZhcmlhbnQuZ2lmIC10ZXh0CisKKyMgVGhlIGZvbGxvd2luZyBmaWxlIHR5cGVzIGFyZSBzdG9yZWQgaW4gR2l0LUxGUy4KKyouamFyIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorKi56aXAgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKyouZ3ogZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKyouYnoyIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmdpZiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTZlODZhCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDU2IEBACittdWx0aS9jL01ha2VmaWxlLmxvY2FsCittdWx0aS9wYWNrYWdlcy8qLmphcgorbXVsdGkvcGFja2FnZXMvKi50Z3oKK211bHRpL3Byb2ovY2hlbGxvL291dAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vTWFrZWZpbGUubG9jYWwKK211bHRpL3Byb2ovaWN1NGNzY2FuL2Nvb2tlZAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vZHRkY2FjaGUKK211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwKK211bHRpL3Byb2ovaWN1NGNzY2FuL3htbAorbXVsdGkvcHJvai9pY3U0anNjYW4vYmluCittdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlLmxvY2FsCittdWx0aS9wcm9qL3Byb3ZpZGVyL291dAorbXVsdGkvdG1wCityZWxlYXNlL2MvdWNvbmZpZ3Rlc3QKK3JlbGVhc2UvYy91Y29uZmlndGVzdC5sb2NhbAorcmVsZWFzZS9qYXZhL0FQSUNoYW5nZVJlcG9ydCoKK3JlbGVhc2UvamF2YS9NYWtlZmlsZS5sb2NhbAorcmVsZWFzZS9qYXZhL2NsYXNzZXMKK3JlbGVhc2UvamF2YS9saWIKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvKi5lZ2ctaW5mbwordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9idWlsZAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvKi5weWMKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvKi5lZ2ctaW5mbwordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9idWlsZAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9kaXN0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy8qLnB5YwordW5pY29kZS9jL2dlbnByb3BzLyouZAordW5pY29kZS9jL2dlbnByb3BzLyoubmNiCit1bmljb2RlL2MvZ2VucHJvcHMvKi5vCit1bmljb2RlL2MvZ2VucHJvcHMvKi5vcHQKK3VuaWNvZGUvYy9nZW5wcm9wcy8qLnBkYgordW5pY29kZS9jL2dlbnByb3BzLyoucGxnCit1bmljb2RlL2MvZ2VucHJvcHMvRGVidWcKK3VuaWNvZGUvYy9nZW5wcm9wcy9NYWtlZmlsZQordW5pY29kZS9jL2dlbnByb3BzL1JlbGVhc2UKK3VuaWNvZGUvYy9nZW5wcm9wcy9kZWJ1ZwordW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzCit1bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuWzAtOV0KK3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy52Y3Byb2ouKi4qLnVzZXIKK3VuaWNvZGUvYy9nZW5wcm9wcy9yZWxlYXNlCit1bmljb2RlL2MvZ2VucHJvcHMveDY0Cit1bmljb2RlL2MvZ2VucHJvcHMveDg2Cit1bmljb2RlL2MvZ2VudWNhLyouZAordW5pY29kZS9jL2dlbnVjYS8qLm8KK3VuaWNvZGUvYy9nZW51Y2EvKi5wZGIKK3VuaWNvZGUvYy9nZW51Y2EvRGVidWcKK3VuaWNvZGUvYy9nZW51Y2EvTWFrZWZpbGUKK3VuaWNvZGUvYy9nZW51Y2EvUmVsZWFzZQordW5pY29kZS9jL2dlbnVjYS9kZWJ1ZwordW5pY29kZS9jL2dlbnVjYS9nZW51Y2EKK3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLjgKK3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLnZjcHJvai4qLioudXNlcgordW5pY29kZS9jL2dlbnVjYS9yZWxlYXNlCit1bmljb2RlL2MvZ2VudWNhL3g2NAordW5pY29kZS9jL2dlbnVjYS94ODYKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9saWIKZGlmZiAtLWdpdCBhL2NvbHByb2JlL01ha2VmaWxlLmluIGIvY29scHJvYmUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZWZmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODEgQEAKKyMjIE1ha2VmaWxlLmluIGZvciBJQ1UgLSBleHRyYS9jb2xwcm9iZQorIyMgQ29weXJpZ2h0IChjKSAyMDAxLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorIyMgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisjIyBTb3VyY2UgZGlyZWN0b3J5IGluZm9ybWF0aW9uCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCit0b3BfYnVpbGRkaXIgPSAuLi8uLgorCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9pY3VkZWZzLm1rCisKKyMjIEJ1aWxkIGRpcmVjdG9yeSBpbmZvcm1hdGlvbgorc3ViZGlyID0gZXh0cmEvY29scHJvYmUKKworIyMgRXh0cmEgZmlsZXMgdG8gcmVtb3ZlIGZvciAnbWFrZSBjbGVhbicKK0NMRUFORklMRVMgPSAqfiAkKERFUFMpCisKKyMjIFRhcmdldCBpbmZvcm1hdGlvbgorVEFSR0VUID0gY29scHJvYmUgCitMT05HTkFNRSA9IGxvbmduYW1lCisKK0NQUEZMQUdTICs9IC1JJCh0b3Bfc3JjZGlyKS9jb21tb24gLUkkKHRvcF9zcmNkaXIpL2kxOG4gLUkkKHRvcF9zcmNkaXIpL3Rvb2xzL3Rvb2x1dGlsIC1JJCh0b3Bfc3JjZGlyKS9pbworTElCUyA9ICQoTElCSUNVSTE4TikgJChMSUJJQ1VVQykgJChMSUJVU1RESU8pICQoTElCSUNVVE9PTFVUSUwpICQoREVGQVVMVF9MSUJTKSAkKExJQl9NKQorCitPQkpFQ1RTID0gY29scHJvYmVOZXcubyBsaW5lLm8gc29ydGVkbGluZXMubyBzdHJlbmd0aHByb2JlLm8gdXByaW50ZXIubyAKK0xPTkdOQU1FX09CSiA9IGxvbmduYW1lLm8KKworREVQUyA9ICQoT0JKRUNUUzoubz0uZCkKK0xPTkdOQU1FX0RFUFMgPSAkKExPTkdOQU1FX09CSjoubz0uZCkKKworIyMgTGlzdCBvZiBwaG9ueSB0YXJnZXRzCisuUEhPTlkgOiBhbGwgYWxsLWxvY2FsIGluc3RhbGwgaW5zdGFsbC1sb2NhbCBjbGVhbiBjbGVhbi1sb2NhbAlcCitkaXN0Y2xlYW4gZGlzdGNsZWFuLWxvY2FsIGRpc3QgZGlzdC1sb2NhbCBjaGVjayBjaGVjay1sb2NhbAorCisjIyBDbGVhciBzdWZmaXggbGlzdAorLlNVRkZJWEVTIDoKKworIyMgTGlzdCBvZiBzdGFuZGFyZCB0YXJnZXRzCithbGw6IGFsbC1sb2NhbAoraW5zdGFsbDogaW5zdGFsbC1sb2NhbAorY2xlYW46IGNsZWFuLWxvY2FsCitkaXN0Y2xlYW4gOiBkaXN0Y2xlYW4tbG9jYWwKK2Rpc3Q6IGRpc3QtbG9jYWwKK2NoZWNrOiBhbGwgY2hlY2stbG9jYWwKKworYWxsLWxvY2FsOiAkKFRBUkdFVCkKKworaW5zdGFsbC1sb2NhbDoKKworZGlzdC1sb2NhbDoKKworY2xlYW4tbG9jYWw6CisJdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgJChSTVYpICQoQ0xFQU5GSUxFUykKKwkkKFJNVikgJChPQkpFQ1RTKSAkKFRBUkdFVCkKKworZGlzdGNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbAorCSQoUk1WKSBNYWtlZmlsZQorCitjaGVjay1sb2NhbDogYWxsLWxvY2FsCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKKyQoVEFSR0VUKSA6ICQoT0JKRUNUUykKKwkkKExJTksuY2MpIC1vICRAICReICQoTElCUykKKworJChMT05HTkFNRSkgOiAkKExPTkdOQU1FX09CSikKKwkkKExJTksuY2MpIC1vICRAICReICQoTElCUykKKworaW52b2tlOgorCUlDVV9EQVRBPSQke0lDVV9EQVRBOi0kKHRvcF9idWlsZGRpcikvZGF0YS99IFRaPVBTVDhQRFQgJChJTlZPS0UpICQoSU5WT0NBVElPTikKKworaWZlcSAoLCQoTUFLRUNNREdPQUxTKSkKKy1pbmNsdWRlICQoREVQUykKK2Vsc2UKK2lmbmVxICgkKHBhdHN1YnN0ICVjbGVhbiwsJChNQUtFQ01ER09BTFMpKSwpCistaW5jbHVkZSAkKERFUFMpCitlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2NvbHByb2JlLmNwcCBiL2NvbHByb2JlL2NvbHByb2JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc1MWJlCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvY29scHJvYmUuY3BwCkBAIC0wLDAgKzEsMTczMCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSBjb2xwcm9iZS5jcHAKKyoKKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8xOC8yMDAzICB3ZWl2ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICJ1b3B0aW9ucy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbGVpdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VyZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAidXByb3BzLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInVjb2xfaW1wLmgiCisKKyNpbmNsdWRlICJ1bmljb2RlL3VzdGRpby5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXRyYW5zLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImNvbHByb2JlLmgiCisKKworI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKy8vCisvLyAgU3R1YnMgZm9yIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyB3aGVuIGJ1aWxkaW5nIG9uIFVOSVhlcy4KKy8vCit0eXBlZGVmIGludCBEV09SRDsKK2lubGluZSBpbnQgQ29tcGFyZVN0cmluZ1coRFdPUkQsIERXT1JELCBVQ2hhciAqLCBpbnQsIFVDaGFyICosIGludCkge3JldHVybiAwO307CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KK3Vuc2lnbmVkIGxvbmcgdGltZUdldFRpbWUoKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdDsKKyAgICBnZXR0aW1lb2ZkYXkoJnQsIDApOworICAgIHVuc2lnbmVkIGxvbmcgdmFsID0gdC50dl9zZWMgKiAxMDAwOyAgLy8gTGV0IGl0IG92ZXJmbG93LiAgV2hvIGNhcmVzLgorICAgIHZhbCArPSB0LnR2X3VzZWMgLyAxMDAwOworICAgIHJldHVybiB2YWw7Cit9OworaW5saW5lIGludCBMQ01hcFN0cmluZ1coRFdPUkQsIERXT1JELCBVQ2hhciAqLCBpbnQsIFVDaGFyICosIGludCkge3JldHVybiAwO307Citjb25zdCBpbnQgTENNQVBfU09SVEtFWSA9IDA7CisjZGVmaW5lIE1BS0VMQ0lEKGEsYikgMAorY29uc3QgaW50IFNPUlRfREVGQVVMVCA9IDA7CisjZW5kaWYKKworI2luY2x1ZGUgImxpbmUuaCIKKworc3RhdGljIFVCb29sIGdWZXJib3NlID0gRkFMU0U7CitzdGF0aWMgVUJvb2wgZ0RlYnVnID0gRkFMU0U7CitzdGF0aWMgVUJvb2wgZ1F1aWV0ID0gRkFMU0U7CitzdGF0aWMgVUJvb2wgZ0V4ZW1wbGFyID0gRkFMU0U7CisKK0RXT1JEICAgICAgICAgIGdXaW5MQ0lEOworaW50ICAgICAgICAgICAgZ0NvdW50OworTGluZSAgICAgICAgICAqKmdJQ1VMaW5lczsKK1VDb2xsYXRvciAgICAgKmdDb2w7CitVQ29sbGF0b3IgICAgICpnVUNBOworTGluZSAgICAgICAgICBzb3VyY2U7CitMaW5lICAgICAgICAgIHRhcmdldDsKK0xpbmUgICAgICAgICAgKmdTb3VyY2UgPSAmc291cmNlOworTGluZSAgICAgICAgICAqZ1RhcmdldCA9ICZ0YXJnZXQ7CitIYXNodGFibGUgICAgIGdFbGVtZW50cyhGQUxTRSk7CitIYXNodGFibGUgICAgIGdFeHBhbnNpb25zKEZBTFNFKTsKK0NvbXBhcmVGbiBnQ29tcGFyZXI7CisKK2NvbnN0IFVDaGFyIHNlcGFyYXRvckNoYXIgPSAweDAwMzA7CisKK1VGSUxFICpvdXQgPSBOVUxMOworVUZJTEUgKmVyciA9IE5VTEw7CitVRklMRSAqbG9nID0gTlVMTDsgCisKK2NvbnN0IGNoYXIgKnByb2dOYW1lID0gImNvbHByb2JlIjsKKworY29uc3QgY2hhciAqZ0xvY2FsZSA9IE5VTEw7CisvL2NoYXIgcGxhdGZvcm1bMjU2XTsKK2ludDMyX3QgcGxhdGZvcm1JbmRleCA9IC0xOworaW50MzJfdCBnUGxhdGZvcm1ObyA9IDA7CitpbnQzMl90IGdQbGF0Zm9ybUluZGV4ZXNbMTBdOworaW50MzJfdCBnTG9jYWxlTm8gPSAwOworY29uc3QgY2hhciogZ0xvY2FsZXNbMTAwXTsKK1VCb29sIGdSdWxlc1N0ZGluID0gRkFMU0U7CisKK2VudW0geworICBIRUxQMSwKKyAgICBIRUxQMiwKKyAgICBWRVJCT1NFLAorICAgIFFVSUVULAorICAgIFZFUlNJT04sCisgICAgSUNVREFUQURJUiwKKyAgICBDT1BZUklHSFQsCisgICAgTE9DQUxFLAorICAgIFBMQVRGT1JNLAorICAgIERFQlVHLCAKKyAgICBFWEVNUExBUiwKKyAgICBSVUxFU1NURElOCit9OworCitVT3B0aW9uIG9wdGlvbnNbXT17CisgIC8qMCovIFVPUFRJT05fSEVMUF9ILAorICAvKjEqLyBVT1BUSU9OX0hFTFBfUVVFU1RJT05fTUFSSywKKyAgLyoyKi8gVU9QVElPTl9WRVJCT1NFLAorICAvKjMqLyBVT1BUSU9OX1FVSUVULAorICAvKjQqLyBVT1BUSU9OX1ZFUlNJT04sCisgIC8qNSovIFVPUFRJT05fSUNVREFUQURJUiwKKyAgLyo2Ki8gVU9QVElPTl9DT1BZUklHSFQsCisgIC8qNyovIFVPUFRJT05fREVGKCJsb2NhbGUiLCAnbCcsIFVPUFRfUkVRVUlSRVNfQVJHKSwKKyAgLyo4Ki8gVU9QVElPTl9ERUYoInBsYXRmb3JtIiwgJ3AnLCBVT1BUX1JFUVVJUkVTX0FSRyksCisgIC8qOSovIFVPUFRJT05fREVGKCJkZWJ1ZyIsICdEJywgVU9QVF9OT19BUkcpLAorICAvKjEwKi8gVU9QVElPTl9ERUYoImV4ZW1wbGFyIiwgJ0UnLCBVT1BUX05PX0FSRyksCisgIC8qMTEqLyBVT1BUSU9OX0RFRigicnVsZXNzdGRpbiIsICdSJywgVU9QVF9OT19BUkcpCit9OworCitpbnQgV2luc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgICBnQ291bnQrKzsKKyAgICBpbnQgdDsKKyAgICB0ID0gQ29tcGFyZVN0cmluZ1coZ1dpbkxDSUQsIDAsIAorICAgICAgKCooTGluZSAqKilhKS0+bmFtZSwgKCooTGluZSAqKilhKS0+bGVuLCAKKyAgICAgICgqKExpbmUgKiopYiktPm5hbWUsICgqKExpbmUgKiopYiktPmxlbik7CisgICAgcmV0dXJuIHQtMjsKK30KKworaW50IElDVXN0cmNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgICAgZ0NvdW50Kys7CisgICAgVUNvbGxhdGlvblJlc3VsdCB0OworICAgIHQgPSB1Y29sX3N0cmNvbGwoZ0NvbCwgCisgICAgICAoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWEpLT5sZW4sICAKKyAgICAgICgqKExpbmUgKiopYiktPm5hbWUsICgqKExpbmUgKiopYiktPmxlbik7CisgICAgaWYgKHQgPT0gVUNPTF9MRVNTKSByZXR1cm4gLTE7CisgICAgaWYgKHQgPT0gVUNPTF9HUkVBVEVSKSByZXR1cm4gKzE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB7CisgIGNvbnN0IGNoYXIqIG5hbWU7CisgIENvbXBhcmVGbiBjb21wYXJlcjsKK30gcGxhdGZvcm1zW10gPSB7CisgIHsgImljdSIsIElDVXN0cmNtcCB9LAorICB7ICJ3aW4iLCBXaW5zdHJjbXB9Cit9OworCisKK3ZvaWQgZGVsZXRlTGluZUVsZW1lbnQodm9pZCAqbGluZSkgeworICBkZWxldGUoKExpbmUgKilsaW5lKTsKK30KKwordm9pZCBzdHJpbmdUb0xvd2VyKGNoYXIgKnN0cmluZykgeworICB1aW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc3RybGVuKHN0cmluZyk7IGkrKykgeworICAgIHN0cmluZ1tpXSA9IHRvbG93ZXIoc3RyaW5nW2ldKTsKKyAgfQorfQorCit2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgdV9mcHJpbnRmKG91dCwgIlVzYWdlOiAlcyAtLWxvY2FsZSBsb2NfbmFtZSAtLXBsYXRmb3JtIHBsYXRmb3JtXG4iLCBuYW1lKTsKK30KKwordm9pZCBsaXN0S25vd25QbGF0Zm9ybXMoKSB7CisgIGludDMyX3QgaSA9IDA7CisgIHVfZnByaW50ZihlcnIsICJLbm93biBwbGF0Zm9ybXM6XG4iKTsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHBsYXRmb3Jtcykvc2l6ZW9mKHBsYXRmb3Jtc1swXSk7IGkrKykgeworICAgIHVfZnByaW50ZihlcnIsICJcdCVzXG4iLCBwbGF0Zm9ybXNbaV0pOworICB9Cit9CisKK3ZvaWQgYWRkUGxhdGZvcm0oY29uc3QgY2hhciAqcGxhdGZvcm0pIHsKKyAgaW50MzJfdCBpOworICAvL3N0cmluZ1RvTG93ZXIocGxhdGZvcm0pOworICBpbnQzMl90IG9sZFBsYXRmb3JtTm8gPSBnUGxhdGZvcm1ObzsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplb2YocGxhdGZvcm1zKS9zaXplb2YocGxhdGZvcm1zWzBdKTsgaSsrKSB7CisgICAgaWYoc3RyY21wKHBsYXRmb3JtLCBwbGF0Zm9ybXNbaV0ubmFtZSkgPT0gMCkgeworICAgICAgZ1BsYXRmb3JtSW5kZXhlc1tnUGxhdGZvcm1ObysrXSA9IGk7CisgICAgfQorICB9CisgIGlmKGdQbGF0Zm9ybU5vID09IG9sZFBsYXRmb3JtTm8pIHsKKyAgICB1X2ZwcmludGYoZXJyLCAiVW5rbm93biBwbGF0Zm9ybSAlc1xuIiwgcGxhdGZvcm0pOworICAgIGxpc3RLbm93blBsYXRmb3JtcygpOworICB9Cit9CisKK3ZvaWQgcHJvY2Vzc0FyZ3MoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSwgVUVycm9yQ29kZSAmc3RhdHVzKQoreworICBpbnQzMl90IGkgPSAwOworICBVX01BSU5fSU5JVF9BUkdTKGFyZ2MsIGFyZ3YpOworCisgIGFyZ2MgPSB1X3BhcnNlQXJncyhhcmdjLCBhcmd2LCAoaW50MzJfdCkoc2l6ZW9mKG9wdGlvbnMpL3NpemVvZihvcHRpb25zWzBdKSksIG9wdGlvbnMpOworCisgIGlmKGFyZ2MgPCAwKSB7CisgICAgdV9mcHJpbnRmKGVyciwgIlVua25vd24gb3B0aW9uOiAlc1xuIiwgYXJndlstYXJnY10pOworICAgIHVzYWdlKHByb2dOYW1lKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZihvcHRpb25zWzBdLmRvZXNPY2N1ciB8fCBvcHRpb25zWzFdLmRvZXNPY2N1cikgeworICAgIHVzYWdlKHByb2dOYW1lKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYob3B0aW9uc1tWRVJCT1NFXS5kb2VzT2NjdXIpIHsKKyAgICBnVmVyYm9zZSA9IFRSVUU7CisgIH0KKyAgaWYob3B0aW9uc1tERUJVR10uZG9lc09jY3VyKSB7CisgICAgZ0RlYnVnID0gVFJVRTsKKyAgICBnVmVyYm9zZSA9IFRSVUU7CisgIH0KKyAgaWYob3B0aW9uc1tFWEVNUExBUl0uZG9lc09jY3VyKSB7CisgICAgZ0V4ZW1wbGFyID0gVFJVRTsKKyAgfQorICBpZihvcHRpb25zW1FVSUVUXS5kb2VzT2NjdXIpIHsKKyAgICBnUXVpZXQgPSBUUlVFOworICB9CisvKgorICBmb3IoaSA9IDg7IGkgPCA5OyBpKyspIHsKKyAgICBpZighb3B0aW9uc1tpXS5kb2VzT2NjdXIpIHsKKyAgICAgIHVfZnByaW50ZihlcnIsICJPcHRpb24gJXMgaXMgcmVxdWlyZWQhXG4iLCBvcHRpb25zW2ldLmxvbmdOYW1lKTsKKyAgICAgIHVzYWdlKHByb2dOYW1lKTsKKyAgICAgIHN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICB9CisgICAgaWYob3B0aW9uc1tpXS52YWx1ZSA9PSBOVUxMKSB7CisgICAgICB1X2ZwcmludGYoZXJyLCAiT3B0aW9uICVzIG5lZWRzIGFuIGFyZ3VtZW50IVxuIiwgb3B0aW9uc1tpXS5sb25nTmFtZSk7CisgICAgICB1c2FnZShwcm9nTmFtZSk7CisgICAgICBzdGF0dXMgPSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgfQorICB9CisqLworICAvLyBBU0NJSSBiYXNlZCBvcHRpb25zIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgIC8vIHRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdpbGwgYWxsb3cgdG8gbG9hZAorICAvLyB1cCBJQ1UgcnVsZXMgYW5kIHRoZW4gcG9rZSB0aHJvdWdoIHRoZW0uCisgIC8vIEluIHRoYXQgY2FzZSwgd2UgdGVzdCBvbmx5IElDVSBhbmQgZG9uJ3QgbmVlZCAKKyAgLy8gYSBsb2NhbGUuCisgIGlmKG9wdGlvbnNbUlVMRVNTVERJTl0uZG9lc09jY3VyKSB7CisgICAgZ1J1bGVzU3RkaW4gPSBUUlVFOworICAgIGFkZFBsYXRmb3JtKCJpY3UiKTsKKyAgICByZXR1cm47CisgIH0gCisKKyAgaWYob3B0aW9uc1tMT0NBTEVdLmRvZXNPY2N1cikgeworICAgIGdMb2NhbGUgPSBvcHRpb25zW0xPQ0FMRV0udmFsdWU7CisgIH0gZWxzZSB7CisgICAgZm9yKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgICBnTG9jYWxlc1tnTG9jYWxlTm8rK10gPSBhcmd2W2ldOworICAgIH0KKyAgfQorICBpZihvcHRpb25zW1BMQVRGT1JNXS5kb2VzT2NjdXIpIHsKKyAgICAvL3N0cmNweShwbGF0Zm9ybSwgb3B0aW9uc1tQTEFURk9STV0udmFsdWUpOworICAgIC8vYWRkUGxhdGZvcm0oImljdSIpOworICAgIGFkZFBsYXRmb3JtKG9wdGlvbnNbUExBVEZPUk1dLnZhbHVlKTsKKyAgfSBlbHNlIHsgLy8gdGhlcmUgaXMgYSBsaXN0IG9mIHBsYXRmb3JtcyAKKyAgICB1X2ZwcmludGYoZXJyLCAiT3B0aW9uICVzIGlzIHJlcXVpcmVkIVxuIiwgb3B0aW9uc1tpXS5sb25nTmFtZSk7CisgICAgdXNhZ2UocHJvZ05hbWUpOworICAgIHN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgfQorCisgIC8vCisgIC8vICBTZXQgdXAgYSBXaW5kb3dzIExDSUQKKyAgLy8KKyAgZ1dpbkxDSUQgPSB1bG9jX2dldExDSUQoZ0xvY2FsZSk7CisgIC8qCisgIGlmIChnTG9jYWxlICE9IDApIHsKKyAgICAgIGdXaW5MQ0lEID0gTUFLRUxDSUQoZ0xvY2FsZSwgU09SVF9ERUZBVUxUKTsKKyAgfQorICBlbHNlIHsKKyAgICAgIGdXaW5MQ0lEID0gdWxvY19nZXRMQ0lEKGdMb2NhbGUpOworICB9CisgICovCisKK30KKwordm9pZCBwcmludFJ1bGVzKGNvbnN0IFVDaGFyICpuYW1lLCBpbnQzMl90IGxlbiwgVUZJTEUgKmZpbGUpIHsKKyAgLy8gdmVyeSBydWRpbWVudGFyeSBwcmV0dHkgcnVsZXMgcHJpbnQKKyAgaW50MzJfdCBpID0gMDsKKyAgVUNoYXIgdG9QcmludFsxNjM4NF07CisgIGludDMyX3QgdG9QcmludEluZGV4ID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBpZihuYW1lW2ldID09IDB4MDAyNikgeworICAgICAgaWYodG9QcmludEluZGV4KSB7CisgICAgICAgIHRvUHJpbnRbdG9QcmludEluZGV4XSA9IDA7CisgICAgICAgIHVfZnByaW50ZihmaWxlLCAiJVVcbiIsIHRvUHJpbnQpOworICAgICAgICB0b1ByaW50SW5kZXggPSAwOworICAgICAgICB0b1ByaW50W3RvUHJpbnRJbmRleCsrXSA9IG5hbWVbaV07CisgICAgICB9IGVsc2UgeworICAgICAgICB0b1ByaW50W3RvUHJpbnRJbmRleCsrXSA9IG5hbWVbaV07CisgICAgICB9IAorICAgIH0gZWxzZSB7CisgICAgICB0b1ByaW50W3RvUHJpbnRJbmRleCsrXSA9IG5hbWVbaV07CisgICAgfQorICB9CisgIGlmKHRvUHJpbnRJbmRleCkgeworICAgIHRvUHJpbnRbdG9QcmludEluZGV4XSA9IDA7CisgICAgdV9mcHJpbnRmKGZpbGUsICIlVVxuIiwgdG9QcmludCk7CisgICAgdG9QcmludEluZGV4ID0gMDsKKyAgfQorCisKK30KKwordm9pZCBlc2NhcGVTdHJpbmcoY29uc3QgVUNoYXIgKm5hbWUsIGludDMyX3QgbGVuLCBVRklMRSAqZmlsZSkgeworICB1X2ZwcmludGYoZmlsZSwgIiVVIiwgbmFtZSk7CisvKgorICBpbnQzMl90IGogPSAwOworICBmb3IoaiA9IDA7IGogPCBsZW47IGorKykgeworICAgIGlmKG5hbWVbal0gPj0gMHgyMCAmJiBuYW1lW2pdIDwgMHg4MCkgeworICAgICAgdV9mcHJpbnRmKGZpbGUsICIlYyIsIG5hbWVbal0pOworICAgIH0gZWxzZSB7CisgICAgICB1X2ZwcmludGYoZmlsZSwgIlxcdSUwNFgiLCBuYW1lW2pdKTsKKyAgICB9CisgIH0KKyovCit9Cit2b2lkIGVzY2FwZUFMaW5lKExpbmUgKmxpbmUsIFVGSUxFICpmaWxlKSB7CisgIGVzY2FwZVN0cmluZyhsaW5lLT5uYW1lLCBsaW5lLT5sZW4sIGZpbGUpOworfQorCit2b2lkIGVzY2FwZUV4cGFuc2lvbihMaW5lICpsaW5lLCBVRklMRSAqZmlsZSkgeworICBlc2NhcGVTdHJpbmcobGluZS0+ZXhwYW5zaW9uU3RyaW5nLCBsaW5lLT5leHBMZW4sIGZpbGUpOworfQorCit2b2lkIHNob3dOYW1lcyhMaW5lICpsaW5lLCBVRklMRSAqZmlsZSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgaW50MzJfdCBqID0gMDsKKyAgY2hhciBjaGFyTmFtZVsyNTZdOworICBmb3IoaiA9IDA7IGogPCBsaW5lLT5sZW47IGorKykgeworICAgIHVfY2hhck5hbWUobGluZS0+bmFtZVtqXSwgVV9FWFRFTkRFRF9DSEFSX05BTUUsIGNoYXJOYW1lLCAyNTYsICZzdGF0dXMpOworICAgIHVfZnByaW50ZihmaWxlLCAiJXMgIiwgY2hhck5hbWUpOworICB9Cit9CisKK3ZvaWQgc2V0QXJyYXkoTGluZSAqKmFycmF5LCBMaW5lICpjb250ZW50cywgaW50MzJfdCBzaXplKSB7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGFycmF5W2ldID0gY29udGVudHMraTsKKyAgfQorfQorCisvLyBzZXQgYW4gYXJyYXkgZnJvbSBhIEhhc2h0YWJsZQoraW50MzJfdCAKK3NldEFycmF5KExpbmUgKiphcnJheSwgSGFzaHRhYmxlICp0YWJsZSA9ICZnRWxlbWVudHMpIHsKKyAgaW50MzJfdCBzaXplID0gdGFibGUtPmNvdW50KCk7CisgIGludDMyX3QgaGFzaEluZGV4ID0gLTE7CisgIGNvbnN0IFVIYXNoRWxlbWVudCAqaGFzaEVsZW1lbnQgPSBOVUxMOworICBpbnQzMl90IGNvdW50ID0gMDsKKyAgd2hpbGUoKGhhc2hFbGVtZW50ID0gdGFibGUtPm5leHRFbGVtZW50KGhhc2hJbmRleCkpICE9IE5VTEwpIHsKKyAgICBhcnJheVtjb3VudCsrXSA9IChMaW5lICopaGFzaEVsZW1lbnQtPnZhbHVlLnBvaW50ZXI7CisgIH0KKyAgcmV0dXJuIHNpemU7Cit9CisKK1VCb29sIHRyeVN3YW1wZWQoTGluZSAqKnNtYWxsZXIsIExpbmUgKipncmVhdGVyLCBVQ2hhciBjaGFyc1syXSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIHVfc3RyY3B5KGdTb3VyY2UtPm5hbWUsICgqc21hbGxlciktPm5hbWUpOworICBnU291cmNlLT5uYW1lWygqc21hbGxlciktPmxlbl0gPSBzZXBhcmF0b3JDaGFyOworICBnU291cmNlLT5uYW1lWygqc21hbGxlciktPmxlbisxXSA9IGNoYXJzWzBdOworICBnU291cmNlLT5uYW1lWygqc21hbGxlciktPmxlbisyXSA9IDA7CisgIGdTb3VyY2UtPmxlbiA9ICgqc21hbGxlciktPmxlbisyOworCisgIHVfc3RyY3B5KGdUYXJnZXQtPm5hbWUsICgqZ3JlYXRlciktPm5hbWUpOworICBnVGFyZ2V0LT5uYW1lWygqZ3JlYXRlciktPmxlbl0gPSBzZXBhcmF0b3JDaGFyOworICBnVGFyZ2V0LT5uYW1lWygqZ3JlYXRlciktPmxlbisxXSA9IGNoYXJzWzFdOworICBnVGFyZ2V0LT5uYW1lWygqZ3JlYXRlciktPmxlbisyXSA9IDA7CisgIGdUYXJnZXQtPmxlbiA9ICgqZ3JlYXRlciktPmxlbisyOworCisgIGlmKGNvbXBhcmVyKCZnU291cmNlLCAmZ1RhcmdldCkgPiAwKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK1VCb29sIHRyeVN3YW1wcyhMaW5lICoqc21hbGxlciwgTGluZSAqKmdyZWF0ZXIsIFVDaGFyIGNoYXJzWzJdLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgZ1NvdXJjZS0+bmFtZVswXSA9IGNoYXJzWzBdOworICBnU291cmNlLT5uYW1lWzFdID0gc2VwYXJhdG9yQ2hhcjsKKyAgdV9zdHJjcHkoZ1NvdXJjZS0+bmFtZSsyLCAoKnNtYWxsZXIpLT5uYW1lKTsKKyAgZ1NvdXJjZS0+bGVuID0gKCpzbWFsbGVyKS0+bGVuKzI7CisKKyAgZ1RhcmdldC0+bmFtZVswXSA9IGNoYXJzWzFdOworICBnVGFyZ2V0LT5uYW1lWzFdID0gc2VwYXJhdG9yQ2hhcjsKKyAgdV9zdHJjcHkoZ1RhcmdldC0+bmFtZSsyLCAoKmdyZWF0ZXIpLT5uYW1lKTsKKyAgZ1RhcmdldC0+bGVuID0gKCpncmVhdGVyKS0+bGVuKzI7CisKKyAgaWYoY29tcGFyZXIoJmdTb3VyY2UsICZnVGFyZ2V0KSA8IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUNvbEF0dHJpYnV0ZVZhbHVlIAorcHJvYmVTdHJlbmd0aChMaW5lKiogcHJldkxpbmUsIExpbmUgKipjdXJyTGluZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIC8vIFByaW1hcnkgc3dhbXBzIHNlY29uZGFyeQorICAvLyBoYXZlIHBhaXJzIHdoZXJlIFswXSAyPiBbMV0KKyAgVUNoYXIgcHJpbVN3YW1wc1tdWzJdID0geworICAgIHsgMHgwMEUwLCAweDAwNjEgfSwKKyAgICB7IDB4MDQ1MCwgMHgwNDM1IH0sCisgICAgeyAweDMxYTMsIDB4MzEwZCB9CisgIH07CisgIC8vIFNlY29uZGFyeSBzd2FtcHMgdGVydGlhcnkKKyAgLy8gaGF2ZSBwYWlycyB3aGVyZSBbMF0gMz4gWzFdCisgIFVDaGFyIHNlY1N3YW1wc1tdWzJdID0geworICAgIHsgMHgwMDUzLCAweDAwNzMgfSwKKyAgICB7IDB4MDQxNSwgMHgwNDM1IH0sCisgICAgeyAweDMxYjYsIDB4MzEwZSB9CisgIH07CisgIC8vIFNlY29uZGFyeSBpcyBzd2FtcGVkIGJ5IHByaW1hcnkKKyAgLy8gaGF2ZSBwYWlycyB3aGVyZSBbMF0gMT4gWzFdCisgIFVDaGFyIHNlY1N3YW1wZWRbXVsyXSA9IHsKKyAgICB7IDB4MDA2MiwgMHgwMDYxIH0sCisgICAgeyAweDA0MzYsIDB4MDQ1NCB9LAorICAgIHsgMHgzMTBlLCAweDMxMGQgfQorICB9OworICAvLyBUZXJ0aWFyeSBpcyBzd2FtcGVkIGJ5IHNlY29uZGFyeQorICAvLyBoYXZlIHBhaXJzIHdoZXJlIFswXSAyPiBbMV0KKyAgVUNoYXIgdGVyU3dhbXBlZFtdWzJdID0geworICAgIHsgMHgwMEUwLCAweDAwNjEgfSwKKyAgICB7IDB4MDQ1MCwgMHgwNDM1IH0sCisgICAgeyAweDMxYTMsIDB4MzEwZCB9CisgIH07CisgIGludDMyX3QgaSA9IDA7CisgIC8vIFRlcnRpYXJ5IHN3YW1wcyBlcXVhbD8KKyAgaW50IHJlc3VsdCA9IDA7CisgIC8vIENob29zZSB0aGUgcGFpcgorICBpID0gMDsKKyAgLyoKKyAgaWYoKCpwcmV2TGluZSktPm5hbWVbMF0gPiAweEZGICYmICgqY3VyckxpbmUpLT5uYW1lWzBdID4gMHhGRikgeworICAgIGkgPSAwOworICB9IGVsc2UgaWYoKCpwcmV2TGluZSktPm5hbWVbMF0gPCAweDA0MDAgJiYgKCpjdXJyTGluZSktPm5hbWVbMF0gPCAweDA0MDApIHsKKyAgICBpID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpID0gMjsKKyAgfQorICAqLworICAvLyBhcmUgdGhleSBlcXVhbD8KKyAgaWYoKHJlc3VsdCA9IGNvbXBhcmVyKHByZXZMaW5lLCBjdXJyTGluZSkpID09IDApIHsKKyAgICByZXR1cm4gVUNPTF9JREVOVElDQUw7CisgIH0gZWxzZSBpZihyZXN1bHQgPiAwKSB7CisgICAgLy9mcHJpbnRmKHN0ZGVyciwgImxpbmVzIHNob3VsZCBiZSBvcmRlcmVkISIpOworICAgIHJldHVybiBVQ09MX09GRjsKKyAgfSBlbHNlIGlmKHRyeVN3YW1wcyhwcmV2TGluZSwgY3VyckxpbmUsIHByaW1Td2FtcHNbaV0sIGNvbXBhcmVyKSkgeworICAgIHJldHVybiBVQ09MX1BSSU1BUlk7CisgIH0gZWxzZSBpZih0cnlTd2FtcHMocHJldkxpbmUsIGN1cnJMaW5lLCBzZWNTd2FtcHNbaV0sIGNvbXBhcmVyKSkgeworICAgIHJldHVybiBVQ09MX1NFQ09OREFSWTsKKyAgfSBlbHNlIGlmKHRyeVN3YW1wZWQocHJldkxpbmUsIGN1cnJMaW5lLCB0ZXJTd2FtcGVkW2ldLCBjb21wYXJlcikpIHsKKyAgICAvLyBpcyB0aGVyZSBhIHRlcnRpYXJ5IGRpZmZlcmVuY2UKKyAgICByZXR1cm4gVUNPTF9URVJUSUFSWTsKKyAgfSBlbHNlIHsKKyAgICAvL2ZwcmludGYoc3RkZXJyLCAiVW5rbm93biBzdHJlbmd0aCFcbiIpOworICAgIHJldHVybiBVQ09MX09OOworICB9Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcHJvYmUgdGhlIHNldCBvZiBsaW5lcyAKKy8vIChhbHJlYWR5IHNvcnRlZCBieSBxc29ydCkgYW5kIGRlZHVjdCB0aGUgc3RyZW5ndGhzCit2b2lkIAorYW5hbHl6ZVN0cmVuZ3RoKExpbmUgKipsaW5lcywgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgaW50MzJfdCBpID0gMDsKKworICBmb3IoaSA9IDE7IGkgPCBzaXplOyBpKyspIHsKKyAgICBMaW5lICoqcHJldkxpbmUgPSBsaW5lcytpLTE7CisgICAgTGluZSAqKmN1cnJMaW5lID0gbGluZXMraTsKKyAgICAoKmN1cnJMaW5lKS0+c3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKHByZXZMaW5lLCBjdXJyTGluZSwgY29tcGFyZXIpOworICAgICgqY3VyckxpbmUpLT5zb3J0ZWRJbmRleCA9IGk7CisgICAgKCpjdXJyTGluZSktPnByZXZpb3VzID0gKnByZXZMaW5lOworICAgICgqcHJldkxpbmUpLT5uZXh0ID0gKmN1cnJMaW5lOworCisgIH0KKworfQorCit2b2lkIHByaW50U3RyZW5ndGgoVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoLCBVRklMRSAqZmlsZSkgeworICB1X2ZwcmludGYoZmlsZSwgIiAiKTsKKyAgc3dpdGNoKHN0cmVuZ3RoKSB7CisgIGNhc2UgVUNPTF9JREVOVElDQUw6CisgICAgdV9mcHJpbnRmKGZpbGUsICI9Iik7CisgICAgYnJlYWs7CisgIGNhc2UgVUNPTF9URVJUSUFSWToKKyAgICAvL3VfZnByaW50ZihmaWxlLCAiPDMiKTsKKyAgICB1X2ZwcmludGYoZmlsZSwgIjw8PCIpOworICAgIGJyZWFrOworICBjYXNlIFVDT0xfU0VDT05EQVJZOgorICAgIC8vdV9mcHJpbnRmKGZpbGUsICI8MiIpOworICAgIHVfZnByaW50ZihmaWxlLCAiPDwiKTsKKyAgICBicmVhazsKKyAgY2FzZSBVQ09MX1BSSU1BUlk6CisgICAgLy91X2ZwcmludGYoZmlsZSwgIjwxIik7CisgICAgdV9mcHJpbnRmKGZpbGUsICI8Iik7CisgICAgYnJlYWs7CisgIGNhc2UgVUNPTF9PRkY6CisgICAgdV9mcHJpbnRmKGZpbGUsICI+PyIpOworICBkZWZhdWx0OgorICAgIHVfZnByaW50ZihmaWxlLCAiPyEiKTsKKyAgICBicmVhazsKKyAgfQorICB1X2ZwcmludGYoZmlsZSwgIiAiKTsKK30KKwordm9pZCBwcmludFN0cmVuZ3RoKExpbmUgKmxpbmUsIFVGSUxFICpmaWxlKSB7CisgIHByaW50U3RyZW5ndGgobGluZS0+c3RyZW5ndGgsIGZpbGUpOworfQorCit2b2lkIHByaW50TGluZShMaW5lICpsaW5lLCBVRklMRSAqZmlsZSkgeworICBlc2NhcGVBTGluZShsaW5lLCBmaWxlKTsKKyAgaWYobGluZS0+aXNFeHBhbnNpb24pIHsKKyAgICB1X2ZwcmludGYoZmlsZSwgIi8iKTsKKyAgICBlc2NhcGVFeHBhbnNpb24obGluZSwgZmlsZSk7CisgIH0KK30KKwordm9pZCBwcmludE9yZGVyaW5nKExpbmUgKipsaW5lcywgaW50MzJfdCBzaXplLCBVRklMRSAqZmlsZSwgVUJvb2wgdXNlTGlua3MgPSBGQUxTRSkgeworICBpbnQzMl90IGkgPSAwOworCisgIC8vcHJpbnRMaW5lKCpsaW5lcyk7CisgIC8vZXNjYXBlQUxpbmUoKmxpbmVzKTsgLy8gUHJpbnQgZmlyc3QgbGluZQorCisgIExpbmUgKmxpbmUgPSBOVUxMOworICBMaW5lICpwcmV2aW91cyA9ICpsaW5lczsKKyAgaWYocHJldmlvdXMtPmlzUmVzZXQpIHsKKyAgICB1X2ZwcmludGYoZmlsZSwgIlxuJiAiKTsKKyAgICBlc2NhcGVBTGluZShwcmV2aW91cywgZmlsZSk7CisgIH0gZWxzZSBpZighcHJldmlvdXMtPmlzUmVtb3ZlZCkgeworICAgIHByaW50TGluZShwcmV2aW91cywgZmlsZSk7CisgIH0KKyAgaSA9IDE7CisgIHdoaWxlKGkgPCBzaXplICYmIHByZXZpb3VzLT5uZXh0KSB7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBwcmV2aW91cy0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9ICoobGluZXMraSk7CisgICAgfQorICAgIGlmKGxpbmUtPmlzUmVzZXQpIHsKKyAgICAgIHVfZnByaW50ZihmaWxlLCAiXG4mICIpOworICAgICAgZXNjYXBlQUxpbmUobGluZSwgZmlsZSk7CisgICAgfSBlbHNlIGlmKCFsaW5lLT5pc1JlbW92ZWQpIHsKKyAgICAgIGlmKGZpbGUgPT0gb3V0KSB7CisgICAgICAgIHVfZnByaW50ZihmaWxlLCAiXG4iKTsKKyAgICAgIH0KKyAgICAgIGlmKGkgPiAwKSB7CisgICAgICAgIHByaW50U3RyZW5ndGgobGluZSwgZmlsZSk7CisgICAgICB9CisgICAgICBwcmludExpbmUobGluZSwgZmlsZSk7CisgICAgICAvL2VzY2FwZUFMaW5lKGxpbmUsIGZpbGUpOworICAgIH0KKyAgICBwcmV2aW91cyA9IGxpbmU7CisgICAgaSsrOworICB9CisgIHVfZnByaW50ZihmaWxlLCAiXG4iKTsKK30KKworCit2b2lkIHNldEluZGV4ZXMoTGluZSAqKmxpbmVzLCBpbnQzMl90IHNpemUpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgKCpsaW5lcyktPnNvcnRlZEluZGV4ID0gMDsKKyAgZm9yKGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgTGluZSAqbGluZSA9ICoobGluZXMraSk7CisgICAgTGluZSAqcHJldiA9ICoobGluZXMraS0xKTsKKyAgICBsaW5lLT5wcmV2aW91cyA9IHByZXY7CisgICAgcHJldi0+bmV4dCA9IGxpbmU7CisgICAgbGluZS0+c29ydGVkSW5kZXggPSBpOworICB9Cit9CisKKworLy8gdGhpcyBzZWVtcyB0byBiZSBhIGRlYWQgZW5kCit2b2lkCitub3RlRXhwYW5zaW9uKExpbmUgKipnTGluZXMsIExpbmUgKmxpbmUsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCisgIFVuaWNvZGVTdHJpbmcga2V5KGxpbmUtPm5hbWUsIGxpbmUtPmxlbik7CisgIC8vTGluZSAqdG9JbnNlcnQgPSAoTGluZSAqKWdFbGVtZW50cy5nZXQoa2V5KTsKKyAgTGluZSAqdG9JbnNlcnQgPSAoTGluZSAqKWdFeHBhbnNpb25zLmdldChrZXkpOworICBpZih0b0luc2VydCAhPSBOVUxMKSB7CisgICAgdG9JbnNlcnQtPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgICB1X3N0cmNweSh0b0luc2VydC0+ZXhwYW5zaW9uU3RyaW5nLCBsaW5lLT5leHBhbnNpb25TdHJpbmcpOworICAgIHRvSW5zZXJ0LT5leHBMZW4gPSBsaW5lLT5leHBMZW47CisgICAgdG9JbnNlcnQtPnByZXZpb3VzLT5uZXh0ID0gdG9JbnNlcnQtPm5leHQ7CisgICAgdG9JbnNlcnQtPm5leHQtPnByZXZpb3VzID0gdG9JbnNlcnQtPnByZXZpb3VzOworICAgIGdFbGVtZW50cy5yZW1vdmUoa2V5KTsKKyAgfSBlbHNlIHsKKyAgICB0b0luc2VydCA9IG5ldyBMaW5lKCpsaW5lKTsgCisgICAgdG9JbnNlcnQtPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgICBnRWxlbWVudHMucHV0KFVuaWNvZGVTdHJpbmcodG9JbnNlcnQtPm5hbWUsIHRvSW5zZXJ0LT5sZW4pLCB0b0luc2VydCwgc3RhdHVzKTsKKyAgfQorCisgIGludDMyX3QgaSA9IDA7CisgIExpbmUgdGVzdExpbmU7CisgIExpbmUgKmwgPSAmdGVzdExpbmU7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIHVfc3RyY3B5KHRlc3RMaW5lLm5hbWUsICgqKGdMaW5lcytpKSktPm5hbWUpOworICAgIHVfc3RyY2F0KHRlc3RMaW5lLm5hbWUsIGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgdGVzdExpbmUubGVuID0gKCooZ0xpbmVzK2kpKS0+bGVuICsgbGluZS0+ZXhwTGVuOworICAgIGlmKGNvbXBhcmVyKCZsLCAmbGluZSkgPiAwKSB7CisgICAgICB0b0luc2VydC0+cHJldmlvdXMgPSAqKGdMaW5lcytpLTEpOworICAgICAgdG9JbnNlcnQtPm5leHQgPSAqKGdMaW5lcytpKTsKKyAgICAgIHRvSW5zZXJ0LT5wcmV2aW91cy0+bmV4dCA9IHRvSW5zZXJ0OworICAgICAgdG9JbnNlcnQtPm5leHQtPnByZXZpb3VzID0gdG9JbnNlcnQ7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYoZ1ZlcmJvc2UpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiQWRkaW5nIGV4cGFuc2lvblxuIik7CisgICAgZXNjYXBlQUxpbmUobGluZSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiLyIpOworICAgIGVzY2FwZUV4cGFuc2lvbihsaW5lLCBsb2cpOworICAgIHVfZnByaW50Zihsb2csICIgIik7CisgIH0KK30KKwordm9pZAorcG9zaXRpb25FeHBhbnNpb25zKExpbmUgKipnTGluZXMsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIGludCByZXN1bHQgPSAwOworICBMaW5lICpsaW5lID0gTlVMTDsKKyAgTGluZSAqdG9Nb3ZlID0gTlVMTDsKKyAgaW50MzJfdCBpID0gMCwgaiA9IDA7CisgIExpbmUgKipzb3J0ZWRFeHBhbnNpb25zID0gbmV3IExpbmUqW2dFeHBhbnNpb25zLmNvdW50KCldOworICBpbnQzMl90IHNvcnRlZEV4cGFuc2lvbnNTaXplID0gc2V0QXJyYXkoc29ydGVkRXhwYW5zaW9ucywgJmdFeHBhbnNpb25zKTsKKyAgcXNvcnQoc29ydGVkRXhwYW5zaW9ucywgc29ydGVkRXhwYW5zaW9uc1NpemUsIHNpemVvZihMaW5lICopLCBjb21wYXJlcik7CisgIC8vIE1ha2UgYSBsaXN0IG9mIHRoaW5ncyBpbiB0aGUgdmluY2luaXR5IG9mIGV4cGFuc2lvbiBjYW5kaWRhdGUKKyAgZm9yKGogPSAwOyBqIDwgc29ydGVkRXhwYW5zaW9uc1NpemU7IGorKykgeworICAgIGxpbmUgPSAqKHNvcnRlZEV4cGFuc2lvbnMraik7CisgICAgVW5pY29kZVN0cmluZyBrZXkobGluZS0+bmFtZSwgbGluZS0+bGVuKTsKKyAgICB0b01vdmUgPSAoTGluZSAqKWdFbGVtZW50cy5nZXQoa2V5KTsKKyAgICBpbnQzMl90IGkgPSAwOworICAgIExpbmUgdGVzdExpbmUsIHByZXZUZXN0TGluZTsKKyAgICBMaW5lICpsID0gJnRlc3RMaW5lOworICAgIExpbmUgKnByZXZMID0gJnByZXZUZXN0TGluZTsKKyAgICAvLyBUaGlzIGNhbiBiZSBmdXJ0aGVyIG9wdGltaXplZCwgc2luY2Ugd2Ugbm93IGtub3cgdGhhdCB3ZSBoYXZlIGEgCisgICAgLy8gc29ydGVkIGxpc3Qgb2YgZXhwYW5zaW9ucywgc28gY3VycmVudCBjYW4gc3RhcnQgZnJvbSB0b01vdmUsIHNpbmNlIGFsbAorICAgIC8vIHRoZSBlbGVtZW50cyBiZWZvcmUgaXQgYXJlIGFscmVhZHkgc21hbGxlci4gSW4gdGhlIGJlZ2dpbmluZyBpdCBuZWVkcyB0byAKKyAgICAvLyBiZSBvbiBnTGluZXMsIHRob3VnaC4KKyAgICBMaW5lICpjdXJyZW50ID0gKmdMaW5lczsKKyAgICB3aGlsZShjdXJyZW50KSB7CisgICAgICBpZihjdXJyZW50ID09IHRvTW92ZSkgeworICAgICAgICAvLyB3ZSBhcmUgd2FkaW5nIHRocm91Z2ggYSBzb3J0ZWQgbGlzdAorICAgICAgICAvLyBpZiB3ZSBmb3VuZCBvdXJzZWx2ZXMsIGl0IG1lYW5zIHRoYXQgd2UgCisgICAgICAgIC8vIGFyZSBhbHJlYWR5IGluIGEgcmlnaHQgcGxhY2UsIHNvIG5vIG1vdmluZworICAgICAgICAvLyBpcyBuZWVkZWQsIGJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlCisgICAgICAgIC8vIHRoZSByaWdodCBzdHJlbmd0aC4KKyAgICAgICAgdG9Nb3ZlLT5zdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgoJnByZXZMLCAmdG9Nb3ZlLCBjb21wYXJlcik7CisgICAgICAgIGlmKDApIHsKKyAgICAgICAgICB1X2ZwcmludGYobG9nLCAiUG9zaXRpb25lZCBleHBhbnNpb24gd2l0aG91dCBtb3ZpbmcgIik7CisgICAgICAgICAgcHJpbnRMaW5lKHRvTW92ZSwgbG9nKTsKKyAgICAgICAgICB1X2ZwcmludGYobG9nLCAiIG5ldyBvcmRlcmluZzogXG4iKTsKKyAgICAgICAgICBwcmludE9yZGVyaW5nKGdMaW5lcywgc2l6ZSwgbG9nLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHVfc3RyY3B5KHRlc3RMaW5lLm5hbWUsIGN1cnJlbnQtPm5hbWUpOworICAgICAgICBpZighY3VycmVudC0+aXNFeHBhbnNpb24pIHsKKyAgICAgICAgICB1X3N0cmNhdCh0ZXN0TGluZS5uYW1lLCBsaW5lLT5leHBhbnNpb25TdHJpbmcpOworICAgICAgICAgIHRlc3RMaW5lLmxlbiA9IGN1cnJlbnQtPmxlbiArIGxpbmUtPmV4cExlbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0ZXN0TGluZS5sZW4gPSBjdXJyZW50LT5sZW47CisgICAgICAgIH0KKyAgICAgICAgaWYoY29tcGFyZXIoJmwsICZsaW5lKSA+IDApIHsKKyAgICAgICAgICAvLyByZW1vdmUgZnJvbSBjaGFpbgorICAgICAgICAgIGlmKHRvTW92ZS0+bmV4dCkgeworICAgICAgICAgICAgdG9Nb3ZlLT5uZXh0LT5zdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgoJih0b01vdmUtPnByZXZpb3VzKSwgJih0b01vdmUtPm5leHQpLCBjb21wYXJlcik7CisgICAgICAgICAgICB0b01vdmUtPm5leHQtPnByZXZpb3VzID0gdG9Nb3ZlLT5wcmV2aW91czsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYodG9Nb3ZlLT5wcmV2aW91cykgeworICAgICAgICAgICAgdG9Nb3ZlLT5wcmV2aW91cy0+bmV4dCA9IHRvTW92ZS0+bmV4dDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBpbnNlcnQKKyAgICAgICAgICB0b01vdmUtPnByZXZpb3VzID0gY3VycmVudC0+cHJldmlvdXM7CisgICAgICAgICAgdG9Nb3ZlLT5uZXh0ID0gY3VycmVudDsKKworICAgICAgICAgIGlmKGN1cnJlbnQtPnByZXZpb3VzKSB7CisgICAgICAgICAgICBjdXJyZW50LT5wcmV2aW91cy0+bmV4dCA9IHRvTW92ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgY3VycmVudC0+cHJldmlvdXMgPSB0b01vdmU7CisKKyAgICAgICAgICB0b01vdmUtPnN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmcHJldkwsICZ0b01vdmUsIGNvbXBhcmVyKTsKKyAgICAgICAgICB0b01vdmUtPm5leHQtPnN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmdG9Nb3ZlLCAmbCwgY29tcGFyZXIpOworICAgICAgICAgIGlmKDApIHsKKyAgICAgICAgICAgIHVfZnByaW50Zihsb2csICJQb3NpdGlvbmVkIGV4cGFuc2lvbiAiKTsKKyAgICAgICAgICAgIHByaW50TGluZSh0b01vdmUsIGxvZyk7CisgICAgICAgICAgICB1X2ZwcmludGYobG9nLCAiIG5ldyBvcmRlcmluZzogXG4iKTsKKyAgICAgICAgICAgIHByaW50T3JkZXJpbmcoZ0xpbmVzLCBzaXplLCBsb2csIFRSVUUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZih0b01vdmUtPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgICAgICAvLyBjaGVjayBmb3IgY3JhemluZXNzIHN1Y2ggYXMgcyA9IHNzL3MKKyAgICAgICAgICAgIC8vIHN1Y2ggbGluZSB3b3VsZCBjb25zaXN0IG9mIHByZXZpb3VzIChvciBuZXh0KSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgZXhwYW5zaW9uIHZhbHVlCisgICAgICAgICAgICAvLyBtYWtlIGEgdGVzdAorICAgICAgICAgICAgVUNoYXIgZnVsbFN0cmluZ1syNTZdOworICAgICAgICAgICAgdV9zdHJjcHkoZnVsbFN0cmluZywgdG9Nb3ZlLT5wcmV2aW91cy0+bmFtZSk7CisgICAgICAgICAgICB1X3N0cmNhdChmdWxsU3RyaW5nLCB0b01vdmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgICAgICAgICBpZih1X3N0cmNtcChmdWxsU3RyaW5nLCB0b01vdmUtPm5hbWUpID09IDApIHsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5wcmV2aW91cy0+bmV4dCA9IHRvTW92ZS0+bmV4dDsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5uZXh0LT5wcmV2aW91cyA9IHRvTW92ZS0+cHJldmlvdXM7CisgICAgICAgICAgICAgIHRvTW92ZS0+aXNSZW1vdmVkID0gVFJVRTsKKyAgICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlJlbW92ZWQ6ICIpOworICAgICAgICAgICAgICBwcmludExpbmUodG9Nb3ZlLCBsb2cpOworICAgICAgICAgICAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgfSBlbHNlIGlmKHRvTW92ZS0+bmV4dC0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgICAgICAgIFVDaGFyIGZ1bGxTdHJpbmdbMjU2XTsKKyAgICAgICAgICAgIHVfc3RyY3B5KGZ1bGxTdHJpbmcsIHRvTW92ZS0+bmV4dC0+bmFtZSk7CisgICAgICAgICAgICB1X3N0cmNhdChmdWxsU3RyaW5nLCB0b01vdmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgICAgICAgICBpZih1X3N0cmNtcChmdWxsU3RyaW5nLCB0b01vdmUtPm5hbWUpID09IDApIHsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5uZXh0LT5zdHJlbmd0aCA9IHRvTW92ZS0+c3RyZW5ndGg7CisgICAgICAgICAgICAgIHRvTW92ZS0+cHJldmlvdXMtPm5leHQgPSB0b01vdmUtPm5leHQ7CisgICAgICAgICAgICAgIHRvTW92ZS0+bmV4dC0+cHJldmlvdXMgPSB0b01vdmUtPnByZXZpb3VzOworICAgICAgICAgICAgICB0b01vdmUtPmlzUmVtb3ZlZCA9IFRSVUU7CisgICAgICAgICAgICAgIHVfZnByaW50Zihsb2csICJSZW1vdmVkIGJlY2F1c2Ugb2YgYmFjazogIik7CisgICAgICAgICAgICAgIHByaW50TGluZSh0b01vdmUsIGxvZyk7CisgICAgICAgICAgICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICAgICAgICAgICAgfSAKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJldlRlc3RMaW5lID0gdGVzdExpbmU7CisgICAgICB9CisgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKyAgICB9CisgIH0KKyAgZGVsZXRlW10gc29ydGVkRXhwYW5zaW9uczsKK30KKworCit2b2lkCitub3RlRXhwYW5zaW9uKExpbmUgKmxpbmUpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIFVuaWNvZGVTdHJpbmcga2V5KGxpbmUtPm5hbWUsIGxpbmUtPmxlbik7CisgIExpbmUgKmVsID0gKExpbmUgKilnRWxlbWVudHMuZ2V0KGtleSk7CisgIGlmKGVsICE9IE5VTEwpIHsKKyAgICBlbC0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgIHVfc3RyY3B5KGVsLT5leHBhbnNpb25TdHJpbmcsIGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgZWwtPmV4cExlbiA9IGxpbmUtPmV4cExlbjsKKyAgfSBlbHNlIHsKKyAgICBMaW5lICp0b0luc2VydCA9IG5ldyBMaW5lKCpsaW5lKTsgCisgICAgdG9JbnNlcnQtPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgICBnRWxlbWVudHMucHV0KFVuaWNvZGVTdHJpbmcobGluZS0+bmFtZSwgbGluZS0+bGVuKSwgdG9JbnNlcnQsIHN0YXR1cyk7CisgIH0KKworICBMaW5lICplbDIgPSAoTGluZSAqKWdFeHBhbnNpb25zLmdldChrZXkpOworICBlbDItPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgdV9zdHJjcHkoZWwyLT5leHBhbnNpb25TdHJpbmcsIGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgIGVsMi0+ZXhwTGVuID0gbGluZS0+ZXhwTGVuOworCisgIGlmKGdEZWJ1ZykgeworICAgIHVfZnByaW50Zihsb2csICJBZGRpbmcgZXhwYW5zaW9uXG4iKTsKKyAgICBwcmludExpbmUobGluZSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgfQorfQorCit2b2lkIAorbm90ZUNvbnRyYWN0aW9uKExpbmUgKmxpbmUpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIExpbmUgKnRvSW5zZXJ0ID0gbmV3IExpbmUoKmxpbmUpOyAKKyAgdG9JbnNlcnQtPmlzQ29udHJhY3Rpb24gPSBUUlVFOworICBnRWxlbWVudHMucHV0KFVuaWNvZGVTdHJpbmcobGluZS0+bmFtZSwgbGluZS0+bGVuKSwgdG9JbnNlcnQsIHN0YXR1cyk7CisgIGlmKGdWZXJib3NlKSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkFkZGluZyBjb250cmFjdGlvblxuIik7CisgICAgZXNjYXBlQUxpbmUobGluZSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiICIpOworICB9Cit9CisKK3ZvaWQKK25vdGVFbGVtZW50KExpbmUgKmxpbmUpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIExpbmUgKnRvSW5zZXJ0ID0gbmV3IExpbmUoKmxpbmUpOworICBnRWxlbWVudHMucHV0KFVuaWNvZGVTdHJpbmcobGluZS0+bmFtZSwgbGluZS0+bGVuKSwgdG9JbnNlcnQsIHN0YXR1cyk7CisgIGlmKDApIHsgLy9pZihnRGVidWcpIAorICAgIGVzY2FwZUFMaW5lKGxpbmUsIGxvZyk7CisgICAgdV9mcHJpbnRmKGxvZywgIiAiKTsKKyAgfQorfQorCisKKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBjb21iaW5hdGlvbiBvZiBjaGFyYWN0ZXJzIGhhcyBjaGFuZ2VkIHBsYWNlIHdpdGggdGhlIAorLy8gYWRqYWNlbnQgZWxlbWVudHMuIElmIHNvLCB0aGVzZSBhcmUgbW9zdCBwcm9iYWJseSBjb250cmFjdGlvbnMuCisvLyBIb3dldmVyLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBjaGVja2VkIGlmIHRoZXNlIGNvbnRyYWN0aW9ucyBhcmUgZmFrZSAtIHRoZSAKKy8vIHRlc3QgaXMgc2ltcGxlIC0gaWYgeHkgaXMgc3VzcGVjdGVkIGNvbnRyYWN0aW9uLCBpZiB3ZSBnZXQgdGhhdCB4L3kgaXMgZXhwYW5zaW9uLCB0aGVuCisvLyB4eSBpcyBhIGZha2UgY29udHJhY3Rpb24uCitpbnQzMl90IAorYW5hbHl6ZUNvbnRyYWN0aW9ucyhMaW5lKiogbGluZXMsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIGludDMyX3QgaSA9IDAsIGogPSAwOworICBpbnQzMl90IG91dE9mT3JkZXIgPSAwOworICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGggPSBVQ09MX09GRjsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGN1cnJTdHJlbmd0aCA9IFVDT0xfT0ZGOworICBMaW5lICoqcHJldkxpbmUgPSBsaW5lczsKKyAgTGluZSAqKmN1cnJMaW5lID0gTlVMTDsKKyAgTGluZSAqKmJhY2t1cExpbmUgPSBOVUxMOworICBVQm9vbCBwcmV2SXNDb250cmFjdGlvbiA9IEZBTFNFLCBjdXJySXNDb250cmFjdGlvbiA9IEZBTFNFOworICAvLyBQcm9ibGVtIGhlcmUgaXMgZGV0ZWN0aW5nIGEgY29udHJhY3Rpb24gdGhhdCBpcyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHNvcnRlZCBsaXN0CisgIGZvcihpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgIGN1cnJMaW5lID0gbGluZXMraTsKKyAgICBzdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgocHJldkxpbmUsIGN1cnJMaW5lLCBjb21wYXJlcik7CisgICAgaWYoc3RyZW5ndGggPT0gVUNPTF9PRkYgfHwgc3RyZW5ndGggIT0gKCpjdXJyTGluZSktPnN0cmVuZ3RoKSB7CisgICAgICBwcmV2SXNDb250cmFjdGlvbiA9IEZBTFNFOworICAgICAgY3VycklzQ29udHJhY3Rpb24gPSBGQUxTRTsKKyAgICAgIGlmKCFvdXRPZk9yZGVyKSB7CisgICAgICAgIGlmKGdWZXJib3NlKSB7CisgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlBvc3NpYmxlIGNvbnRyYWN0aW9uczogIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIG5vdyB3ZSBoYXZlIHR3byBlbGVtZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQuIFRoZSBxdWVzdGlvbiBpcywgCisgICAgICAvLyB3aGljaCBvbmUgb2YgdGhlbSBpcyB0aGUgY29udHJhY3Rpb24gLSB3aGljaCBvbmUgaGFzIG1vdmVkLiAKKyAgICAgIC8vIENvdWxkIGJlIHRoZSBwcmV2aW91cywgYnV0IGNvdWxkIGFsc28gYmUgdGhlIGN1cnJlbnQuCisKKyAgICAgIG91dE9mT3JkZXIrKzsKKworICAgICAgLy8gRmlyc3QsIGxldHMgY2hlY2sgd2hldGhlciB0aGUgcHJldmlvdXMgaGFzIGp1bXBlZCBiYWNrCisgICAgICBqID0gaSsxOworICAgICAgLy8gc2tpcCBhbGwgdGhlIG5leHRzIHRoYXQgaGF2ZSBzbWFsbGVyIHN0cmVuZ3RoLCB0aGV5IGRvbid0IGhhdmUgYW4gZWZmZWN0CisgICAgICB3aGlsZShqIDwgc2l6ZSAmJiAoKihsaW5lcytqKSktPnN0cmVuZ3RoID4gKCpjdXJyTGluZSktPnN0cmVuZ3RoKSB7CisgICAgICAgIGorKzsKKyAgICAgIH0KKyAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBlbGVtZW50cyBvZiBzYW1lIG9yIGdyZWF0ZXIgc3RyZW5ndGgKKyAgICAgIHdoaWxlKGogPCBzaXplICYmIAorICAgICAgICAoc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKHByZXZMaW5lLCAoYmFja3VwTGluZSA9IGxpbmVzK2opLCBjb21wYXJlcikpID09IFVDT0xfT0ZGKSB7CisgICAgICAgIGorKzsKKyAgICAgICAgLy8gaWYgd2Ugc2tpcHBlZCBtb3JlIHRoYW4gb25lLCBpdCBtaWdodCBiZSBpbiBmYWN0IGEgY29udHJhY3Rpb24KKyAgICAgICAgcHJldklzQ29udHJhY3Rpb24gPSBUUlVFOworICAgICAgfQorICAgICAgaWYocHJldklzQ29udHJhY3Rpb24pIHsKKyAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCpwcmV2TGluZSk7CisgICAgICAgIGogPSBpLTI7CisgICAgICAgIC8vIGFkZCBhbGwgdGhlIHByZXZpb3VzIGVsZW1lbnRzIHdpdGggc21hbGxlciBzdHJlbmd0aCwgc2luY2UgdGhleSBhbHNvCisgICAgICAgIC8vIHdpbGwganVtcCBvdmVyIGFuZCBhcmUgY29udHJhY3Rpb25zCisgICAgICAgIHdoaWxlKGogPj0gMCAmJiAoKihsaW5lcytqKzEpKS0+c3RyZW5ndGggPiAoKmN1cnJMaW5lKS0+c3RyZW5ndGgpIHsKKyAgICAgICAgICBzdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgobGluZXMraiwgY3VyckxpbmUsIGNvbXBhcmVyKTsKKyAgICAgICAgICBpZihzdHJlbmd0aCA9PSBVQ09MX09GRikgeworICAgICAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCoobGluZXMraikpOworICAgICAgICAgIH0KKyAgICAgICAgICBqLS07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gbm93IHdlIGNoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMganVtcGluZyBmb3J3YXJkLAorICAgICAgLy8gdGhlIGRhbmNlIHN0ZXBzIGFyZSBhbmFsb2dvdXMgdG8gYWJvdmUuCisgICAgICBqID0gaSAtIDI7CisgICAgICB3aGlsZShqID49IDAgJiYgKCoobGluZXMraisxKSktPnN0cmVuZ3RoID4gKCpjdXJyTGluZSktPnN0cmVuZ3RoKSB7CisgICAgICAgIGotLTsKKyAgICAgIH0KKyAgICAgIHdoaWxlKGogPj0gMCAmJiAKKyAgICAgICAgKHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgoYmFja3VwTGluZSA9IGxpbmVzK2opLCBjdXJyTGluZSwgY29tcGFyZXIpKSA9PSBVQ09MX09GRikgeworICAgICAgICBqLS07CisgICAgICAgIGN1cnJJc0NvbnRyYWN0aW9uID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGlmKGN1cnJJc0NvbnRyYWN0aW9uKSB7CisgICAgICAgIGlmKGdWZXJib3NlKSB7CisgICAgICAgICAgZXNjYXBlQUxpbmUoKmN1cnJMaW5lLCBsb2cpOworICAgICAgICAgIHVfZnByaW50Zihsb2csICIgIik7CisgICAgICAgIH0KKyAgICAgICAgaiA9IGkrMTsKKyAgICAgICAgd2hpbGUoaiA8IHNpemUgJiYgKCoobGluZXMraikpLT5zdHJlbmd0aCA+ICgqY3VyckxpbmUpLT5zdHJlbmd0aCkgeworICAgICAgICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aChwcmV2TGluZSwgbGluZXMraiwgY29tcGFyZXIpOworICAgICAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oKihsaW5lcytqKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBOb3Qgc3VyZSBhYm91dCBlaXRoZXIuIExpc3QgYm90aCBhbmQgdGhlbiBjaGVjaworICAgICAgaWYoIShwcmV2SXNDb250cmFjdGlvbiB8fCBjdXJySXNDb250cmFjdGlvbikpIHsKKyAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCpwcmV2TGluZSk7CisgICAgICAgIG5vdGVDb250cmFjdGlvbigqY3VyckxpbmUpOworICAgICAgfQorICAgIH0KKyAgICBwcmV2TGluZSA9IGN1cnJMaW5lOworICB9CisgIGlmKG91dE9mT3JkZXIpIHsKKyAgICBpZihnVmVyYm9zZSkgeworICAgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgICAgfQorICB9CisgIHJldHVybiBvdXRPZk9yZGVyOworfQorCitpbnQzMl90CitkZXRlY3RDb250cmFjdGlvbnMoTGluZSAqKmdMaW5lcywgTGluZSAqbGluZXMsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIGludDMyX3QgaSA9IDAsIGogPSAwOworICBpbnQzMl90IG5vQ29udHJhY3Rpb25zID0gMDsKKyAgLy8gQ3JlYXRlIGFuZCBjb21wYXJlIGRvdWJsZXM6CisgIExpbmUgKmJhY2t1cExpbmVzID0gbmV3IExpbmVbc2l6ZV07IAorICBMaW5lOjpjb3B5QXJyYXkoYmFja3VwTGluZXMsIGxpbmVzLCBzaXplKTsgCisgIC8vIGRldGVjdCBjb250cmFjdGlvbnMKKworICBMaW5lICoqZ0xpbmVzQmFja3VwID0gTlVMTDsgLy9uZXcgTGluZSpbc2l6ZV07IAorCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIC8vIHByZXNlcnZlIGluZGV4IGFuZCBwcmV2aW91cworICAgIExpbmU6OmNvcHlBcnJheShsaW5lcywgYmFja3VwTGluZXMsIHNpemUpOyAKKyAgICBmb3IoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgIHVfc3RyY3B5KGxpbmVzW2pdLm5hbWUsIGJhY2t1cExpbmVzW2ldLm5hbWUpOworICAgICAgdV9zdHJjYXQobGluZXNbal0ubmFtZSwgYmFja3VwTGluZXNbal0ubmFtZSk7CisgICAgICBsaW5lc1tqXS5sZW4gPSBiYWNrdXBMaW5lc1tpXS5sZW4rYmFja3VwTGluZXNbal0ubGVuOyAgICAgCisgICAgfQorCisgICAgaWYoKG5vQ29udHJhY3Rpb25zICs9IGFuYWx5emVDb250cmFjdGlvbnMoZ0xpbmVzLCBzaXplLCBjb21wYXJlcikpICYmIGdEZWJ1ZykgeworICAgICAgaWYoZ0xpbmVzQmFja3VwID09IE5VTEwpIHsKKyAgICAgICAgZ0xpbmVzQmFja3VwID0gbmV3IExpbmUqW3NpemVdOworICAgICAgfQorICAgICAgLy8gU2hvdyB0aGUgc29ydGVkIGRvdWJsZXMsIGZvciBkZWJ1Z2dpbmcKKyAgICAgIHNldEFycmF5KGdMaW5lc0JhY2t1cCwgbGluZXMsIHNpemUpOworICAgICAgcXNvcnQoZ0xpbmVzQmFja3VwLCBzaXplLCBzaXplb2YoTGluZSAqKSwgY29tcGFyZXIpOworICAgICAgLy9zZXRJbmRleGVzKGdMaW5lc0JhY2t1cCwgc2l6ZSk7CisgICAgICBhbmFseXplU3RyZW5ndGgoZ0xpbmVzQmFja3VwLCBzaXplLCBjb21wYXJlcik7CisgICAgICBwcmludE9yZGVyaW5nKGdMaW5lc0JhY2t1cCwgc2l6ZSwgbG9nKTsKKyAgICB9CisgICAgaWYoIWdRdWlldCkgeworICAgICAgdV9mcHJpbnRmKGxvZywgIi4iKTsKKyAgICB9CisgIH0KKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICB9CisgIGRlbGV0ZVtdIGJhY2t1cExpbmVzOyAKKyAgaWYoZ0xpbmVzQmFja3VwKSB7CisgICAgZGVsZXRlW10gZ0xpbmVzQmFja3VwOyAKKyAgfQorICByZXR1cm4gbm9Db250cmFjdGlvbnM7Cit9CisKKy8vIGdMaW5lcyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGFuIGFycmF5IG9mIHNvcnRlZCBwb2ludGVycy4KKy8vIENvbnRyYWN0aW9ucyBhcmUgYWxyZWFkeSBpbmNsdWRlZC4gCitpbnQzMl90CitkZXRlY3RFeHBhbnNpb25zKExpbmUgKipnTGluZXMsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAvLyBkZXRlY3QgZXhwYW5zaW9ucworCisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdGFydFN0cmVuZ3RoID0gVUNPTF9PRkYsIGVuZFN0cmVuZ3RoID0gVUNPTF9PRkYsIAorICAgIHN0cmVuZ3RoID0gVUNPTF9PRkYsIHByZXZpb3VzU3RyZW5ndGggPSBVQ09MX09GRjsKKyAgTGluZSBzdGFydCwgZW5kLCBzcmM7CisgIExpbmUgKnN0YXJ0UCA9ICZzdGFydCwgKmVuZFAgPSAmZW5kLCAqc3JjUCA9ICZzcmM7CisgIExpbmUgKmN1cnJlbnQgPSBOVUxMOworICBtZW1zZXQoc3RhcnRQLCAwLCBzaXplb2YoTGluZSkpOworICBtZW1zZXQoZW5kUCwgMCwgc2l6ZW9mKExpbmUpKTsKKyAgbWVtc2V0KHNyY1AsIDAsIHNpemVvZihMaW5lKSk7CisgIGludDMyX3Qgc3JjTGVuOworICBpbnQzMl90IGkgPSAwLCBqID0gMCwgayA9IDA7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIHVfc3RyY3B5KHN0YXJ0Lm5hbWUsICgqKGdMaW5lcytpKSktPm5hbWUpOworICAgIHVfc3RyY3B5KGVuZC5uYW1lLCAoKihnTGluZXMraSkpLT5uYW1lKTsKKyAgICBzcmNMZW4gPSAoKihnTGluZXMraSkpLT5sZW47CisgICAgdV9zdHJjcHkoc3RhcnQubmFtZStzcmNMZW4sICgqKGdMaW5lcykpLT5uYW1lKTsKKyAgICBzdGFydC5sZW4gPSBzcmNMZW4gKyAoKihnTGluZXMpKS0+bGVuOworICAgIHVfc3RyY3B5KGVuZC5uYW1lK3NyY0xlbiwgKCooZ0xpbmVzK3NpemUtMSkpLT5uYW1lKTsKKyAgICBlbmQubGVuID0gc3JjTGVuICsgKCooZ0xpbmVzK3NpemUtMSkpLT5sZW47CisKKyAgICBmb3IoayA9IDA7IGsgPCBzaXplOyBrKyspIHsgLy8gayBpcyBpbmRleCBvZiBhIHRoaW5nIHRoYXQgaXMgbm90IGRvdWJsZWQKKyAgICAgIGN1cnJlbnQgPSAqKGdMaW5lcytrKTsKKyAgICAgIC8vIHNlZSBpZiB3ZSBoYXZlIG1vdmVkIHRvIGZyb250CisgICAgICAvLyBoYXMgaXQgbW92ZWQgdG8gdGhlIHZlcnkgYmVnZ2luaW5nCisgICAgICBpZigoc3RhcnRTdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgoKGdMaW5lcytrKSwgJnN0YXJ0UCwgY29tcGFyZXIpKSAhPSBVQ09MX09GRikgeworICAgICAgICBjb250aW51ZTsgLy8gdGhpcyBvbmUgaXMgaW4gdGhlIGZyb250CisgICAgICB9CisgICAgICAvLyBoYXMgaXQgbW92ZWQgdG8gdGhlIHZlcnkgZW5kPworICAgICAgaWYoKGVuZFN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmZW5kUCwgKGdMaW5lcytrKSwgY29tcGFyZXIpKSAhPSBVQ09MX09GRikgeworICAgICAgICBjb250aW51ZTsgLy8gdGhpcyBvbmUgaXMgaW4gdGhlIGJhY2sKKyAgICAgIH0KKyAgICAgIC8vIFBvdGVudGlhbCBFeHBhbnNpb24gICAgIAorICAgICAgaWYoZ0RlYnVnKSB7IC8vZ1ZlcmJvc2UKKyAgICAgICAgdV9mcHJpbnRmKGxvZywgIlBvc3NpYmxlIGV4cGFuc2lvbjogIik7CisgICAgICAgIGVzY2FwZUFMaW5lKCooZ0xpbmVzK2spLCBsb2cpOworICAgICAgICB1X2ZwcmludGYobG9nLCAiICIpOworICAgICAgfQorICAgICAgLy8gTm93IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyByZWFsbHkgYW4gZXhwYW5zaW9uCisgICAgICAvLyBGaXJzdCwgd2UgaGF2ZSB0byBmaW5kIGl0CisgICAgICB1X3N0cmNweShzcmMubmFtZSwgKCooZ0xpbmVzK2kpKS0+bmFtZSk7CisgICAgICBmb3IoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgdV9zdHJjcHkoc3JjLm5hbWUrc3JjTGVuLCAoKihnTGluZXMraikpLT5uYW1lKTsKKyAgICAgICAgc3JjLmxlbiA9IHNyY0xlbiArICgqKGdMaW5lcytqKSktPmxlbjsKKyAgICAgICAgaWYoKHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmc3JjUCwgKGdMaW5lcytrKSwgY29tcGFyZXIpKSA9PSBVQ09MX09GRikgeworICAgICAgICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgoZ0xpbmVzK2spLCAmc3JjUCwgY29tcGFyZXIpOworICAgICAgICAgIC8vIHdlIGZvdW5kIGl0ICooZ0xpbmVzK2otMSkgaXMgdGhlIGVsZW1lbnQgdGhhdCBpcyBpbnRlcmVzdGluZworICAgICAgICAgIC8vIHNpbmNlIGdMaW5lcytqLTEgPCBnTGluZXMrayA8IGdMaW5lcytqCisgICAgICAgICAgaWYoZ0RlYnVnKSB7IC8vZ1ZlcmJvc2UKKyAgICAgICAgICAgIHVfZnByaW50Zihsb2csICJpID0gJWksIGsgPSAlaSwgaiA9ICVpICIsIGksIGssIGopOworICAgICAgICAgICAgZXNjYXBlQUxpbmUoKihnTGluZXMraSksIGxvZyk7CisgICAgICAgICAgICBlc2NhcGVBTGluZSgqKGdMaW5lcytqLTEpLCBsb2cpOworICAgICAgICAgICAgcHJpbnRTdHJlbmd0aChwcmV2aW91c1N0cmVuZ3RoLCBsb2cpOworICAgICAgICAgICAgZXNjYXBlQUxpbmUoY3VycmVudCwgbG9nKTsKKyAgICAgICAgICAgIHByaW50U3RyZW5ndGgoc3RyZW5ndGgsIGxvZyk7CisgICAgICAgICAgICBlc2NhcGVBTGluZSgqKGdMaW5lcytpKSwgbG9nKTsKKyAgICAgICAgICAgIGVzY2FwZUFMaW5lKCooZ0xpbmVzK2opLCBsb2cpOworICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjb250cmFjdGlvbiB0aGF0IGlzIHRoZSBzYW1lIGFzIGFuIGV4cGFuc2lvbgorICAgICAgICAgIC8vIG9yIGEgbXVsdGkgY2hhcmFjdGVyIHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZworICAgICAgICAgIGN1cnJlbnQtPmFkZEV4cGFuc2lvbkhpdChpLCBqKTsKKyAgICAgICAgICBjdXJyZW50LT5pc0V4cGFuc2lvbiA9IFRSVUU7CisgICAgICAgICAgY3VycmVudC0+ZXhwSW5kZXggPSBrOworICAgICAgICAgIC8vIGNhY2hlIGV4cGFuc2lvbgorICAgICAgICAgIGdFeHBhbnNpb25zLnB1dChVbmljb2RlU3RyaW5nKGN1cnJlbnQtPm5hbWUsIGN1cnJlbnQtPmxlbiksIGN1cnJlbnQsIHN0YXR1cyk7IC8vbmV3IExpbmUoKmN1cnJlbnQpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNTdHJlbmd0aCA9IHN0cmVuZ3RoOworICAgICAgfQorICAgIH0KKyAgICBpZighZ1F1aWV0KSB7CisgICAgICB1X2ZwcmludGYobG9nLCAiLiIpOworICAgIH0KKyAgfSAgCisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgfQorICAvLyBub3cgd2UgaGF2ZSBpZGVudGlmaWVkIHBvc3NpYmxlIGV4cGFuc2lvbnMuIFdlIG5lZWQgdG8gZmluZCBvdXQgaG93IGRvIHRoZXkgZXhwYW5kLiAKKyAgLy8gTGV0J3MgaXRlcmF0ZSBvdmVyIGV4cGFuc2lvbnMgY2FjaGUgLSBpdCdzIGVhc2llci4KKyAgY29uc3QgVUhhc2hFbGVtZW50ICplbCA9IE5VTEw7CisgIGludDMyX3QgaGFzaEluZGV4ID0gLTE7CisgIExpbmUgKmRvdWJsZXMgPSBuZXcgTGluZVtzaXplKjEwXTsgCisgIExpbmUgKipzb3J0ZXIgPSBuZXcgTGluZSpbc2l6ZSoxMF07CisgIGludDMyX3QgY3VyclNpemUgPSAwOworICBpbnQzMl90IG5ld1NpemUgPSAwOworICBMaW5lICpwcmV2ID0gTlVMTDsKKyAgTGluZSAqbmV4dCA9IE5VTEw7CisgIExpbmUgKm9yaWdpbiA9IE5VTEw7CisgIGludCByZXN1bHQgPSAwOworICAvLyBNYWtlIGEgbGlzdCBvZiB0aGluZ3MgaW4gdGhlIHZpbmNpbml0eSBvZiBleHBhbnNpb24gY2FuZGlkYXRlCisgIC8vIGluIGV4cGFuc2lvblByZWZpeGVzIGFuZCBleHBhbnNpb25BZnRlciB3ZSBoYXZlIHN0b3JlZCB0aGUKKyAgLy8gcHJlZml4ZXMgb2Ygc3R1ZmYgdGhhdCBjYXVzZWQgdGhlIGRldGVjdGlvbiBvZiBhbiBleHBhbnNpb24KKyAgLy8gYW5kIGEgcG9zaXRpb24gd2hlcmUgdGhlIGV4cGFuc2lvbiB3YXMuIAorICAvLyBGb3IgZXhhbXBsZSAoaWN1LCBkZV9fUEhPTkVCT09LKSwgd2UgaGFkOgorICAvLyBhRSA8PDwgXHUwMEU0IDwgYWYKKyAgLy8gQUQgPCBcdTAwRTQgPDw8IEFlCisgIC8vIEZyb20gdGhhdCB3ZSB3aWxsIGNvbnN0cnVjdCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgorICAvLyBBRCA8IGFFIDw8PCBcdTAwRTQvIDw8PCBBZSA8IGFmCisgIC8vIHRoZW4gd2Ugd2lsbCB0YWtlIHRoZSB2aW5jaW5pdHkgb2YgXHUwMEU0OgorICAvLyBhRSA8PDwgXHUwMEU0LyA8PDwgQWUKKyAgLy8gdGhlbiB3ZSB3aWxsIGNob29zZSB0aGUgc21hbGxlc3QgZXhwYW5zaW9uIHRvIGJlIHRoZSBleHBhbnNpb24KKyAgLy8gcGFydDogJ2UnLgorICAvLyBpZiB0aGVyZSBpcyBlcXVhbGl0eSwgd2UgY2hvb3NlIHRoZSBlcXVhbCBwYXJ0OgorICAvLyAod2luMzIsIGRlX19QSE9ORUJPT0spOgorICAvLyBBRCA8IFx1MDBFNC8gPSBhZSA8PDwgYUUgPDw8IEFlCisgIC8vIHdlIGNob29zZSAnZScuCisKKyAgd2hpbGUoKGVsID0gZ0V4cGFuc2lvbnMubmV4dEVsZW1lbnQoaGFzaEluZGV4KSkgIT0gTlVMTCkgeworICAgIG5ld1NpemUgPSAwOworICAgIGN1cnJlbnQgPSAoTGluZSAqKWVsLT52YWx1ZS5wb2ludGVyOworICAgIGN1cnJTaXplID0gc2l6ZSpjdXJyZW50LT5leHBhbnNpb25QcmVmaXhlc1NpemU7CisgICAgaWYoZ0RlYnVnKSB7CisgICAgICBlc2NhcGVBTGluZShjdXJyZW50LCBsb2cpOworICAgICAgdV9mcHJpbnRmKGxvZywgIiBOdW1iZXI6ICVpXG4iLCBjdXJyZW50LT5leHBhbnNpb25QcmVmaXhlc1NpemUpOworICAgIH0KKyAgICAvLyBjb25zdHJ1Y3QgdGhlIGRvdWJsZXMgCisgICAgZm9yKGkgPSAwOyBpIDwgY3VycmVudC0+ZXhwYW5zaW9uUHJlZml4ZXNTaXplOyBpKyspIHsKKyAgICAgIGRvdWJsZXNbbmV3U2l6ZV0uc3VmZml4ID0gY3VycmVudC0+ZXhwYW5zaW9uQWZ0ZXJbaV0tMTsKKyAgICAgIGRvdWJsZXNbbmV3U2l6ZSsrXS5zZXRUb0NvbmNhdCgqKGdMaW5lcytjdXJyZW50LT5leHBhbnNpb25QcmVmaXhlc1tpXSksICooZ0xpbmVzK2N1cnJlbnQtPmV4cGFuc2lvbkFmdGVyW2ldLTEpKTsKKyAgICAgIGRvdWJsZXNbbmV3U2l6ZV0uc3VmZml4ID0gY3VycmVudC0+ZXhwYW5zaW9uQWZ0ZXJbaV07CisgICAgICBkb3VibGVzW25ld1NpemUrK10uc2V0VG9Db25jYXQoKihnTGluZXMrY3VycmVudC0+ZXhwYW5zaW9uUHJlZml4ZXNbaV0pLCAqKGdMaW5lcytjdXJyZW50LT5leHBhbnNpb25BZnRlcltpXSkpOworICAgIH0KKyAgICAvLyBhZGQgdGhlIGV4cGFuc2lvbiB3ZSdyZSBvYnNlcnZpbmcKKyAgICBkb3VibGVzW25ld1NpemUrK10gPSAqY3VycmVudDsKKyAgICBzZXRBcnJheShzb3J0ZXIsIGRvdWJsZXMsIG5ld1NpemUpOworICAgIHFzb3J0KHNvcnRlciwgbmV3U2l6ZSwgc2l6ZW9mKExpbmUqKSwgY29tcGFyZXIpOworICAgIGFuYWx5emVTdHJlbmd0aChzb3J0ZXIsIG5ld1NpemUsIGNvbXBhcmVyKTsKKyAgICBpZihnRGVidWcpIHsKKyAgICAgIHByaW50T3JkZXJpbmcoc29ydGVyLCBuZXdTaXplLCBsb2cpOworICAgIH0KKyAgICBpID0gMDsKKyAgICB3aGlsZSgqKihzb3J0ZXIraSkgIT0gKmN1cnJlbnQpIHsKKyAgICAgIGkrKzsKKyAgICB9CisgICAgLy8gZmluZCB0aGUgdHdvIGFkZGl0aW9ucworICAgIGlmKCgqKHNvcnRlcitpKSktPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAvLyBpZiB3ZSBhZSBpZAorICAgICAgb3JpZ2luID0gKihnTGluZXMrKCgqKHNvcnRlcitpLTEpKS0+c3VmZml4KSk7CisgICAgICB1X3N0cmNweShjdXJyZW50LT5leHBhbnNpb25TdHJpbmcsIG9yaWdpbi0+bmFtZSk7CisgICAgICBjdXJyZW50LT5leHBMZW4gPSBvcmlnaW4tPmxlbjsKKyAgICB9IGVsc2UgaWYoaSA8IG5ld1NpemUtMSAmJiAoKihzb3J0ZXIraSsxKSktPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICBvcmlnaW4gPSAqKGdMaW5lcysoKCooc29ydGVyK2krMSkpLT5zdWZmaXgpKTsKKyAgICAgIHVfc3RyY3B5KGN1cnJlbnQtPmV4cGFuc2lvblN0cmluZywgb3JpZ2luLT5uYW1lKTsKKyAgICAgIGN1cnJlbnQtPmV4cExlbiA9IG9yaWdpbi0+bGVuOworICAgIH0gZWxzZSB7CisgICAgICBpZihpID4gMCkgeworICAgICAgICBwcmV2ID0gKihnTGluZXMrKCooc29ydGVyK2ktMSkpLT5zdWZmaXgpOworICAgICAgICBpZihpIDwgbmV3U2l6ZS0xKSB7CisgICAgICAgICAgbmV4dCA9ICooZ0xpbmVzKygqKHNvcnRlcitpKzEpKS0+c3VmZml4KTsKKyAgICAgICAgICByZXN1bHQgPSBjb21wYXJlcigmcHJldiwgJm5leHQpOworICAgICAgICAgIGlmKHJlc3VsdCA8PSAwKSB7CisgICAgICAgICAgICB1X3N0cmNweShjdXJyZW50LT5leHBhbnNpb25TdHJpbmcsIHByZXYtPm5hbWUpOworICAgICAgICAgICAgY3VycmVudC0+ZXhwTGVuID0gcHJldi0+bGVuOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1X3N0cmNweShjdXJyZW50LT5leHBhbnNpb25TdHJpbmcsIG5leHQtPm5hbWUpOworICAgICAgICAgICAgY3VycmVudC0+ZXhwTGVuID0gbmV4dC0+bGVuOworICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgIAorICAgICAgfQorICAgICAgaWYoMCkgeyAvL2lmKGdEZWJ1ZykKKyAgICAgICAgdV9mcHJpbnRmKGxvZywgIkV4cGFuc2lvbiBpczogIik7CisgICAgICAgIGVzY2FwZUFMaW5lKGN1cnJlbnQsIGxvZyk7CisgICAgICAgIHVfZnByaW50Zihsb2csICIvIik7CisgICAgICAgIGVzY2FwZUV4cGFuc2lvbihjdXJyZW50LCBsb2cpOworICAgICAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgbm90ZUV4cGFuc2lvbihjdXJyZW50KTsKKyAgICAvL25vdGVFeHBhbnNpb24oZ0xpbmVzLCBjdXJyZW50LCBzaXplLCBjb21wYXJlcik7CisgICAgaWYoIWdRdWlldCkgeworICAgICAgdV9mcHJpbnRmKGxvZywgIi4iKTsKKyAgICB9CisgIH0KKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICB9CisgIGRlbGV0ZVtdIGRvdWJsZXM7CisgIGRlbGV0ZVtdIHNvcnRlcjsKKyAgcmV0dXJuIGdFeHBhbnNpb25zLmNvdW50KCk7Cit9CisKK1VCb29sCitpc1RhaWxvcmVkKExpbmUgKmxpbmUsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBVQm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgVUNvbGxhdGlvbkVsZW1lbnRzICp0YWlsb3JpbmcgPSB1Y29sX29wZW5FbGVtZW50cyhnQ29sLCBsaW5lLT5uYW1lLCBsaW5lLT5sZW4sICZzdGF0dXMpOworICBVQ29sbGF0aW9uRWxlbWVudHMgKnVjYSA9IHVjb2xfb3BlbkVsZW1lbnRzKGdVQ0EsIGxpbmUtPm5hbWUsIGxpbmUtPmxlbiwgJnN0YXR1cyk7CisKKyAgaW50MzJfdCB0YWlsRWxlbWVudCA9IFVDT0xfTlVMTE9SREVSOworICBpbnQzMl90IHVjYUVsZW1lbnQgPSBVQ09MX05VTExPUkRFUjsKKworICBkbyB7CisgICAgZG8geworICAgICAgdGFpbEVsZW1lbnQgPSB1Y29sX25leHQodGFpbG9yaW5nLCAmc3RhdHVzKTsKKyAgICB9IHdoaWxlKHRhaWxFbGVtZW50ID09IDApOworICAgIGRvIHsKKyAgICAgIHVjYUVsZW1lbnQgPSB1Y29sX25leHQodWNhLCAmc3RhdHVzKTsKKyAgICB9IHdoaWxlKHVjYUVsZW1lbnQgPT0gMCk7CisgICAgaWYodGFpbEVsZW1lbnQgIT0gdWNhRWxlbWVudCkgeworICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSB3aGlsZSAodGFpbEVsZW1lbnQgIT0gVUNPTF9OVUxMT1JERVIgJiYgdWNhRWxlbWVudCAhPSBVQ09MX05VTExPUkRFUik7CisKKyAgdWNvbF9jbG9zZUVsZW1lbnRzKHRhaWxvcmluZyk7CisgIHVjb2xfY2xvc2VFbGVtZW50cyh1Y2EpOworICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkCityZWR1Y2VVbnRhaWxvcmVkKExpbmUgKipnTGluZXMsIGludDMyX3Qgc2l6ZSl7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBMaW5lICpjdXJyZW50ID0gKihnTGluZXMpOworICBMaW5lICpwcmV2aW91cyA9IE5VTEw7CisgIHdoaWxlKGN1cnJlbnQpIHsKKyAgICAvLyBpZiB0aGUgY3VycmVudCBsaW5lIGlzIG5vdCB0YWlsb3JlZCBhY2NvcmRpbmcgdG8gdGhlIFVDQQorICAgIGlmKCFpc1RhaWxvcmVkKGN1cnJlbnQsIHN0YXR1cykpIHsKKyAgICAgIC8vIHdlIHJlbW92ZSBpdAorICAgICAgY3VycmVudC0+aXNSZW1vdmVkID0gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gaWYgaXQncyB0YWlsb3JlZCAKKyAgICAgIGlmKGN1cnJlbnQtPnByZXZpb3VzICYmIGN1cnJlbnQtPnByZXZpb3VzLT5pc1JlbW92ZWQgPT0gVFJVRSkgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQtPnByZXZpb3VzOworICAgICAgICB3aGlsZShwcmV2aW91cyAmJiAocHJldmlvdXMtPnN0cmVuZ3RoID4gY3VycmVudC0+c3RyZW5ndGggfHwgcHJldmlvdXMtPmlzRXhwYW5zaW9uIHx8IHByZXZpb3VzLT5pc0NvbnRyYWN0aW9uKSAmJiBwcmV2aW91cy0+aXNSZW1vdmVkKSB7CisgICAgICAgICAgaWYocHJldmlvdXMtPnByZXZpb3VzICYmIHByZXZpb3VzLT5wcmV2aW91cy0+aXNSZW1vdmVkKSB7CisgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5wcmV2aW91czsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKHByZXZpb3VzKSB7CisgICAgICAgICAgcHJldmlvdXMtPmlzUmVzZXQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICgqKGdMaW5lcykpLT5pc1Jlc2V0ID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKyAgfQorfQorCit2b2lkCitjb25zdHJ1Y3RBbmRBbmFseXplKExpbmUgKipnTGluZXMsIExpbmUgKmxpbmVzLCBpbnQzMl90IHNpemUsIENvbXBhcmVGbiBjb21wYXJlcikgeworICBpbnQzMl90IGkgPSAwLCBqID0gMCwgayA9IDA7CisgIC8vIHNldHVwIG91ciBjb21wYXJlIGFycmF5cyB0byBwb2ludCB0byBzaW5nbGUgc2V0LgorCisgIC8vIEZvciBjb250cmFjdGlvbnMgd2UgbmVlZCBhIGJsb2NrIG9mIGRhdGEKKyAgc2V0QXJyYXkoZ0xpbmVzLCBsaW5lcywgc2l6ZSk7CisgIC8vc2l6ZSA9IHNldEFycmF5KGdMaW5lcyk7CisKKyAgcXNvcnQoZ0xpbmVzLCBzaXplLCBzaXplb2YoTGluZSAqKSwgY29tcGFyZXIpOworCisgIC8vIEVzdGFibGlzaCB3aG8gaXMgcHJldmlvdXMgYWNjb3JkaW5nIHRvIHRoZSBzb3J0IG9yZGVyCisgIC8vc2V0SW5kZXhlcyhnTGluZXMsIHNpemUpOworCisgIGFuYWx5emVTdHJlbmd0aChnTGluZXMsIHNpemUsIGNvbXBhcmVyKTsKKyAgaWYoZ1ZlcmJvc2UpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiT3JkZXJpbmc6XG4iKTsKKyAgICBwcmludE9yZGVyaW5nKGdMaW5lcywgc2l6ZSwgbG9nKTsKKyAgfQorCisgIC8vc2hvd0RpZmZlcmVuY2VzKGV4ZW1wbGFyU2V0U2l6ZSk7CisgIC8vZHVtcERhdGEoZXhlbXBsYXJTZXRTaXplKTsKKworICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkRldGVjdGluZyBjb250cmFjdGlvbnM/XG4iKTsKKyAgfQorICBpbnQzMl90IG5vQ29udHJhY3Rpb25zID0gMDsKKyAgbm9Db250cmFjdGlvbnMgPSBkZXRlY3RDb250cmFjdGlvbnMoZ0xpbmVzLCBsaW5lcywgc2l6ZSwgY29tcGFyZXIpOworICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkRldGVjdGVkICVpIGNvbnRyYWN0aW9uc1xuIiwgbm9Db250cmFjdGlvbnMpOworICB9CisKKyAgLy8gbm93IHdlIGhhdmUgc3VzcGVjdGVkIGNvbnRyYWN0aW9ucyBpbiB0aGUgdGFibGUKKyAgLy8gd2UgaGF2ZSB0byByZS1zb3J0IHRoZSB0aGluZ3MgCisgIHNpemUgPSBzZXRBcnJheShnTGluZXMpOworICBxc29ydChnTGluZXMsIHNpemUsIHNpemVvZihMaW5lICopLCBjb21wYXJlcik7CisgIGFuYWx5emVTdHJlbmd0aChnTGluZXMsIHNpemUsIGNvbXBhcmVyKTsKKworICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkRldGVjdGluZyBleHBhbnNpb25zXG4iKTsKKyAgfQorICBpbnQzMl90IG5vRXhwYW5zaW9ucyA9IGRldGVjdEV4cGFuc2lvbnMoZ0xpbmVzLCBzaXplLCBjb21wYXJlcik7CisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiRGV0ZWN0ZWQgJWkgZXhwYW5zaW9uc1xuIiwgbm9FeHBhbnNpb25zKTsKKyAgfQorCisgIHBvc2l0aW9uRXhwYW5zaW9ucyhnTGluZXMsIHNpemUsIGNvbXBhcmVyKTsKKworICBpZihnVmVyYm9zZSkgeworICAgIHVfZnByaW50Zihsb2csICJBZnRlciBwb3NpdGlvbmluZyBleHBhbnNpb25zOlxuIik7CisgICAgcHJpbnRPcmRlcmluZyhnTGluZXMsIHNpemUsIGxvZywgVFJVRSk7CisgIH0KKyAgLy9yZWR1Y2VVbnRhaWxvcmVkKGdMaW5lcywgc2l6ZSk7CisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYob3V0LCAiRmluYWwgcmVzdWx0XG4iKTsKKyAgfQorICBwcmludE9yZGVyaW5nKGdMaW5lcywgc2l6ZSwgb3V0LCBUUlVFKTsKKyAgcHJpbnRPcmRlcmluZyhnTGluZXMsIHNpemUsIGxvZywgVFJVRSk7Cit9CisKKy8vIENoZWNrIHdoZXRoZXIgdXBwZXIgY2FzZSBjb21lcyBiZWZvcmUgbG93ZXIgY2FzZSBvciB2aWNlLXZlcnNhCitpbnQzMl90IAorY2hlY2tDYXNlT3JkZXJpbmcodm9pZCkgeworICBVQ2hhciBzdHVmZltdWzNdID0geworICAgIHsgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwNjF9LCAvLyJhYSIsCisgICAgeyAweDAwNjEsIHNlcGFyYXRvckNoYXIsIDB4MDA0MSB9LCAvLyJhXFx1MDBFMCIsCisgICAgeyAweDAwNDEsIHNlcGFyYXRvckNoYXIsIDB4MDA2MSB9LCAvLyJcXHUwMEUwYSIsCisgICAgeyAweDAwNDEsIHNlcGFyYXRvckNoYXIsIDB4MDA0MSB9LCAvLyJcXHUwMEUwYSIsCisgICAgLy97IDB4MDBFMCwgc2VwYXJhdG9yQ2hhciwgMHgwMEUwIH0gIC8vIlxcdTAwRTBcXHUwMEUwIgorICB9OworICBjb25zdCBpbnQzMl90IHNpemUgPSBzaXplb2Yoc3R1ZmYpL3NpemVvZihzdHVmZlswXSk7CisKKyAgTGluZSAqKnNvcnRlZExpbmVzID0gbmV3IExpbmUqW3NpemVdOworICBMaW5lIGxpbmVzW3NpemVdOworCisgIGludDMyX3QgaSA9IDA7CisgIGludDMyX3Qgb3JkZXJlZCA9IDAsIHJldmVyc2VkID0gMDsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBsaW5lc1tpXS5zZXROYW1lKHN0dWZmW2ldLCAzKTsKKyAgfQorICBzZXRBcnJheShzb3J0ZWRMaW5lcywgbGluZXMsIHNpemUpOworICBxc29ydChzb3J0ZWRMaW5lcywgc2l6ZSwgc2l6ZW9mKExpbmUqKSwgZ0NvbXBhcmVyKTsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBpZigqKHNvcnRlZExpbmVzK2kpID09ICZsaW5lc1tpXSkgeworICAgICAgb3JkZXJlZCsrOworICAgIH0KKyAgICBpZigqKHNvcnRlZExpbmVzK2kpID09ICZsaW5lc1tzaXplLWktMV0pIHsKKyAgICAgIHJldmVyc2VkKys7CisgICAgfQorICB9CisKKyAgZGVsZXRlW10gc29ydGVkTGluZXM7CisgIGlmKG9yZGVyZWQgPT0gc2l6ZSkgeworICAgIHJldHVybiAwOyAvLyBpbiBub3JtYWwgb3JkZXIKKyAgfSBlbHNlIGlmKHJldmVyc2VkID09IHNpemUpIHsKKyAgICByZXR1cm4gMTsgLy8gaW4gcmV2ZXJzZWQgb3JkZXIKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gLTE7IC8vIHVua25vd24gb3JkZXIKKyAgfQorfQorCisKKy8vIENoZWNrIHdoZXRoZXIgdGhlIHNlY29uZGFyaWVzIGFyZSBpbiB0aGUgc3RyYWlnaHQgb3IgcmV2ZXJzZWQgb3JkZXIKK2ludDMyX3QgCitjaGVja1NlY29uZGFyeU9yZGVyaW5nKHZvaWQpIHsKKyAgVUNoYXIgc3R1ZmZbXVs1XSA9IHsKKyAgICB7IDB4MDA2MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwRTAgfSwgLy8iYWEiLAorICAgIHsgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwRTAsIHNlcGFyYXRvckNoYXIsIDB4MDA2MSB9LCAvLyJhXFx1MDBFMCIsCisgICAgeyAweDAwRTAsIHNlcGFyYXRvckNoYXIsIDB4MDA2MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxIH0sIC8vIlxcdTAwRTBhIiwKKyAgICAvL3sgMHgwMEUwLCBzZXBhcmF0b3JDaGFyLCAweDAwRTAgfSAgLy8iXFx1MDBFMFxcdTAwRTAiCisgIH07CisgIGNvbnN0IGludDMyX3Qgc2l6ZSA9IHNpemVvZihzdHVmZikvc2l6ZW9mKHN0dWZmWzBdKTsKKworICBMaW5lICoqc29ydGVkTGluZXMgPSBuZXcgTGluZSpbc2l6ZV07CisgIExpbmUgbGluZXNbc2l6ZV07CisKKyAgaW50MzJfdCBpID0gMDsKKyAgaW50MzJfdCBvcmRlcmVkID0gMCwgcmV2ZXJzZWQgPSAwOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGxpbmVzW2ldLnNldE5hbWUoc3R1ZmZbaV0sIDUpOworICB9CisgIHNldEFycmF5KHNvcnRlZExpbmVzLCBsaW5lcywgc2l6ZSk7CisgIHFzb3J0KHNvcnRlZExpbmVzLCBzaXplLCBzaXplb2YoTGluZSopLCBnQ29tcGFyZXIpOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW2ldKSB7CisgICAgICBvcmRlcmVkKys7CisgICAgfQorICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW3NpemUtaS0xXSkgeworICAgICAgcmV2ZXJzZWQrKzsKKyAgICB9CisgIH0KKworICBkZWxldGVbXSBzb3J0ZWRMaW5lczsKKyAgaWYob3JkZXJlZCA9PSBzaXplKSB7CisgICAgcmV0dXJuIDA7IC8vIGluIG5vcm1hbCBvcmRlcgorICB9IGVsc2UgaWYocmV2ZXJzZWQgPT0gc2l6ZSkgeworICAgIHJldHVybiAxOyAvLyBpbiByZXZlcnNlZCBvcmRlcgorICB9IGVsc2UgeworICAgIHJldHVybiAtMTsgLy8gdW5rbm93biBvcmRlcgorICB9Cit9CisKKy8vIFdlIGhhdmUgdG8gcmVtb3ZlIGlnbm9yYWJsZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGV4ZW1wbGFyIHNldCwKKy8vIG90aGVyd2lzZSwgd2UgZ2V0IG1lc3NlZCB1cCByZXN1bHRzCit2b2lkIHJlbW92ZUlnbm9yYWJsZUNoYXJzKFVuaWNvZGVTZXQgJmV4ZW1wbGFyVVNldCwgQ29tcGFyZUZuIGNvbXBhcmVyLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgVW5pY29kZVNldCBpZ25vcmFibGVzLCBwcmltYXJ5SWdub3JhYmxlczsKKyAgVW5pY29kZVNldEl0ZXJhdG9yIGV4ZW1wbGFyVVNldEl0ZXIoZXhlbXBsYXJVU2V0KTsKKyAgZXhlbXBsYXJVU2V0SXRlci5yZXNldCgpOworICBMaW5lIGVtcHR5OworICBMaW5lICplbXB0eVAgPSAmZW1wdHk7CisgIExpbmUgY3VycmVudDsKKyAgTGluZSAqY3VyckxpbmUgPSAmY3VycmVudDsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoID0gVUNPTF9PRkY7CisKKworICB3aGlsZShleGVtcGxhclVTZXRJdGVyLm5leHQoKSkgeworICAgIGlmKGV4ZW1wbGFyVVNldEl0ZXIuaXNTdHJpbmcoKSkgeyAvLyBwcm9jZXNzIGEgc3RyaW5nCisgICAgICB1X21lbWNweShjdXJyTGluZS0+bmFtZSwgZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5nZXRCdWZmZXIoKSwgZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICBjdXJyTGluZS0+bGVuID0gZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5sZW5ndGgoKTsKKyAgICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmZW1wdHlQLCAmY3VyckxpbmUsIGNvbXBhcmVyKTsKKyAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgIGlnbm9yYWJsZXMuYWRkKGV4ZW1wbGFyVVNldEl0ZXIuZ2V0U3RyaW5nKCkpOworICAgICAgfSBlbHNlIGlmKHN0cmVuZ3RoID4gVUNPTF9QUklNQVJZKSB7CisgICAgICAgIHByaW1hcnlJZ25vcmFibGVzLmFkZChleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBwcm9jZXNzIGNvZGUgcG9pbnQKKyAgICAgIFVCb29sIGlzRXJyb3IgPSBGQUxTRTsKKyAgICAgIFVDaGFyMzIgY29kZVBvaW50ID0gZXhlbXBsYXJVU2V0SXRlci5nZXRDb2RlcG9pbnQoKTsKKyAgICAgIGN1cnJMaW5lLT5sZW4gPSAwOworICAgICAgVTE2X0FQUEVORChjdXJyTGluZS0+bmFtZSwgY3VyckxpbmUtPmxlbiwgMjUsIGNvZGVQb2ludCwgaXNFcnJvcik7CisgICAgICBzdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgoJmVtcHR5UCwgJmN1cnJMaW5lLCBjb21wYXJlcik7CisgICAgICBpZihzdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkgeworICAgICAgICBpZ25vcmFibGVzLmFkZChjb2RlUG9pbnQpOworICAgICAgfSBlbHNlIGlmKHN0cmVuZ3RoID4gVUNPTF9QUklNQVJZKSB7CisgICAgICAgIHByaW1hcnlJZ25vcmFibGVzLmFkZChjb2RlUG9pbnQpOworICAgICAgfQorICAgIH0KKyAgfQorCisKKworICBleGVtcGxhclVTZXQucmVtb3ZlQWxsKGlnbm9yYWJsZXMpOworICBleGVtcGxhclVTZXQucmVtb3ZlQWxsKHByaW1hcnlJZ25vcmFibGVzKTsKKworICBVbmljb2RlU3RyaW5nIHJlbW92ZWRQYXR0ZXJuOworICBpZihpZ25vcmFibGVzLnNpemUoKSkgeworICAgIHVfZnByaW50Zihsb2csICJJZ25vcmFibGVzOlxuIik7CisgICAgaWdub3JhYmxlcy50b1BhdHRlcm4ocmVtb3ZlZFBhdHRlcm4sIFRSVUUpOworICAgIHJlbW92ZWRQYXR0ZXJuLnNldENoYXJBdChyZW1vdmVkUGF0dGVybi5sZW5ndGgoKSwgMCk7CisgICAgZXNjYXBlU3RyaW5nKHJlbW92ZWRQYXR0ZXJuLmdldEJ1ZmZlcigpLCByZW1vdmVkUGF0dGVybi5sZW5ndGgoKSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgfQorICBpZihwcmltYXJ5SWdub3JhYmxlcy5zaXplKCkpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiUHJpbWFyeSBpZ25vcmFibGVzOlxuIik7CisgICAgcHJpbWFyeUlnbm9yYWJsZXMudG9QYXR0ZXJuKHJlbW92ZWRQYXR0ZXJuLCBUUlVFKTsKKyAgICByZW1vdmVkUGF0dGVybi5zZXRDaGFyQXQocmVtb3ZlZFBhdHRlcm4ubGVuZ3RoKCksIDApOworICAgIGVzY2FwZVN0cmluZyhyZW1vdmVkUGF0dGVybi5nZXRCdWZmZXIoKSwgcmVtb3ZlZFBhdHRlcm4ubGVuZ3RoKCksIGxvZyk7CisgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgIH0KKworfQorCisvLyBUT0RPOiBkZXZlbG9wIGxvZ2ljIGZvciBjaG9vc2luZyBib3VuZGFyeSBjaGFyYWN0ZXJzIC0gcmlnaHQgbm93IGl0IGlzIGhhcmRjb2RlZAorLy8gSXQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgdXNlZCBzY3JpcHRzLiBBbHNvLCBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gc2F2ZSAKKy8vIHVzZWQgc2NyaXB0IG5hbWVzCit2b2lkIGFkZFV0aWxpdHlDaGFycyhVbmljb2RlU2V0ICZleGVtcGxhclVTZXQsIFVFcnJvckNvZGUgJnN0YXR1cykgeworCisgIC8vIGluIG9yZGVyIHRvIGdldCBuaWNlIHJ1bGVzLCB3ZSBuZWVkIHRvIGFkZCBzb21lIGNoYXJhY3RlcnMgdG8gdGhlCisgIC8vIHN0YXJ0aW5nIHNldC4gVGhlc2UgYXJlIG1vc3RseSBwYXJ0cyBvZiBjb21wYXRpYml0eSBjb21wb3NlZCBjaGFyYWN0ZXJzLAorICAvLyBzdWNoIGFzIEwtbWlkZGxlIGRvdCAobWlkZGxlIGRvdCBpcyAweDAwQjcpLiBJZiB3ZSBkb24ndCBhZGQgdGhlc2UsIHdlIHdvdWxkCisgIC8vIGdldCBhIHJlc2V0IGF0IGEgZnVua3kgY2hhcmFjdGVyLCBzdWNoIGFzIEwtbWlkZGxlIGRvdC4gVGhpcyBsaXN0IHdpbGwgcHJvYmFibHkKKyAgLy8gZ3Jvdy4KKyAgZXhlbXBsYXJVU2V0LmFkZCgweDAwQjcpOworCisgIC8vIHRoZXNlIHRoaW5ncyByZXByZXNlbnQgYSBzY3JpcHQgYmVmb3JlIHRoZSB0YXJnZXQgc2NyaXB0IGFuZCAKKyAgLy8gYSBzY3JpcHQgYWZ0ZXIuIE1vcmUgbG9naWMgc2hvdWxkIGJlIGFkZGVkIHNvIHRoYXQgdGhlc2UgY2hhcmFjdGVycyBhcmUKKyAgLy8gY2hvc2VuIGF1dG9tYXRpY2FsbHkKKworICBleGVtcGxhclVTZXQuYWRkKDB4MDAzOCk7CisgIGV4ZW1wbGFyVVNldC5hZGQoMHgwMDM5KTsKKworICAvL2V4ZW1wbGFyVVNldC5hZGQoMHgwNDMzKTsKKyAgLy9leGVtcGxhclVTZXQuYWRkKDB4MDQzNik7CisgIGV4ZW1wbGFyVVNldC5hZGQoMHhmYTI5KTsKKyAgZXhlbXBsYXJVU2V0LmFkZCgweGZhMjgpOworfQorCit2b2lkCitnZXRFeGVtcGxhcnMoY29uc3QgY2hhciAqbG9jYWxlLCBVbmljb2RlU2V0ICZleGVtcGxhcnMsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICAvLyBmaXJzdCB3ZSBmaWxsIG91dCBzdHJ1Y3R1cmVzIHdpdGggZXhlbXBsYXIgY2hhcmFjdGVycy4KKyAgVVJlc291cmNlQnVuZGxlICpyZXMgPSB1cmVzX29wZW4oTlVMTCwgbG9jYWxlLCAmc3RhdHVzKTsKKyAgaW50MzJfdCBleGVtcGxhckxlbmd0aCA9IDA7CisgIFVuaWNvZGVTdHJpbmcgZXhlbXBsYXJTdHJpbmcgPSB1cmVzX2dldFVuaWNvZGVTdHJpbmdCeUtleShyZXMsICJFeGVtcGxhckNoYXJhY3RlcnMiLCAmc3RhdHVzKTsKKyAgZXhlbXBsYXJzLmNsZWFyKCk7CisgIGV4ZW1wbGFycy5hcHBseVBhdHRlcm4oZXhlbXBsYXJTdHJpbmcsIHN0YXR1cyk7CisgIHVyZXNfY2xvc2UocmVzKTsKK30KKwordm9pZAorcHJlcGFyZVN0YXJ0aW5nU2V0KFVuaWNvZGVTZXQgJmV4ZW1wbGFyVVNldCwgQ29tcGFyZUZuIGNvbXBhcmVyLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgVW5pY29kZVN0cmluZyBleGVtcGxhclN0cmluZzsKKyAgZXhlbXBsYXJVU2V0LnRvUGF0dGVybihleGVtcGxhclN0cmluZyk7CisgIC8vIFByb2R1Y2UgY2FzZSBjbG9zdXJlIG9mIGV4ZW1wbGFyIGNoYXJhY3RlcnMKKyAgLy8gVGhlbiB3ZSB3YW50IHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyB0aGUgc2NyaXB0IG9mIHRoZSBleGVtcGxhciBjaGFyYWN0ZXJzCisgIC8vIGp1c3QgcGljayBzZXZlcmFsIGFuZCBzZWUgdGhlaXIgc2NyaXB0CisgIGNvbnN0IGNoYXIqIHVzZWRTY3JpcHROYW1lc1tVU0NSSVBUX0NPREVfTElNSVRdOworICBpbnQzMl90IG51bWJlck9mVXNlZFNjcmlwdHMgPSAwOworICBjaGFyIHNjcmlwdFNldFBhdHRlcm5bMjU2XTsKKyAgVW5pY29kZVN0cmluZyBwYXR0ZXJuOyAvLyBmb3IgZGVidWdnaW5nCisgIFVDaGFyMzIgZXhDaGFyID0gLTE7CisgIHdoaWxlKGV4ZW1wbGFyVVNldC5zaXplKCkgIT0gMCAmJiAoZXhDaGFyID0gZXhlbXBsYXJVU2V0LmNoYXJBdCgwKSkgIT0gLTEpIHsgCisgICAgaW50MzJfdCBzY3JpcHRObyA9IHVfZ2V0SW50UHJvcGVydHlWYWx1ZShleENoYXIsIFVDSEFSX1NDUklQVCk7CisgICAgdXNlZFNjcmlwdE5hbWVzW251bWJlck9mVXNlZFNjcmlwdHNdID0gdV9nZXRQcm9wZXJ0eVZhbHVlTmFtZShVQ0hBUl9TQ1JJUFQsIHNjcmlwdE5vLCBVX1NIT1JUX1BST1BFUlRZX05BTUUpOworICAgIHNwcmludGYoc2NyaXB0U2V0UGF0dGVybiwgIls6JXM6XSIsIHVzZWRTY3JpcHROYW1lc1tudW1iZXJPZlVzZWRTY3JpcHRzXSk7CisgICAgbnVtYmVyT2ZVc2VkU2NyaXB0cysrOworICAgIFVuaWNvZGVTZXQgc2NyaXB0U2V0KFVuaWNvZGVTdHJpbmcoc2NyaXB0U2V0UGF0dGVybiwgIiIpLCBzdGF0dXMpOworICAgIGV4ZW1wbGFyVVNldC5yZW1vdmVBbGwoc2NyaXB0U2V0KTsKKyAgICBleGVtcGxhclVTZXQudG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpOworICB9CisgIGV4ZW1wbGFyVVNldC5jbGVhcigpOworCisgIC8vIGFsd2F5cyBhZGQgQVNDSUkKKyAgLy9leGVtcGxhclVTZXQuYWRkQWxsKFVuaWNvZGVTZXQoVW5pY29kZVN0cmluZygiW1xcdTAwMjAtXFx1MDA3Zl0iLCAiIiksIHN0YXR1cykpOworICBleGVtcGxhclVTZXQuYWRkQWxsKFVuaWNvZGVTZXQoVW5pY29kZVN0cmluZygiW1xcdTAwNDEtXFx1MDA1Yl0iLCAiIiksIHN0YXR1cykpOworICBpZihnRXhlbXBsYXIpIHsKKyAgICBleGVtcGxhclVTZXQuYXBwbHlQYXR0ZXJuKGV4ZW1wbGFyU3RyaW5nLCBzdGF0dXMpOworICAgIGV4ZW1wbGFyVVNldC5jbG9zZU92ZXIoVVNFVF9DQVNFKTsKKyAgICBpZighZ1F1aWV0KSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiSUNVIGV4ZW1wbGFyIGNoYXJhY3RlcnM6XG4iKTsKKyAgICAgIGVzY2FwZVN0cmluZyhleGVtcGxhclN0cmluZy5nZXRCdWZmZXIoKSwgZXhlbXBsYXJTdHJpbmcubGVuZ3RoKCksIG91dCk7CisgICAgICB1X2ZwcmludGYob3V0LCAiXG4iKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYoIWdRdWlldCkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIlVzaW5nIHNjcmlwdHM6XG4iKTsKKyAgICB9CisgICAgLy8gYWRkIGludGVyZXN0aW5nIHNjcmlwdHMKKyAgICBmb3IoaSA9IDA7IGkgPCBudW1iZXJPZlVzZWRTY3JpcHRzOyBpKyspIHsKKyAgICAgIHNwcmludGYoc2NyaXB0U2V0UGF0dGVybiwgIls6JXM6XSIsIHVzZWRTY3JpcHROYW1lc1tpXSk7CisgICAgICBleGVtcGxhclVTZXQuYWRkQWxsKFVuaWNvZGVTZXQoVW5pY29kZVN0cmluZyhzY3JpcHRTZXRQYXR0ZXJuLCAiIiksIHN0YXR1cykpOworICAgICAgaWYoIWdRdWlldCkgeworICAgICAgICB1X2ZwcmludGYob3V0LCAiJXNcbiIsIHNjcmlwdFNldFBhdHRlcm4pOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgcmVtb3ZlSWdub3JhYmxlQ2hhcnMoZXhlbXBsYXJVU2V0LCBjb21wYXJlciwgc3RhdHVzKTsKKworICBhZGRVdGlsaXR5Q2hhcnMoZXhlbXBsYXJVU2V0LCBzdGF0dXMpOworCisvKgorICAvLyB0cnkgdG8gY2hlY2sgd2hldGhlciB0YWlsb3JlZCBzZXQgYW5kIGV4ZW1wbGFyIGNoYXJhY3RlcnMgbWF0Y2guCisgIFVTZXQgKnRhaWxvcmVkID0gdWNvbF9nZXRUYWlsb3JlZFNldChnQ29sLCAmc3RhdHVzKTsKKyAgVUJvb2wgdGFpbG9yZWRDb250YWluZWQgPSBleGVtcGxhclVTZXQuY29udGFpbnNBbGwoKigoVW5pY29kZVNldCAqKXRhaWxvcmVkKSk7CisgIGlmKCF0YWlsb3JlZENvbnRhaW5lZCkgeworICAgICgoVW5pY29kZVNldCAqKXRhaWxvcmVkKS0+cmVtb3ZlQWxsKGV4ZW1wbGFyVVNldCk7CisgICAgVW5pY29kZVN0cmluZyBwYXR0ZXJuOworICAgICgoVW5pY29kZVNldCAqKXRhaWxvcmVkKS0+dG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpOworICB9CisgIHVzZXRfY2xvc2UodGFpbG9yZWQpOworKi8KKworICAvL3JldHVybiBleGVtcGxhclVTZXQ7Cit9CisKK3ZvaWQgCitzZXRPdXRwdXRGaWxlKGNvbnN0IGNoYXIgKm5hbWUsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBpbnQzMl90IGkgPSAwOworICBjaGFyIGZpbGVuYW1lWzI1Nl07CisgIHN0cmNweShmaWxlbmFtZSwgbmFtZSk7CisgIGZvcihpID0gMDsgaSA8IGdQbGF0Zm9ybU5vOyBpKyspIHsKKyAgICBzdHJjYXQoZmlsZW5hbWUsICJfIik7CisgICAgc3RyY2F0KGZpbGVuYW1lLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1tpXV0ubmFtZSk7CisgIH0KKyAgaWYoZ0V4ZW1wbGFyKSB7CisgICAgc3RyY2F0KGZpbGVuYW1lLCAiX2V4ZW1wbGFyIik7CisgIH0gZWxzZSB7CisgICAgc3RyY2F0KGZpbGVuYW1lLCAiX3NjcmlwdCIpOworICB9CisgIHN0cmNhdChmaWxlbmFtZSwgIi51dGYxNi50eHQiKTsKKyAgb3V0ID0gdV9mb3BlbihmaWxlbmFtZSwgIndiIiwgImVuIiwgInV0Zi0xNiIpOworfQorCit2b2lkCitwcm9jZXNzQ29sbGF0b3IoVUNvbGxhdG9yICpjb2wsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBpbnQzMl90IGkgPSAwOworICBnQ29sID0gY29sOworICBVQ2hhciBydWxlU3RyaW5nWzE2Mzg0XTsKKyAgaW50MzJfdCBydWxlU3RyaW5nTGVuZ3RoID0gdWNvbF9nZXRSdWxlc0V4KGdDb2wsIFVDT0xfVEFJTE9SSU5HX09OTFksIHJ1bGVTdHJpbmcsIDE2Mzg0KTsKKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50ZihvdXQsICJJQ1UgcnVsZXM6XG4iKTsKKyAgICBwcmludFJ1bGVzKHJ1bGVTdHJpbmcsIHJ1bGVTdHJpbmdMZW5ndGgsIG91dCk7CisgICAgcHJpbnRSdWxlcyhydWxlU3RyaW5nLCBydWxlU3RyaW5nTGVuZ3RoLCBsb2cpOworICAgIC8vZXNjYXBlU3RyaW5nKHJ1bGVTdHJpbmcsIHJ1bGVTdHJpbmdMZW5ndGgsIG91dCk7CisgICAgdV9mcHJpbnRmKG91dCwgIlxuIik7CisgIH0KKyAgY29uc3QgY2hhciAqbG9jYWxlID0gdWNvbF9nZXRMb2NhbGUoZ0NvbCwgVUxPQ19SRVFVRVNURURfTE9DQUxFLCAmc3RhdHVzKTsKKyAgVW5pY29kZVNldCBleGVtcGxhclVTZXQ7CisgIGlmKGxvY2FsZSkgeworICAgIGdldEV4ZW1wbGFycyhsb2NhbGUsIGV4ZW1wbGFyVVNldCwgc3RhdHVzKTsKKyAgfSBlbHNlIHsKKyAgICBleGVtcGxhclVTZXQgPSAqKChVbmljb2RlU2V0ICopdWNvbF9nZXRUYWlsb3JlZFNldChnQ29sLCAmc3RhdHVzKSk7CisgIH0KKworCisgIGZvcihpID0gMDsgaSA8IGdQbGF0Zm9ybU5vOyBpKyspIHsKKyAgICB1X2ZwcmludGYob3V0LCAiXG5HZW5lcmF0aW5nIG9yZGVyIGZvciBwbGF0Zm9ybTogJXNcbiIsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzW2ldXS5uYW1lKTsKKyAgICBnQ29tcGFyZXIgPSBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1tpXV0uY29tcGFyZXI7CisKKyAgICBwcmVwYXJlU3RhcnRpbmdTZXQoZXhlbXBsYXJVU2V0LCBnQ29tcGFyZXIsIHN0YXR1cyk7CisgICAgaW50MzJfdCBpdGVtTGVuID0gMDsKKyAgICAvLyBnZXQgdGhlIG51bWJlciBvZiBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIHNldCAoYm90aCBjb2RlcG9pbnRzIGFuZCBzdHJpbmdzKQorICAgIGludDMyX3QgZXhlbXBsYXJTZXRTaXplID0gZXhlbXBsYXJVU2V0LnNpemUoKTsKKyAgICBVbmljb2RlU2V0SXRlcmF0b3IgZXhlbXBsYXJVU2V0SXRlcihleGVtcGxhclVTZXQpOworCisgICAgLy8gYWxsb2NhdGUgSUNVIGxpbmVzCisgICAgZ0lDVUxpbmVzID0gbmV3IExpbmUqW2V4ZW1wbGFyU2V0U2l6ZSo1XTsgCisgICAgaW50MzJfdCBqID0gMDsKKyAgICBpbnQzMl90IGxpbmVzQ291bnQgPSAwOworICAgIExpbmUgKmxpbmVzID0gbmV3IExpbmVbZXhlbXBsYXJTZXRTaXplXTsgCisKKyAgICBpbnQzMl90IHJldmVyc2VkU2Vjb25kYXJ5ID0gY2hlY2tTZWNvbmRhcnlPcmRlcmluZygpOworICAgIGlmKHJldmVyc2VkU2Vjb25kYXJ5ID09IDApIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJTZWNvbmRhcmllcyBkbyBub3Qgc2VlbSB0byBiZSByZXZlcnNlZFxuIik7CisgICAgfSBlbHNlIGlmKHJldmVyc2VkU2Vjb25kYXJ5ID09IDEpIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJTZWNvbmRhcmllcyBhcmUgcmV2ZXJzZWRcbiIpOworICAgICAgaWYoZ0NvbXBhcmVyID09IElDVXN0cmNtcCkgeworICAgICAgICB1Y29sX3NldEF0dHJpYnV0ZShnQ29sLCBVQ09MX0ZSRU5DSF9DT0xMQVRJT04sIFVDT0xfT0ZGLCAmc3RhdHVzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdV9mcHJpbnRmKG91dCwgIkNhbm5vdCBjb25jbHVkZSBpZiBzZWNvbmRhcmllcyBhcmUgcmV2ZXJzZWRcbiIpOworICAgIH0KKworICAgIGludDMyX3QgcmV2ZXJzZWRDYXNlID0gY2hlY2tDYXNlT3JkZXJpbmcoKTsKKyAgICBpZihyZXZlcnNlZENhc2UgPT0gMCkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIkNhc2UgZG9lcyBub3Qgc2VlbSB0byBiZSByZXZlcnNlZFxuIik7CisgICAgfSBlbHNlIGlmKHJldmVyc2VkQ2FzZSA9PSAxKSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiQ2FzZSBpcyByZXZlcnNlZFxuIik7CisgICAgICBpZihnQ29tcGFyZXIgPT0gSUNVc3RyY21wKSB7CisgICAgICAgIHVjb2xfc2V0QXR0cmlidXRlKGdDb2wsIFVDT0xfQ0FTRV9GSVJTVCwgVUNPTF9PRkYsICZzdGF0dXMpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiQ2Fubm90IGNvbmNsdWRlIGlmIGNhc2UgaXMgcmV2ZXJzZWRcbiIpOworICAgIH0KKyAgICAgIAorICAgIGV4ZW1wbGFyVVNldEl0ZXIucmVzZXQoKTsKKyAgICBnRWxlbWVudHMucmVtb3ZlQWxsKCk7CisgICAgZ0V4cGFuc2lvbnMucmVtb3ZlQWxsKCk7CisgICAgbGluZXNDb3VudCA9IDA7CisKKyAgICB3aGlsZShleGVtcGxhclVTZXRJdGVyLm5leHQoKSkgeworICAgICAgTGluZSAqY3VyckxpbmUgPSBsaW5lcytsaW5lc0NvdW50OworICAgICAgaWYoZXhlbXBsYXJVU2V0SXRlci5pc1N0cmluZygpKSB7IC8vIHByb2Nlc3MgYSBzdHJpbmcKKyAgICAgICAgdV9tZW1jcHkoY3VyckxpbmUtPm5hbWUsIGV4ZW1wbGFyVVNldEl0ZXIuZ2V0U3RyaW5nKCkuZ2V0QnVmZmVyKCksIGV4ZW1wbGFyVVNldEl0ZXIuZ2V0U3RyaW5nKCkubGVuZ3RoKCkpOworICAgICAgICBjdXJyTGluZS0+bGVuID0gZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5sZW5ndGgoKTsKKyAgICAgIH0gZWxzZSB7IC8vIHByb2Nlc3MgY29kZSBwb2ludAorICAgICAgICBVQm9vbCBpc0Vycm9yID0gRkFMU0U7CisgICAgICAgIGN1cnJMaW5lLT5sZW4gPSAwOworICAgICAgICBVMTZfQVBQRU5EKGN1cnJMaW5lLT5uYW1lLCBjdXJyTGluZS0+bGVuLCAyNSwgZXhlbXBsYXJVU2V0SXRlci5nZXRDb2RlcG9pbnQoKSwgaXNFcnJvcik7CisgICAgICB9CisgICAgICBjdXJyTGluZS0+bmFtZVtjdXJyTGluZS0+bGVuXSA9IDA7IC8vIHplcm8gdGVybWluYXRlLCBmb3Igb3VyIGV2aWwgd2F5cworICAgICAgY3VyckxpbmUtPmluZGV4ID0gbGluZXNDb3VudDsKKyAgICAgIGxpbmVzQ291bnQrKzsKKyAgICAgIG5vdGVFbGVtZW50KGN1cnJMaW5lKTsKKyAgICB9CisgICAgY29uc3RydWN0QW5kQW5hbHl6ZShnSUNVTGluZXMsIGxpbmVzLCBleGVtcGxhclNldFNpemUsIGdDb21wYXJlcik7CisKKyAgICBkZWxldGVbXSBsaW5lczsgCisgIH0KKworCisgIC8vIGNsZWFudXAgZ2xvYmFscworICBkZWxldGVbXSBnSUNVTGluZXM7IAorICB1X2ZmbHVzaChvdXQpOworICB1X2ZjbG9zZShvdXQpOworICB1Y29sX2Nsb3NlKGdDb2wpOworfQorCit2b2lkCitwcm9jZXNzTG9jYWxlKGNvbnN0IGNoYXIgKmxvY2FsZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGdXaW5MQ0lEID0gdWxvY19nZXRMQ0lEKGxvY2FsZSk7CisKKyAgVUNvbGxhdG9yICpjb2wgPSB1Y29sX29wZW4obG9jYWxlLCAmc3RhdHVzKTsKKworICBzZXRPdXRwdXRGaWxlKGxvY2FsZSwgc3RhdHVzKTsKKworICB1X2ZwcmludGYob3V0LCAiTG9jYWxlICVzIChMQ0lEOiUwNlgpXG4iLCBsb2NhbGUsIGdXaW5MQ0lEKTsKKworICBwcm9jZXNzQ29sbGF0b3IoY29sLCBzdGF0dXMpOworfQorCitVQm9vbCAKK2hhc0NvbGxhdGlvbkVsZW1lbnRzKGNvbnN0IGNoYXIgKmxvY05hbWUpIHsKKworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVVJlc291cmNlQnVuZGxlICpDb2xFbCA9IE5VTEw7CisKKyAgVVJlc291cmNlQnVuZGxlICpsb2MgPSB1cmVzX29wZW4oTlVMTCwgbG9jTmFtZSwgJnN0YXR1cyk7OworCisgIGlmKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIENvbEVsID0gdXJlc19nZXRCeUtleShsb2MsICJDb2xsYXRpb25FbGVtZW50cyIsIENvbEVsLCAmc3RhdHVzKTsKKyAgICBpZihzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKSB7IC8qIGRvIHRoZSB0ZXN0IC0gdGhlcmUgYXJlIHJlYWwgZWxlbWVudHMgKi8KKyAgICAgIHVyZXNfY2xvc2UoQ29sRWwpOworICAgICAgdXJlc19jbG9zZShsb2MpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHVyZXNfY2xvc2UoQ29sRWwpOworICAgIHVyZXNfY2xvc2UobG9jKTsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywKKyAgICAgY2hhciogYXJndltdKQoreworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgZXJyID0gdV9maW5pdChzdGRlcnIsICJlbiIsICJsYXRpbi0xIik7CisgIGxvZyA9IHVfZmluaXQoc3Rkb3V0LCAiZW4iLCAibGF0aW4tMSIpOworCisvKgorICBVU2V0ICp3c3AgPSB1cHJ2X29wZW5SdWxlV2hpdGVTcGFjZVNldCgmc3RhdHVzKTsKKyAgdXNldF9hZGQod3NwLCAweDAwNDEpOworICB1c2V0X3JlbW92ZSh3c3AsIDB4MDA0MSk7CisgIFVuaWNvZGVTdHJpbmcgcGF0OworICAoKFVuaWNvZGVTZXQgKil3c3ApLT50b1BhdHRlcm4ocGF0LCBUUlVFKTsKKyAgcGF0LnNldENoYXJBdChwYXQubGVuZ3RoKCksIDApOworICBlc2NhcGVTdHJpbmcocGF0LmdldEJ1ZmZlcigpLCBwYXQubGVuZ3RoKCksIGxvZyk7CisgIHVfZmZsdXNoKGxvZyk7CisqLworCisgIFVUcmFuc2xpdGVyYXRvciAqYW55SGV4ID0gdXRyYW5zX29wZW4oIlteXFx1MDAwYVxcdTAwMjAtXFx1MDA3Zl0gQW55LUhleC9KYXZhIiwgVVRSQU5TX0ZPUldBUkQsIE5VTEwsIDAsIE5VTEwsICZzdGF0dXMpOworICB1X2ZzZXR0cmFuc2xpdGVyYXRvcihsb2csIFVfV1JJVEUsIGFueUhleCwgJnN0YXR1cyk7CisKKyAgcHJvY2Vzc0FyZ3MoYXJnYywgYXJndiwgc3RhdHVzKTsKKyAgaW50MzJfdCBpID0gMDsKKworCisgIGdFbGVtZW50cy5zZXRWYWx1ZURlbGV0ZXIoZGVsZXRlTGluZUVsZW1lbnQpOworCisKKyAgaWYoVV9GQUlMVVJFKHN0YXR1cykgfHwgZ1BsYXRmb3JtTm8gPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGdVQ0EgPSB1Y29sX29wZW4oInJvb3QiLCAmc3RhdHVzKTsKKworICBpZihnUnVsZXNTdGRpbikgeworICAgIGNoYXIgYnVmZmVyWzEwMjRdOworICAgIFVDaGFyIHJ1bGVCdWZmZXJbMTYzODRdOworICAgIFVDaGFyICpydWxlcyA9IHJ1bGVCdWZmZXI7CisgICAgaW50MzJfdCBtYXhSdWxlTGVuID0gMTYzODQ7CisgICAgaW50MzJfdCByTGVuID0gMDsKKyAgICB3aGlsZShnZXRzKGJ1ZmZlcikpIHsKKyAgICAgIGlmKGJ1ZmZlclswXSAhPSAnLycgJiYgYnVmZmVyWzFdICE9ICcvJykgeworICAgICAgICByTGVuID0gdV91bmVzY2FwZShidWZmZXIsIHJ1bGVzLCBtYXhSdWxlTGVuKTsKKyAgICAgICAgcnVsZXMgKz0gckxlbjsKKyAgICAgICAgbWF4UnVsZUxlbiAtPSByTGVuOworICAgICAgfQorICAgIH0KKyAgICBVUGFyc2VFcnJvciBwYXJzZUVycm9yOworICAgIC8vZXNjYXBlU3RyaW5nKHJ1bGVCdWZmZXIsIHJ1bGVzLXJ1bGVCdWZmZXIsIGxvZyk7Ly8KKyAgICB1X2ZwcmludGYobG9nLCAiJVVcbiIsIHJ1bGVCdWZmZXIpOworCisgICAgVUNvbGxhdG9yICpjb2wgPSB1Y29sX29wZW5SdWxlcyhydWxlQnVmZmVyLCBydWxlcy1ydWxlQnVmZmVyLCBVQ09MX0RFRkFVTFQsIFVDT0xfREVGQVVMVCwgJnBhcnNlRXJyb3IsICZzdGF0dXMpOworICAgIGlmKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICBzZXRPdXRwdXRGaWxlKCJzdGRpblJ1bGVzIiwgc3RhdHVzKTsKKyAgICAgIHByb2Nlc3NDb2xsYXRvcihjb2wsIHN0YXR1cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHVfZnByaW50ZihlcnIsICJFcnJvciAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisgICAgfQorICB9IGVsc2UgeworCisgICAgaWYoZ0xvY2FsZSkgeworICAgICAgcHJvY2Vzc0xvY2FsZShnTG9jYWxlLCBzdGF0dXMpOworICAgIH0gZWxzZSBpZihnTG9jYWxlTm8pIHsKKyAgICAgIGZvcihpID0gMDsgaSA8IGdMb2NhbGVObzsgaSsrKSB7CisgICAgICAgIHByb2Nlc3NMb2NhbGUoZ0xvY2FsZXNbaV0sIHN0YXR1cyk7CisgICAgICB9CisgICAgfSBlbHNlIHsgLy8gZG8gdGhlIGxvb3AgdGhyb3VnaCBhbGwgdGhlIGxvY2FsZXMKKyAgICAgIGludDMyX3Qgbm9PZkxvYyA9IHVsb2NfY291bnRBdmFpbGFibGUoKTsKKyAgICAgIGNvbnN0IGNoYXIgKmxvY05hbWUgPSBOVUxMOworICAgICAgZm9yKGkgPSAwOyBpPG5vT2ZMb2M7IGkrKykgeworICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIGxvY05hbWUgPSB1bG9jX2dldEF2YWlsYWJsZShpKTsKKyAgICAgICAgaWYoaGFzQ29sbGF0aW9uRWxlbWVudHMobG9jTmFtZSkpIHsKKyAgICAgICAgICBwcm9jZXNzTG9jYWxlKGxvY05hbWUsIHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHVjb2xfY2xvc2UoZ1VDQSk7CisKKyAgdV9mZmx1c2gobG9nKTsKKyAgdV9mY2xvc2UobG9nKTsKKyAgdV9mZmx1c2goZXJyKTsKKyAgdV9mY2xvc2UoZXJyKTsKKworICByZXR1cm4gMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9jb2xwcm9iZS5kc3AgYi9jb2xwcm9iZS9jb2xwcm9iZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3NGM4NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2NvbHByb2JlLmRzcApAQCAtMCwwICsxLDE0OCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJjb2xwcm9iZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPWNvbHByb2JlIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiY29scHJvYmUubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJjb2xwcm9iZS5tYWsiIENGRz0iY29scHJvYmUgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJjb2xwcm9iZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiY29scHJvYmUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJjb2xwcm9iZSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK01UTD1taWRsLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvSSAiLi4vLi4vLi4vaW5jbHVkZSIgL0kgIi4uLy4uL3Rvb2xzL3Rvb2x1dGlsIiAvSSAiLi4vLi4vY29tbW9uIiAvSSAiLi4vLi4vaTE4biIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgaWN1aW8ubGliIGljdXVjLmxpYiBpY3Vpbi5saWIgaWN1dHUubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uLy4uLy4uL2xpYiIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImNvbHByb2JlIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitNVEw9bWlkbC5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi4vLi4vLi4vaW5jbHVkZSIgL0kgIi4uLy4uL3Rvb2xzL3Rvb2x1dGlsIiAvSSAiLi4vLi4vY29tbW9uIiAvSSAiLi4vLi4vaTE4biIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGljdWlvZC5saWIgaWN1dWNkLmxpYiBpY3VpbmQubGliIGljdXR1ZC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vLi4vLi4vbGliIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiY29scHJvYmUgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJjb2xwcm9iZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGNvbHByb2JlTmV3LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbGluZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHNvcnRlZGxpbmVzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cc3RyZW5ndGhwcm9iZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHRhcmdldHNldGdlbmVyYXRvci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHVwcmludGVyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY29scHJvYmUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbGluZS5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llxzb3J0ZWRsaW5lcy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxzdHJlbmd0aHByb2JlLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHRhcmdldHNldGdlbmVyYXRvci5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx1cHJpbnRlci5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2NvbHByb2JlLmggYi9jb2xwcm9iZS9jb2xwcm9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTJjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9jb2xwcm9iZS5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgQ09MUFJPQkVfSAorI2RlZmluZSBDT0xQUk9CRV9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvbm9ybWx6ci5oIgorCit0eXBlZGVmIGludCAoKkNvbXBhcmVGbikgKGNvbnN0IHZvaWQgKmVsZW0xLCBjb25zdCB2b2lkICplbGVtMik7Cit0eXBlZGVmIGludCAoKkdldFNvcnRLZXlGbikgKGNvbnN0IFVDaGFyICpzdHJpbmcsIGludDMyX3QgbGVuLCB1aW50OF90ICpidWZmZXIsIGludDMyX3QgYnVmZkNhcGFjaXR5KTsKKy8vdHlwZWRlZiBpbnQgKF9fY2RlY2wgKkNvbXBhcmVGbikoY29uc3Qgdm9pZCAqZWxlbTEsIGNvbnN0IHZvaWQgKmVsZW0yKTsKK3ZvaWQgZ2VuZXJhdGVSZXBlcnRvaXJlKGNvbnN0IGNoYXIgKmxvY2FsZSwgVW5pY29kZVNldCAmcmVwLCBVQm9vbCAmaGFuQXBwZWFycywgVUVycm9yQ29kZSAmc3RhdHVzKTsKK1VuaWNvZGVTZXQgZmxhdHRlbihjb25zdCBVbmljb2RlU2V0ICZzb3VyY2UsIFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKy8vVW5pY29kZVNldCBnZW5lcmF0ZVJlcGVydG9pcmUoY29uc3QgY2hhciAqbG9jYWxlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9jb2xwcm9iZU5ldy5jcHAgYi9jb2xwcm9iZS9jb2xwcm9iZU5ldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjZmM1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2NvbHByb2JlTmV3LmNwcApAQCAtMCwwICsxLDEwNzggQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDAzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgY29scHJvYmUuY3BwCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDMvMTgvMjAwMyAgd2VpdiAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSAidW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2wuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2xlaXRyLmgiCisjaW5jbHVkZSAidW5pY29kZS91cmVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzZXRpdGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNjcmlwdC5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jaWQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbnYuaCIKKyNpbmNsdWRlICJ1cHJvcHMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAidWNvbF9pbXAuaCIKKworI2luY2x1ZGUgInVuaWNvZGUvdXN0ZGlvLmgiCisjaW5jbHVkZSAidW5pY29kZS91dHJhbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLy8gdW5peCB0b2xvd2VyCisjaW5jbHVkZSA8Y3R5cGUuaD4KKy8vIHVuaXggc2V0bG9jYWxlCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlICJjb2xwcm9iZS5oIgorCisjaW5jbHVkZSAibGluZS5oIgorI2luY2x1ZGUgInNvcnRlZGxpbmVzLmgiCisjaW5jbHVkZSAic3RyZW5ndGhwcm9iZS5oIgorCit2b2lkIHRlc3RXaW4oU3RyZW5ndGhQcm9iZSAmcHJvYmUsIFVFcnJvckNvZGUgJnN0YXR1cykgOworCisjaWYgZGVmaW5lZCBXSU4zMgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZWN0Lmg+CisKK2ludCBjcmVhdGVEaXIoY29uc3QgY2hhciogZGlyTmFtZSkgeworICBzdHJ1Y3QgX3N0YXQgbXlTdGF0OworICBpbnQgcmVzdWx0ID0gX3N0YXQoZGlyTmFtZSwgJm15U3RhdCk7CisgCisgIGlmKHJlc3VsdCA9PSAtMSkgeworICAgIHJlc3VsdCA9IF9ta2RpcihkaXJOYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgaWYobXlTdGF0LnN0X21vZGUgJiBfU19JRkRJUikgeworICAgIHJldHVybiAwOworICB9IGVsc2UgeworICAgIHJldHVybiAxOworICB9Cit9CisKKy8vI2VsaWYgZGVmaW5lZCBQT1NJWAorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgY3JlYXRlRGlyKGNvbnN0IGNoYXIqIGRpck5hbWUpIHsKKyAgc3RydWN0IHN0YXQgbXlTdGF0OworICBpbnQgcmVzdWx0ID0gc3RhdChkaXJOYW1lLCAmbXlTdGF0KTsKKyAKKyAgaWYocmVzdWx0ID09IC0xKSB7CisgICAgcmVzdWx0ID0gbWtkaXIoZGlyTmFtZSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lXR1JQfFNfSVhHUlB8U19JUk9USHxTX0lXT1RIfFNfSVhPVEgpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0gZWxzZSBpZihTX0lTRElSKG15U3RhdC5zdF9tb2RlKSkgeworICAgIHJldHVybiAwOworICB9IGVsc2UgeworICAgIHJldHVybiAxOworICB9Cit9CisvLworLy8gIFN0dWJzIGZvciBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgd2hlbiBidWlsZGluZyBvbiBVTklYZXMuCisvLwordHlwZWRlZiBpbnQgRFdPUkQ7CitpbmxpbmUgaW50IENvbXBhcmVTdHJpbmdXKERXT1JELCBEV09SRCwgVUNoYXIgKiwgaW50LCBVQ2hhciAqLCBpbnQpIHtyZXR1cm4gMDt9OworLy8jZWxzZQorLy8jZXJyb3IgIk5vdCBQT1NJWCBvciBXaW5kb3dzLiBXb24ndCB3b3JrLiIKKyNlbmRpZgorCisjaW5jbHVkZSAibGluZS5oIgorCitzdGF0aWMgVUJvb2wgZ1ZlcmJvc2UgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnRGVidWcgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnUXVpZXQgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnRXhlbXBsYXIgPSBGQUxTRTsKKworRFdPUkQgICAgICAgICAgZ1dpbkxDSUQ7CitpbnQgICAgICAgICAgICBnQ291bnQ7CitVQ29sbGF0b3IgICAgICpnQ29sOworVUNvbGxhdG9yICAgICAqZ1VDQTsKK1VDb252ZXJ0ZXIgICAgKnV0ZjhjbnY7CitDb21wYXJlRm4gZ0NvbXBhcmVyOworaW50ICAgICAgIGdSZWZOdW07CitVbmljb2RlU2V0IGdFeGNsdWRlU2V0OworVW5pY29kZVNldCBnUmVwZXJ0b2lyZTsKKworY29uc3QgVUNoYXIgc2VwYXJhdG9yQ2hhciA9IDB4MDAzMDsKKworVVByaW50ZXIgKmxvZ2dlcjsKK1VQcmludGVyICpkZWJ1ZzsKK1VQcmludGVyICp0YWlsb3JpbmdCdW5kbGU7CitVUHJpbnRlciAqcmVmZXJlbmNlQnVuZGxlOworVVByaW50ZXIgKmJ1bmRsZTsKK0ZJTEUgICAgICpmVGFpbG9yaW5nRHVtcDsKK0ZJTEUgICAgICpmRGVmYXVsdER1bXA7CisKK2NvbnN0IGNoYXIgKnByb2dOYW1lID0gImNvbHByb2JlIjsKKworY29uc3QgY2hhciAqZ0xvY2FsZSA9IE5VTEw7CitpbnQzMl90IHBsYXRmb3JtSW5kZXggPSAtMTsKK2ludDMyX3QgZ1BsYXRmb3JtTm8gPSAwOworaW50MzJfdCBnUGxhdGZvcm1JbmRleGVzWzEwXTsKK2ludDMyX3QgZ0xvY2FsZU5vID0gMDsKK2NvbnN0IGNoYXIqIGdMb2NhbGVzWzEwMF07CitVQm9vbCBnUnVsZXNTdGRpbiA9IEZBTFNFOworY29uc3QgY2hhciAqb3V0cHV0Rm9ybWF0ID0gIkhUTUwiOworY29uc3QgY2hhciAqb3V0RXh0ZW5zaW9uID0gImh0bWwiOworCitlbnVtIHsKKyAgSEVMUDEsCisgICAgSEVMUDIsCisgICAgVkVSQk9TRSwKKyAgICBRVUlFVCwKKyAgICBWRVJTSU9OLAorICAgIElDVURBVEFESVIsCisgICAgQ09QWVJJR0hULAorICAgIExPQ0FMRSwKKyAgICBQTEFURk9STSwKKyAgICBERUJVRywgCisgICAgRVhFTVBMQVIsCisgICAgUlVMRVNTVERJTiwKKyAgICBSRUZFUkVOQ0UsCisgICAgRVhDTFVERVNFVCwKKyAgICBSRVBFUlRPSVJFLAorICBJTlRFUkFDVElWRSwKKyAgUFJJTlRSRUYsCisgIERJRkYsIAorICBPVVRQVVQKK307CisKK1VPcHRpb24gb3B0aW9uc1tdPXsKKyAgLyowKi8gVU9QVElPTl9IRUxQX0gsCisgIC8qMSovIFVPUFRJT05fSEVMUF9RVUVTVElPTl9NQVJLLAorICAvKjIqLyBVT1BUSU9OX1ZFUkJPU0UsCisgIC8qMyovIFVPUFRJT05fUVVJRVQsCisgIC8qNCovIFVPUFRJT05fVkVSU0lPTiwKKyAgLyo1Ki8gVU9QVElPTl9JQ1VEQVRBRElSLAorICAvKjYqLyBVT1BUSU9OX0NPUFlSSUdIVCwKKyAgLyo3Ki8gVU9QVElPTl9ERUYoImxvY2FsZSIsICdsJywgVU9QVF9SRVFVSVJFU19BUkcpLAorICAvKjgqLyBVT1BUSU9OX0RFRigicGxhdGZvcm0iLCAncCcsIFVPUFRfUkVRVUlSRVNfQVJHKSwKKyAgLyo5Ki8gVU9QVElPTl9ERUYoImRlYnVnIiwgJ0QnLCBVT1BUX05PX0FSRyksCisgIC8qMTAqLyBVT1BUSU9OX0RFRigiZXhlbXBsYXIiLCAnRScsIFVPUFRfTk9fQVJHKSwKKyAgLyoxMSovIFVPUFRJT05fREVGKCJydWxlc3N0ZGluIiwgJ1InLCBVT1BUX05PX0FSRyksCisgIC8qMTIqLyBVT1BUSU9OX0RFRigicmVmIiwgJ2MnLCBVT1BUX1JFUVVJUkVTX0FSRyksCisgIC8qMTMqLyBVT1BUSU9OX0RFRigiZXhjbHVkZXNldCIsICd4JywgVU9QVF9SRVFVSVJFU19BUkcpLAorICAvKjE0Ki8gVU9QVElPTl9ERUYoInJlcGVydG9pcmUiLCAndCcsIFVPUFRfUkVRVUlSRVNfQVJHKSwKKyAgLyoxNSovIFVPUFRJT05fREVGKCJpbnRlcmFjdGl2ZSIsICdJJywgVU9QVF9OT19BUkcpLAorICAvKjE2Ki8gVU9QVElPTl9ERUYoInByaW50cmVmIiwgMCwgVU9QVF9OT19BUkcpLAorICAvKjE3Ki8gVU9QVElPTl9ERUYoImRpZmYiLCAwLCBVT1BUX05PX0FSRyksCisgIC8qMTgqLyBVT1BUSU9OX0RFRigib3V0cHV0IiwgMCwgVU9QVF9SRVFVSVJFU19BUkcpCit9OworCitVQ2hhciBjb21wQVsyNTZdOworVUNoYXIgY29tcEJbMjU2XTsKK2ludDMyX3QgY29tcEFMZW4gPSAwOworaW50MzJfdCBjb21wQkxlbiA9IDA7CisKK2NoYXIgY29tcFVURjhBWzI1Nl07CitjaGFyIGNvbXBVVEY4QlsyNTZdOworaW50MzJfdCBjb21wVVRGOEFMZW4gPSAwOworaW50MzJfdCBjb21wVVRGOEJMZW4gPSAwOworCitpbnQgVU5JWHN0cmNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGdDb3VudCsrOworICAgIGludCB0OworICAgIGNvbXBBTGVuID0gdW5vcm1fbm9ybWFsaXplKCgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgVU5PUk1fTkZDLCAwLCBjb21wQSwgMjU2LCAmc3RhdHVzKTsKKyAgICBjb21wQkxlbiA9IHVub3JtX25vcm1hbGl6ZSgoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4sIFVOT1JNX05GQywgMCwgY29tcEIsIDI1NiwgJnN0YXR1cyk7CisgICAgY29tcFVURjhBTGVuID0gdWNudl9mcm9tVUNoYXJzKHV0ZjhjbnYsIGNvbXBVVEY4QSwgMjU2LCBjb21wQSwgY29tcEFMZW4sICZzdGF0dXMpOworICAgIGNvbXBVVEY4QVtjb21wVVRGOEFMZW5dID0gMDsKKyAgICBjb21wVVRGOEJMZW4gPSB1Y252X2Zyb21VQ2hhcnModXRmOGNudiwgY29tcFVURjhCLCAyNTYsIGNvbXBCLCBjb21wQkxlbiwgJnN0YXR1cyk7CisgICAgY29tcFVURjhCW2NvbXBVVEY4Qkxlbl0gPSAwOworICAgIHQgPSBzdHJjb2xsKGNvbXBVVEY4QSwgY29tcFVURjhCKTsKKyAgICByZXR1cm4gdDsKK30KKworaW50IFVOSVhnZXRTb3J0S2V5KGNvbnN0IFVDaGFyICpzdHJpbmcsIGludDMyX3QgbGVuLCB1aW50OF90ICpidWZmZXIsIGludDMyX3QgYnVmZkNhcGFjaXR5KSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBjb21wQUxlbiA9IHVub3JtX25vcm1hbGl6ZShzdHJpbmcsIGxlbiwgVU5PUk1fTkZDLCAwLCBjb21wQSwgMjU2LCAmc3RhdHVzKTsKKyAgY29tcFVURjhBTGVuID0gdWNudl9mcm9tVUNoYXJzKHV0ZjhjbnYsIGNvbXBVVEY4QSwgMjU2LCBjb21wQSwgY29tcEFMZW4sICZzdGF0dXMpOworICBjb21wVVRGOEFbY29tcFVURjhBTGVuXSA9IDA7CisgIHJldHVybiAoc3RyeGZybSgoY2hhciAqKWJ1ZmZlciwgY29tcFVURjhBLCBidWZmQ2FwYWNpdHkpKzEpOworfQorCisjaWZkZWYgV0lOMzIKK2ludCBXaW5zdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBnQ291bnQrKzsKKyAgICBpbnQgdDsKKyAgICAvL2NvbXBBTGVuID0gdW5vcm1fY29tcG9zZShjb21wQSwgMjU2LCAoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWEpLT5sZW4sIEZBTFNFLCAwLCAmc3RhdHVzKTsKKyAgICAvL2NvbXBCTGVuID0gdW5vcm1fY29tcG9zZShjb21wQiwgMjU2LCAoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4sIEZBTFNFLCAwLCAmc3RhdHVzKTsKKyAgICBjb21wQUxlbiA9IHVub3JtX25vcm1hbGl6ZSgoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWEpLT5sZW4sIFVOT1JNX05GQywgMCwgY29tcEEsIDI1NiwgJnN0YXR1cyk7CisgICAgY29tcEJMZW4gPSB1bm9ybV9ub3JtYWxpemUoKCooTGluZSAqKiliKS0+bmFtZSwgKCooTGluZSAqKiliKS0+bGVuLCBVTk9STV9ORkMsIDAsIGNvbXBCLCAyNTYsICZzdGF0dXMpOworICAgIHQgPSBDb21wYXJlU3RyaW5nVyhnV2luTENJRCwgIFNPUlRfU1RSSU5HU09SVCwgLy8wLAorICAgICAgY29tcEEsIGNvbXBBTGVuLCAKKyAgICAgIGNvbXBCLCBjb21wQkxlbik7CisKKy8qICAgIAorICAgIHQgPSBDb21wYXJlU3RyaW5nVyhnV2luTENJRCwgMCwgCisgICAgICAoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWEpLT5sZW4sIAorICAgICAgKCooTGluZSAqKiliKS0+bmFtZSwgKCooTGluZSAqKiliKS0+bGVuKTsKKyovCisgICAgcmV0dXJuIHQtMjsKK30KKworaW50IFdpbmdldFNvcnRLZXkoY29uc3QgVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4sIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwYWNpdHkpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGNvbXBBTGVuID0gdW5vcm1fbm9ybWFsaXplKHN0cmluZywgbGVuLCBVTk9STV9ORkMsIDAsIGNvbXBBLCAyNTYsICZzdGF0dXMpOworICByZXR1cm4gTENNYXBTdHJpbmdXKGdXaW5MQ0lELCBMQ01BUF9TT1JUS0VZIHwgU09SVF9TVFJJTkdTT1JULCBjb21wQSwgY29tcEFMZW4sICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZmZlciwgYnVmZkNhcGFjaXR5KTsKK30KKworI2lmIDAKK2ludCBXaW5zdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgdWludDhfdCBiMVsyNTZdLCBiMlsyNTZdOworICBpbnQzMl90IGIxTGVuLCBiMkxlbjsKKyAgYjFMZW4gPSBXaW5nZXRTb3J0S2V5KCgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgYjEsIDI1Nik7CisgIGIyTGVuID0gV2luZ2V0U29ydEtleSgoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4sIGIyLCAyNTYpOworCisgIGIxW2IxTGVuXSA9IDA7CisgIGIyW2IyTGVuXSA9IDA7CisgIAorICByZXR1cm4gc3RyY21wKChjb25zdCBjaGFyICopYjEsIChjb25zdCBjaGFyICopYjIpOworfQorI2VuZGlmCisKKyNlbHNlCitpbnQgV2luc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgaWYoYSA9PSBiKTsKKyAgcmV0dXJuIDA7Cit9CitpbnQgV2luZ2V0U29ydEtleShjb25zdCBVQ2hhciAqLCBpbnQzMl90ICwgdWludDhfdCAqLCBpbnQzMl90ICkgeworICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgSUNVc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgICBnQ291bnQrKzsKKyAgICBVQ29sbGF0aW9uUmVzdWx0IHQ7CisgICAgdCA9IHVjb2xfc3RyY29sbChnQ29sLCAKKyAgICAgICgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgIAorICAgICAgKCooTGluZSAqKiliKS0+bmFtZSwgKCooTGluZSAqKiliKS0+bGVuKTsKKyAgICBpZiAodCA9PSBVQ09MX0xFU1MpIHJldHVybiAtMTsKKyAgICBpZiAodCA9PSBVQ09MX0dSRUFURVIpIHJldHVybiArMTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IElDVWdldFNvcnRLZXkoY29uc3QgVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4sIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwYWNpdHkpIHsKKyAgcmV0dXJuIHVjb2xfZ2V0U29ydEtleShnQ29sLCBzdHJpbmcsIGxlbiwgYnVmZmVyLCBidWZmQ2FwYWNpdHkpOworfQorCitzdHJ1Y3QgeworICBjb25zdCBjaGFyKiBuYW1lOworICBDb21wYXJlRm4gY29tcGFyZXI7CisgIEdldFNvcnRLZXlGbiBza2dldHRlcjsKK30gcGxhdGZvcm1zW10gPSB7CisgIHsgImljdSIsIElDVXN0cmNtcCwgSUNVZ2V0U29ydEtleSB9LAorICB7ICJ3MmsiLCBXaW5zdHJjbXAsIFdpbmdldFNvcnRLZXl9LAorICB7ICJ3aW54cCIsIFdpbnN0cmNtcCwgV2luZ2V0U29ydEtleX0sCisgIHsgImFpeCIsIFVOSVhzdHJjbXAsIFVOSVhnZXRTb3J0S2V5fSwKKyAgeyAibGludXgiLCBVTklYc3RyY21wLCBVTklYZ2V0U29ydEtleX0KK307CisKKwordm9pZCBzdHJpbmdUb0xvd2VyKGNoYXIgKnN0cmluZykgeworICB1aW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc3RybGVuKHN0cmluZyk7IGkrKykgeworICAgIHN0cmluZ1tpXSA9IHRvbG93ZXIoc3RyaW5nW2ldKTsKKyAgfQorfQorCit2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgbG9nZ2VyLT5sb2coIlVzYWdlOiAlcyAtLWxvY2FsZSBsb2NfbmFtZSAtLXBsYXRmb3JtIHBsYXRmb3JtXG4iLCBuYW1lKTsKK30KKwordm9pZCBsaXN0S25vd25QbGF0Zm9ybXMoKSB7CisgIHVpbnQzMl90IGkgPSAwOworICBsb2dnZXItPmxvZygiS25vd24gcGxhdGZvcm1zOlxuIik7CisgIGZvcihpID0gMDsgaSA8IHNpemVvZihwbGF0Zm9ybXMpL3NpemVvZihwbGF0Zm9ybXNbMF0pOyBpKyspIHsKKyAgICBsb2dnZXItPmxvZygiXHQlc1xuIiwgcGxhdGZvcm1zW2ldKTsKKyAgfQorfQorCit2b2lkIGFkZFBsYXRmb3JtKGNvbnN0IGNoYXIgKnBsYXRmb3JtKSB7CisgIHVpbnQzMl90IGk7CisgIC8vc3RyaW5nVG9Mb3dlcihwbGF0Zm9ybSk7CisgIGludDMyX3Qgb2xkUGxhdGZvcm1ObyA9IGdQbGF0Zm9ybU5vOworCisgIGZvcihpID0gMDsgaSA8IHNpemVvZihwbGF0Zm9ybXMpL3NpemVvZihwbGF0Zm9ybXNbMF0pOyBpKyspIHsKKyAgICBpZihzdHJjbXAocGxhdGZvcm0sIHBsYXRmb3Jtc1tpXS5uYW1lKSA9PSAwKSB7CisgICAgICBnUGxhdGZvcm1JbmRleGVzW2dQbGF0Zm9ybU5vKytdID0gaTsKKyAgICB9CisgIH0KKyAgaWYoZ1BsYXRmb3JtTm8gPT0gb2xkUGxhdGZvcm1ObykgeworICAgIGxvZ2dlci0+bG9nKCJVbmtub3duIHBsYXRmb3JtICVzXG4iLCBwbGF0Zm9ybSk7CisgICAgbGlzdEtub3duUGxhdGZvcm1zKCk7CisgIH0KK30KKwordm9pZCBwcm9jZXNzQXJncyhpbnQgYXJnYywgY2hhciogYXJndltdLCBVRXJyb3JDb2RlICZzdGF0dXMpCit7CisgIGludDMyX3QgaSA9IDA7CisgIFVfTUFJTl9JTklUX0FSR1MoYXJnYywgYXJndik7CisKKyAgYXJnYyA9IHVfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YsIChpbnQzMl90KShzaXplb2Yob3B0aW9ucykvc2l6ZW9mKG9wdGlvbnNbMF0pKSwgb3B0aW9ucyk7CisKKyAgaWYoYXJnYyA8IDApIHsKKyAgICBsb2dnZXItPmxvZygiVW5rbm93biBvcHRpb246ICVzXG4iLCBhcmd2Wy1hcmdjXSk7CisgICAgdXNhZ2UocHJvZ05hbWUpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmKG9wdGlvbnNbMF0uZG9lc09jY3VyIHx8IG9wdGlvbnNbMV0uZG9lc09jY3VyKSB7CisgICAgdXNhZ2UocHJvZ05hbWUpOworICAgIHJldHVybjsKKyAgfQorICBpZihvcHRpb25zW1ZFUkJPU0VdLmRvZXNPY2N1cikgeworICAgIGdWZXJib3NlID0gVFJVRTsKKyAgfQorICBpZihvcHRpb25zW0RFQlVHXS5kb2VzT2NjdXIpIHsKKyAgICBnRGVidWcgPSBUUlVFOworICAgIGdWZXJib3NlID0gVFJVRTsKKyAgfQorICBpZihvcHRpb25zW0VYRU1QTEFSXS5kb2VzT2NjdXIpIHsKKyAgICBnRXhlbXBsYXIgPSBUUlVFOworICB9CisgIGlmKG9wdGlvbnNbUVVJRVRdLmRvZXNPY2N1cikgeworICAgIGdRdWlldCA9IFRSVUU7CisgIH0KKworICAvLyBBU0NJSSBiYXNlZCBvcHRpb25zIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgIC8vIHRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdpbGwgYWxsb3cgdG8gbG9hZAorICAvLyB1cCBJQ1UgcnVsZXMgYW5kIHRoZW4gcG9rZSB0aHJvdWdoIHRoZW0uCisgIC8vIEluIHRoYXQgY2FzZSwgd2UgdGVzdCBvbmx5IElDVSBhbmQgZG9uJ3QgbmVlZCAKKyAgLy8gYSBsb2NhbGUuCisgIGlmKG9wdGlvbnNbUlVMRVNTVERJTl0uZG9lc09jY3VyKSB7CisgICAgZ1J1bGVzU3RkaW4gPSBUUlVFOworICAgIGFkZFBsYXRmb3JtKCJpY3UiKTsKKyAgICByZXR1cm47CisgIH0gCisKKyAgaWYob3B0aW9uc1tMT0NBTEVdLmRvZXNPY2N1cikgeworICAgIGdMb2NhbGUgPSBvcHRpb25zW0xPQ0FMRV0udmFsdWU7CisgIH0gZWxzZSB7CisgICAgZ0xvY2FsZSA9IGFyZ3ZbMV07CisgICAgLy9mb3IoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAvL2dMb2NhbGVzW2dMb2NhbGVObysrXSA9IGFyZ3ZbaV07CisgICAgLy99CisgIH0KKworICBpZihvcHRpb25zW1BMQVRGT1JNXS5kb2VzT2NjdXIpIHsKKyAgICBhZGRQbGF0Zm9ybShvcHRpb25zW1BMQVRGT1JNXS52YWx1ZSk7CisgIH0gZWxzZSB7IC8vIHRoZXJlIGlzIGEgbGlzdCBvZiBwbGF0Zm9ybXMgCisgICAgYWRkUGxhdGZvcm0oImljdSIpOworICB9CisKKyAgaWYob3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgeworICAgIGZvcihpID0gMDsgaSA8IChpbnQzMl90KShzaXplb2YocGxhdGZvcm1zKS9zaXplb2YocGxhdGZvcm1zWzBdKSk7IGkrKykgeworICAgICAgaWYoc3RyY21wKG9wdGlvbnNbUkVGRVJFTkNFXS52YWx1ZSwgcGxhdGZvcm1zW2ldLm5hbWUpID09IDApIHsKKyAgICAgICAgZ1JlZk51bSA9IGk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZihpID09IHNpemVvZihwbGF0Zm9ybXMpL3NpemVvZihwbGF0Zm9ybXNbMF0pKSB7CisgICAgICBsb2dnZXItPmxvZygiVW5rbm93biByZWZlcmVuY2UgJXMhXG4iLCBvcHRpb25zW1JFRkVSRU5DRV0udmFsdWUpOworICAgICAgc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBnUmVmTnVtID0gMDsKKyAgfQorCisgIGlmKG9wdGlvbnNbRVhDTFVERVNFVF0uZG9lc09jY3VyKSB7CisgICAgZ0V4Y2x1ZGVTZXQuYXBwbHlQYXR0ZXJuKFVuaWNvZGVTdHJpbmcob3B0aW9uc1tFWENMVURFU0VUXS52YWx1ZSksIHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgIGxvZ2dlci0+bG9nKCJDYW5ub3QgY29uc3RydWN0IGV4Y2x1ZGUgc2V0IGZyb20gYXJndW1lbnQgJXMuIEVycm9yICVzXG4iLCBvcHRpb25zW0VYQ0xVREVTRVRdLnZhbHVlLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgVW5pY29kZVN0cmluZyBwYXR0ZXJuOworICAgICAgbG9nZ2VyLT5sb2coZ0V4Y2x1ZGVTZXQudG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpLCBUUlVFKTsKKyAgICB9CisgIH0KKworICBpZihvcHRpb25zW1JFUEVSVE9JUkVdLmRvZXNPY2N1cikgIHsKKyAgICBnUmVwZXJ0b2lyZS5hcHBseVBhdHRlcm4oVW5pY29kZVN0cmluZyhvcHRpb25zW1JFUEVSVE9JUkVdLnZhbHVlKSwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgbG9nZ2VyLT5sb2coIkNhbm5vdCBjb25zdHJ1Y3QgcmVwZXJ0b2lyZSBmcm9tIGFyZ3VtZW50ICVzLiBFcnJvciAlc1xuIiwgb3B0aW9uc1tSRVBFUlRPSVJFXS52YWx1ZSwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgaWYob3B0aW9uc1tPVVRQVVRdLmRvZXNPY2N1cikgeworICAgIG91dHB1dEZvcm1hdCA9IG9wdGlvbnNbT1VUUFVUXS52YWx1ZTsKKyAgICBpZihzdHJjbXAob3V0cHV0Rm9ybWF0LCAiSFRNTCIpID09IDApIHsKKyAgICAgIG91dEV4dGVuc2lvbiA9ICJodG1sIjsKKyAgICB9IGVsc2UgaWYoc3RyY21wKG91dHB1dEZvcm1hdCwgIlhNTCIpID09IDApIHsKKyAgICAgIG91dEV4dGVuc2lvbiA9ICJ4bWwiOworICAgIH0gZWxzZSB7CisgICAgICBvdXRFeHRlbnNpb24gPSAidHh0IjsKKyAgICB9CisgIH0KKworfQorCisvLyBDaGVjayB3aGV0aGVyIHVwcGVyIGNhc2UgY29tZXMgYmVmb3JlIGxvd2VyIGNhc2Ugb3IgdmljZS12ZXJzYQoraW50MzJfdCAKK2NoZWNrQ2FzZU9yZGVyaW5nKHZvaWQpIHsKKyAgVUNoYXIgc3R1ZmZbXVszXSA9IHsKKyAgICB7IDB4MDA2MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxfSwgLy8iYWEiLAorICAgIHsgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwNDEgfSwgLy8iYVxcdTAwRTAiLAorICAgIHsgMHgwMDQxLCBzZXBhcmF0b3JDaGFyLCAweDAwNjEgfSwgLy8iXFx1MDBFMGEiLAorICAgIHsgMHgwMDQxLCBzZXBhcmF0b3JDaGFyLCAweDAwNDEgfSwgLy8iXFx1MDBFMGEiLAorICAgIC8veyAweDAwRTAsIHNlcGFyYXRvckNoYXIsIDB4MDBFMCB9ICAvLyJcXHUwMEUwXFx1MDBFMCIKKyAgfTsKKyAgY29uc3QgaW50MzJfdCBzaXplID0gc2l6ZW9mKHN0dWZmKS9zaXplb2Yoc3R1ZmZbMF0pOworCisgIExpbmUgKipzb3J0ZWRMaW5lcyA9IG5ldyBMaW5lKltzaXplXTsKKyAgTGluZSBsaW5lc1tzaXplXTsKKworICBpbnQzMl90IGkgPSAwOworICBpbnQzMl90IG9yZGVyZWQgPSAwLCByZXZlcnNlZCA9IDA7CisKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgbGluZXNbaV0uc2V0TmFtZShzdHVmZltpXSwgMyk7CisgIH0KKyAgLy9zZXRBcnJheShzb3J0ZWRMaW5lcywgbGluZXMsIHNpemUpOworICBxc29ydChzb3J0ZWRMaW5lcywgc2l6ZSwgc2l6ZW9mKExpbmUqKSwgZ0NvbXBhcmVyKTsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBpZigqKHNvcnRlZExpbmVzK2kpID09ICZsaW5lc1tpXSkgeworICAgICAgb3JkZXJlZCsrOworICAgIH0KKyAgICBpZigqKHNvcnRlZExpbmVzK2kpID09ICZsaW5lc1tzaXplLWktMV0pIHsKKyAgICAgIHJldmVyc2VkKys7CisgICAgfQorICB9CisKKyAgZGVsZXRlW10gc29ydGVkTGluZXM7CisgIGlmKG9yZGVyZWQgPT0gc2l6ZSkgeworICAgIHJldHVybiAwOyAvLyBpbiBub3JtYWwgb3JkZXIKKyAgfSBlbHNlIGlmKHJldmVyc2VkID09IHNpemUpIHsKKyAgICByZXR1cm4gMTsgLy8gaW4gcmV2ZXJzZWQgb3JkZXIKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gLTE7IC8vIHVua25vd24gb3JkZXIKKyAgfQorfQorCit2b2lkCitnZXRFeGVtcGxhcnMoY29uc3QgY2hhciAqbG9jYWxlLCBVbmljb2RlU2V0ICZleGVtcGxhcnMsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICAvLyBmaXJzdCB3ZSBmaWxsIG91dCBzdHJ1Y3R1cmVzIHdpdGggZXhlbXBsYXIgY2hhcmFjdGVycy4KKyAgVVJlc291cmNlQnVuZGxlICpyZXMgPSB1cmVzX29wZW4oTlVMTCwgbG9jYWxlLCAmc3RhdHVzKTsKKyAgVW5pY29kZVN0cmluZyBleGVtcGxhclN0cmluZyA9IHVyZXNfZ2V0VW5pY29kZVN0cmluZ0J5S2V5KHJlcywgIkV4ZW1wbGFyQ2hhcmFjdGVycyIsICZzdGF0dXMpOworICBleGVtcGxhcnMuY2xlYXIoKTsKKyAgZXhlbXBsYXJzLmFwcGx5UGF0dGVybihleGVtcGxhclN0cmluZywgc3RhdHVzKTsKKyAgdXJlc19jbG9zZShyZXMpOworfQorCisKK3ZvaWQKK2dldEZpbGVOYW1lcyhjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YWlsb3JpbmdOYW1lLCBjaGFyICp0YWlsb3JpbmdEdW1wTmFtZSwgY2hhciAqZGVmYXVsdE5hbWUsIGNoYXIgKmRlZmF1bHREdW1wTmFtZSwgY2hhciAqZGlmZk5hbWUpIHsKKyAgaWYodGFpbG9yaW5nTmFtZSkgeworICAgIHN0cmNweSh0YWlsb3JpbmdOYW1lLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSk7CisgICAgc3RyY2F0KHRhaWxvcmluZ05hbWUsICIvIik7CisgICAgc3RyY2F0KHRhaWxvcmluZ05hbWUsIG5hbWUpOworICAgIHN0cmNhdCh0YWlsb3JpbmdOYW1lLCAiX3Jhdy4iKTsKKyAgICBzdHJjYXQodGFpbG9yaW5nTmFtZSwgb3V0RXh0ZW5zaW9uKTsKKyAgfQorICBpZih0YWlsb3JpbmdEdW1wTmFtZSkgeworICAgIHN0cmNweSh0YWlsb3JpbmdEdW1wTmFtZSwgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUpOworICAgIHN0cmNhdCh0YWlsb3JpbmdEdW1wTmFtZSwgIi8iKTsKKyAgICBzdHJjYXQodGFpbG9yaW5nRHVtcE5hbWUsIG5hbWUpOworICAgIHN0cmNhdCh0YWlsb3JpbmdEdW1wTmFtZSwgIi5kdW1wIik7CisgIH0KKworICBpZihkaWZmTmFtZSkgeworICAgIHN0cmNweShkaWZmTmFtZSwgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUpOworICAgIHN0cmNhdChkaWZmTmFtZSwgIi8iKTsKKyAgICBzdHJjYXQoZGlmZk5hbWUsIG5hbWUpOworICAgIHN0cmNhdChkaWZmTmFtZSwgIl9jb2xsYXRpb24uIik7CisgICAgc3RyY2F0KGRpZmZOYW1lLCBvdXRFeHRlbnNpb24pOworICB9CisKKyAgaWYoZGVmYXVsdE5hbWUpIHsKKyAgICBzdHJjcHkoZGVmYXVsdE5hbWUsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lKTsKKyAgICBzdHJjYXQoZGVmYXVsdE5hbWUsICIvIik7CisgICAgc3RyY2F0KGRlZmF1bHROYW1lLCBuYW1lKTsKKyAgICBzdHJjYXQoZGVmYXVsdE5hbWUsICJfZGVmYXVsdF9yYXcuIik7CisgICAgc3RyY2F0KGRlZmF1bHROYW1lLCBvdXRFeHRlbnNpb24pOworICB9CisKKyAgaWYoZGVmYXVsdER1bXBOYW1lKSB7CisgICAgc3RyY3B5KGRlZmF1bHREdW1wTmFtZSwgcGxhdGZvcm1zW2dSZWZOdW1dLm5hbWUpOworICAgIHN0cmNhdChkZWZhdWx0RHVtcE5hbWUsICIvIik7CisgICAgc3RyY2F0KGRlZmF1bHREdW1wTmFtZSwgbmFtZSk7CisgICAgc3RyY2F0KGRlZmF1bHREdW1wTmFtZSwgIl9kZWZhdWx0LmR1bXAiKTsKKyAgfQorfQorCit2b2lkIAorc2V0RmlsZXMoY29uc3QgY2hhciAqbmFtZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgcmV0dXJuOworICB9CisgIGludDMyX3QgaSA9IDA7CisgIGNoYXIgdGFpbG9yaW5nTmFtZVsyNTZdOworICBjaGFyIHRhaWxvcmluZ0R1bXBOYW1lWzI1Nl07CisgIGNoYXIgZGVmYXVsdE5hbWVbMjU2XTsKKyAgY2hhciBkZWZhdWx0RHVtcE5hbWVbMjU2XTsKKyAgY2hhciBkaWZmTmFtZVsyNTZdOworCisgIGdldEZpbGVOYW1lcyhuYW1lLCB0YWlsb3JpbmdOYW1lLCB0YWlsb3JpbmdEdW1wTmFtZSwgZGVmYXVsdE5hbWUsIGRlZmF1bHREdW1wTmFtZSwgZGlmZk5hbWUpOworICBpZihvcHRpb25zW1BMQVRGT1JNXS5kb2VzT2NjdXIgJiYgIW9wdGlvbnNbRElGRl0uZG9lc09jY3VyKSB7ICAKKyAgICBpZihjcmVhdGVEaXIocGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUpID09IDApIHsKKyAgICAgIHRhaWxvcmluZ0J1bmRsZSA9IG5ldyBVUHJpbnRlcih0YWlsb3JpbmdOYW1lLCAiZW4iLCAidXRmLTgiLCBOVUxMLCBGQUxTRSk7CisgICAgICBmVGFpbG9yaW5nRHVtcCA9IGZvcGVuKHRhaWxvcmluZ0R1bXBOYW1lLCAid2IiKTsKKyAgICB9IGVsc2UgeworICAgICAgc3RhdHVzID0gVV9GSUxFX0FDQ0VTU19FUlJPUjsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyICYmICFvcHRpb25zW0RJRkZdLmRvZXNPY2N1cikgeworICAgIGlmKGNyZWF0ZURpcihwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSkgPT0gMCkgeworICAgICAgcmVmZXJlbmNlQnVuZGxlID0gbmV3IFVQcmludGVyKGRlZmF1bHROYW1lLCAiZW4iLCAidXRmLTgiLCBOVUxMLCBGQUxTRSk7CisgICAgICBmRGVmYXVsdER1bXAgPSBmb3BlbihkZWZhdWx0RHVtcE5hbWUsICJ3YiIpOworICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMgPSBVX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmKChvcHRpb25zW1BMQVRGT1JNXS5kb2VzT2NjdXIgJiYgb3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgfHwgb3B0aW9uc1tESUZGXS5kb2VzT2NjdXIpIHsKKyAgICBpZihjcmVhdGVEaXIocGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUpID09IDApIHsKKyAgICAgIGJ1bmRsZSA9IG5ldyBVUHJpbnRlcihkaWZmTmFtZSwgImVuIiwgInV0Zi04IiwgTlVMTCwgRkFMU0UpOworICAgIH0KKyAgfQorICBpZihvcHRpb25zW0RJRkZdLmRvZXNPY2N1cikgeworICAgIGZUYWlsb3JpbmdEdW1wID0gZm9wZW4odGFpbG9yaW5nRHVtcE5hbWUsICJyYiIpOworICAgIGZEZWZhdWx0RHVtcCA9IGZvcGVuKGRlZmF1bHREdW1wTmFtZSwgInJiIik7CisgIH0KK30KKworCitVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKK3N0YXRpYyBVbmljb2RlU2V0IFVOQVNTSUdORUQoVW5pY29kZVN0cmluZygiWzpDbjpdIiksIHN0YXR1cyk7CitzdGF0aWMgVW5pY29kZVNldCBHRU5FUkFMX0FDQ0VOVFMoVW5pY29kZVN0cmluZygiW1s6YmxvY2s9Q29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzOl0tWzpDbjpdXSIpLCBzdGF0dXMpOworLy9zdGF0aWMgVW5pY29kZVNldCBBU0NJSV9CQVNFKFVuaWNvZGVTdHJpbmcoIltbOkFTQ0lJOl0tWzpMOl0tWzpOOl1dIiksIHN0YXR1cyk7CitzdGF0aWMgVW5pY29kZVNldCBBU0NJSV9CQVNFKFVuaWNvZGVTdHJpbmcoIltbOkFTQ0lJOl1dIiksIHN0YXR1cyk7CitzdGF0aWMgVW5pY29kZVNldCBBTFBIQUJFVElDKFVuaWNvZGVTdHJpbmcoIls6YWxwaGFiZXRpYzpdIiksIHN0YXR1cyk7CisvL3N0YXRpYyBVbmljb2RlU2V0IENPTlRST0woVW5pY29kZVN0cmluZygiW1s6Y29udHJvbDpdW1xcdTAwMDAtXFx1MDAyRl1dIiksIHN0YXR1cyk7CitzdGF0aWMgVW5pY29kZVNldCBCTVAoVW5pY29kZVN0cmluZygiW1xcdTAwMDAtXFx1RkZGRl0iKSwgc3RhdHVzKTsKKworc3RhdGljIFVuaWNvZGVTZXQgQ09OVFJPTChVbmljb2RlU3RyaW5nKCJbOmNvbnRyb2w6XSIpLCBzdGF0dXMpOworCitVQ29sbGF0b3IgKgorc2V0TG9jYWxlKGNvbnN0IGNoYXIqIGxvY2FsZSwgVUVycm9yQ29kZSAmc3RhdHVzKQoreworICBnV2luTENJRCA9IHVsb2NfZ2V0TENJRChsb2NhbGUpOworICBzZXRsb2NhbGUoTENfQ09MTEFURSwgbG9jYWxlKTsKKworICBpZihnQ29sKSB7CisgICAgdWNvbF9jbG9zZShnQ29sKTsKKyAgfQorICBnQ29sID0gdWNvbF9vcGVuKGxvY2FsZSwgJnN0YXR1cyk7CisgIHVjb2xfc2V0QXR0cmlidXRlKGdDb2wsIFVDT0xfTk9STUFMSVpBVElPTl9NT0RFLCBVQ09MX09OLCAmc3RhdHVzKTsKKyAgLy91Y29sX3NldEF0dHJpYnV0ZShjb2wsIFVDT0xfQUxURVJOQVRFX0hBTkRMSU5HLCBVQ09MX1NISUZURUQsICZzdGF0dXMpOworICAvL3Vjb2xfc2V0QXR0cmlidXRlKGNvbCwgVUNPTF9TVFJFTkdUSCwgVUNPTF9RVUFURVJOQVJZLCAmc3RhdHVzKTsKKworICByZXR1cm4gZ0NvbDsKK30KKworCisKK1VDb2xsYXRvciAqCitzZXRSZWZlcmVuY2UoVUVycm9yQ29kZSAmc3RhdHVzKSAKK3sKKyAgZ1dpbkxDSUQgPSB1bG9jX2dldExDSUQoImVuIik7CisgIHNldGxvY2FsZShMQ19DT0xMQVRFLCAiZW5fVVMuVVRGLTgiKTsKKyAgaWYoZ0NvbCkgeworICAgIHVjb2xfY2xvc2UoZ0NvbCk7CisgIH0KKyAgZ0NvbCA9IHVjb2xfb3Blbigicm9vdCIsICZzdGF0dXMpOworICB1Y29sX3NldEF0dHJpYnV0ZShnQ29sLCBVQ09MX05PUk1BTElaQVRJT05fTU9ERSwgVUNPTF9PTiwgJnN0YXR1cyk7CisgIHJldHVybiBnQ29sOworfQorCit2b2lkCitwcm9jZXNzSW50ZXJhY3RpdmUoKSB7CisgIGNoYXIgY29tbWFuZFsyNTZdOworICB3aGlsZShmZ2V0cyhjb21tYW5kLCAyNTYsIHN0ZGluKSkgeworCisgIH0KK30KKworVUNoYXIgcHJvYmVDaGFyc1tdWzRdID0geworICB7IDB4MDA2MSwgMHgwMDYyLCAweDAwRTEsIDB4MDA0MSB9LCAvLyBsYXRpbiB3aXRoIGEtZ3JhdmUKKyAgeyAweDAwNDEsIDB4MDA0MiwgMHgwMEMxLCAweDAwNjEgfSwgLy8gdXBwZXIgZmlyc3QKKyAgeyAweDAwNkUsIDB4MDA2RiwgMHgwMEYxLCAweDAwNEUgfSwgLy8gbGF0aW4gd2l0aCBuLXRpbGRhCisgIHsgMHgwMDRFLCAweDAwNEYsIDB4MDBEMSwgMHgwMDZFIH0sIC8vIHVwcGVyIGZpcnN0CisgIHsgMHgwNDMzLCAweDA0OTMsIDB4MDQ5MSwgMHgwNDEzIH0sIC8vIEN5cmlsbGljCisgIHsgMHgwNDEzLCAweDA0OTIsIDB4MDQ5MCwgMHgwNDMzIH0sIC8vIHVwcGVyIGZpcnN0CisgIHsgMHgzMDQ1LCAweDMwNDcsIDB4MzA5NCwgMHgzMDQ2IH0gIC8vIEhpcmFnYW5hL0thdGFrYW5hIChsYXN0IHJlc29ydCkKKworfTsKKwordm9pZAorcHJvY2Vzc0NvbGxhdG9yKFVDb2xsYXRvciAqY29sLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgdWludDMyX3QgaiA9IDA7CisgIGdDb2wgPSBjb2w7CisgIFVDaGFyIHJ1bGVTdHJpbmdbMTYzODRdOworICBjaGFyIG15TG9jWzI1Nl07CisKKyAgaW50MzJfdCBydWxlU3RyaW5nTGVuZ3RoID0gdWNvbF9nZXRSdWxlc0V4KGdDb2wsIFVDT0xfVEFJTE9SSU5HX09OTFksIHJ1bGVTdHJpbmcsIDE2Mzg0KTsKKyAgbG9nZ2VyLT5sb2coVW5pY29kZVN0cmluZyhydWxlU3RyaW5nLCBydWxlU3RyaW5nTGVuZ3RoKSwgVFJVRSk7CisgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IHVjb2xfZ2V0TG9jYWxlKGdDb2wsIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSwgJnN0YXR1cyk7CisgIGlmKGxvY2FsZSA9PSBOVUxMKSB7CisgICAgbG9jYWxlID0gImVuIjsKKyAgfQorICBzdHJjcHkobXlMb2MsIGxvY2FsZSk7CisgIFVuaWNvZGVTZXQgZXhlbXBsYXJVU2V0OworICBVbmljb2RlU2V0IFJlZlJlcGVydG9pcmU7CisKKyAgVW5pY29kZVNldCB0YWlsb3JlZDsKKworICB0YWlsb3JlZCA9ICooKFVuaWNvZGVTZXQgKil1Y29sX2dldFRhaWxvcmVkU2V0KGdDb2wsICZzdGF0dXMpKTsKKyAgdGFpbG9yZWQucmVtb3ZlQWxsKENPTlRST0wpOworCisKKyAgVW5pY29kZVN0cmluZyBwYXR0ZXJuOworICBpbnQgc2FuaXR5UmVzdWx0OworCisgIFVuaWNvZGVTZXQgaGFuU2V0OworICBVQm9vbCBoYW5BcHBlYXJzID0gRkFMU0U7CisKKyAgZGVidWctPmxvZygiXG5HZW5lcmF0aW5nIG9yZGVyIGZvciBwbGF0Zm9ybTogJXNcbiIsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lKTsKKyAgZ0NvbXBhcmVyID0gcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLmNvbXBhcmVyOworCisgIFN0cmVuZ3RoUHJvYmUgcHJvYmUocGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLmNvbXBhcmVyLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0uc2tnZXR0ZXIsIDB4MDAzMCwgcHJvYmVDaGFyc1swXVswXSwgcHJvYmVDaGFyc1swXVsxXSwgcHJvYmVDaGFyc1swXVsyXSwgcHJvYmVDaGFyc1swXVszXSk7CisgIHNhbml0eVJlc3VsdCA9IHByb2JlLmNoZWNrU2FuaXR5KCk7CisgIGogPSAwOworICB3aGlsZShzYW5pdHlSZXN1bHQgJiYgaisxIDwgc2l6ZW9mKHByb2JlQ2hhcnMpL3NpemVvZihwcm9iZUNoYXJzWzBdKSkgeworICAgaisrOworICAgc2FuaXR5UmVzdWx0ID0gIHByb2JlLnNldFByb2JlQ2hhcnMocHJvYmVDaGFyc1tqXVswXSwgcHJvYmVDaGFyc1tqXVsxXSwgcHJvYmVDaGFyc1tqXVsyXSwgcHJvYmVDaGFyc1tqXVszXSk7CisgIH0KKyAgaWYoc2FuaXR5UmVzdWx0KSB7CisgICAgbG9nZ2VyLT5sb2coIkJhZCBjaG9pY2Ugb2YgcHJvYmUgY2hhcmFjdGVycyEgU2FuaXR5IHJldHVybmVkICVpLiBFeGl0aW5nXG4iLCBzYW5pdHlSZXN1bHQsIHNhbml0eVJlc3VsdCk7CisgICAgcmV0dXJuOworICB9CisgIGxvZ2dlci0+bG9nKCJQcm9iZSBjaGFyczogJUMsICVDLCAlQywgJUNcbiIsIHByb2JlQ2hhcnNbal1bMF0sIHByb2JlQ2hhcnNbal1bMV0sIHByb2JlQ2hhcnNbal1bMl0sIHByb2JlQ2hhcnNbal1bM10pOyAKKworICBkZWJ1Zy0+b2ZmKCk7CisKKyAgaWYoZ1JlcGVydG9pcmUuc2l6ZSgpKSB7CisgICAgZXhlbXBsYXJVU2V0ID0gZ1JlcGVydG9pcmU7CisgIH0gZWxzZSB7CisgICAgZ2VuZXJhdGVSZXBlcnRvaXJlKGxvY2FsZSwgZXhlbXBsYXJVU2V0LCBoYW5BcHBlYXJzLCBzdGF0dXMpOworICB9CisgIGV4ZW1wbGFyVVNldC5hZGRBbGwodGFpbG9yZWQpOworICBoYW5TZXQuYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKFVDSEFSX1NDUklQVCwgVVNDUklQVF9IQU4sIHN0YXR1cyk7CisgIGV4ZW1wbGFyVVNldC5yZW1vdmVBbGwoaGFuU2V0KTsKKyAgCisgIGxvZ2dlci0+bG9nKGV4ZW1wbGFyVVNldC50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSksIFRSVUUpOworCisgIGV4ZW1wbGFyVVNldCA9IGZsYXR0ZW4oZXhlbXBsYXJVU2V0LCBzdGF0dXMpOworICBsb2dnZXItPmxvZyhleGVtcGxhclVTZXQudG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpLCBUUlVFKTsKKworICBpZighb3B0aW9uc1tQUklOVFJFRl0uZG9lc09jY3VyKSB7CisKKyAgICBsb2dnZXItPmxvZygiXG4qKiogRGV0ZWN0aW5nIG9yZGVyaW5nIGZvciB0aGUgbG9jYWxlXG5cbiIpOworCisgICAgZGVidWctPm9uKCk7CisgICAgU29ydGVkTGluZXMgbGluZXMoZXhlbXBsYXJVU2V0LCBnRXhjbHVkZVNldCwgcHJvYmUsIGxvZ2dlciwgZGVidWcpOworICAgIGxpbmVzLmFuYWx5c2Uoc3RhdHVzKTsKKyAgICBsaW5lcy5jYWxjdWxhdGVTb3J0S2V5cygpOworICAgIGRlYnVnLT5sb2coIlxuKioqIEZpbmFsIG9yZGVyXG5cbiIpOworICAgIGRlYnVnLT5sb2cobGluZXMudG9QcmV0dHlTdHJpbmcoVFJVRSwgVFJVRSksIFRSVUUpOworICAgIGxpbmVzLnRvRmlsZShmVGFpbG9yaW5nRHVtcCwgVFJVRSwgc3RhdHVzKTsKKyAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZyhsaW5lcy50b091dHB1dChvdXRwdXRGb3JtYXQsIG15TG9jLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSwgTlVMTCwgVFJVRSwgVFJVRSwgaGFuQXBwZWFycyksIFRSVUUpOworICAgIC8vZGVidWctPm9mZigpOworCisgICAgaWYob3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgeworICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgbGluZXMuZ2V0UmVwZXJ0b2lyZShSZWZSZXBlcnRvaXJlKTsKKyAgICAgIHNldFJlZmVyZW5jZShzdGF0dXMpOworCisgICAgICBsb2dnZXItPmxvZyhleGVtcGxhclVTZXQudG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpLCBUUlVFKTsKKyAgICAgIGxvZ2dlci0+bG9nKFJlZlJlcGVydG9pcmUudG9QYXR0ZXJuKHBhdHRlcm4sIFRSVUUpLCBUUlVFKTsKKworICAgICAgU3RyZW5ndGhQcm9iZSBSZWZQcm9iZShwbGF0Zm9ybXNbZ1JlZk51bV0uY29tcGFyZXIsIHBsYXRmb3Jtc1tnUmVmTnVtXS5za2dldHRlcik7CisgICAgICBsb2dnZXItPmxvZygiXG4qKiogRGV0ZWN0aW5nIG9yZGVyaW5nIGZvciByZWZlcmVuY2VcblxuIik7CisgICAgICBTb3J0ZWRMaW5lcyBSZWZMaW5lcyhleGVtcGxhclVTZXQsIGdFeGNsdWRlU2V0LCBSZWZQcm9iZSwgbG9nZ2VyLCBkZWJ1Zyk7CisgICAgICBSZWZMaW5lcy5hbmFseXNlKHN0YXR1cyk7CisgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZyhSZWZMaW5lcy50b091dHB1dChvdXRwdXRGb3JtYXQsIG15TG9jLCBwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSwgTlVMTCwgVFJVRSwgVFJVRSwgRkFMU0UpLCBUUlVFKTsKKyAgICAgIFJlZkxpbmVzLnRvRmlsZShmRGVmYXVsdER1bXAsIFRSVUUsIHN0YXR1cyk7CisKKyAgICAgIGxpbmVzLnJlZHVjZURpZmZlcmVuY2UoUmVmTGluZXMpOworICAgICAgbG9nZ2VyLT5sb2coIlxuKioqIEZpbmFsIHJ1bGVzXG5cbiIpOworICAgICAgbG9nZ2VyLT5sb2cobGluZXMudG9QcmV0dHlTdHJpbmcoVFJVRSksIFRSVUUpOworICAgICAgYnVuZGxlLT5sb2cobGluZXMudG9PdXRwdXQob3V0cHV0Rm9ybWF0LCBteUxvYywgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lLCBUUlVFLCBUUlVFLCBoYW5BcHBlYXJzKSwgVFJVRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIHNldFJlZmVyZW5jZShzdGF0dXMpOworICAgIFN0cmVuZ3RoUHJvYmUgUmVmUHJvYmUocGxhdGZvcm1zW2dSZWZOdW1dLmNvbXBhcmVyLCBwbGF0Zm9ybXNbZ1JlZk51bV0uc2tnZXR0ZXIpOworICAgIGxvZ2dlci0+bG9nKCJcbioqKiBEZXRlY3Rpbmcgb3JkZXJpbmcgZm9yIHJlZmVyZW5jZVxuXG4iKTsKKyAgICBTb3J0ZWRMaW5lcyBSZWZMaW5lcyhleGVtcGxhclVTZXQsIGdFeGNsdWRlU2V0LCBSZWZQcm9iZSwgbG9nZ2VyLCBkZWJ1Zyk7CisgICAgUmVmTGluZXMuYW5hbHlzZShzdGF0dXMpOworICAgIGxvZ2dlci0+bG9nKFJlZkxpbmVzLnRvUHJldHR5U3RyaW5nKFRSVUUpLCBUUlVFKTsKKyAgICByZWZlcmVuY2VCdW5kbGUtPmxvZyhSZWZMaW5lcy50b091dHB1dChvdXRwdXRGb3JtYXQsIG15TG9jLCBwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSwgTlVMTCwgVFJVRSwgVFJVRSwgRkFMU0UpLCBUUlVFKTsKKyAgfQorICBpZihoYW5BcHBlYXJzKSB7CisgICAgLy8gdGhlcmUgYXJlIEhhbiBjaGFyYWN0ZXJzLiBUaGlzIGlzIGEgaHVnZSBibG9jay4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzIHRvIGp1c3Qgc29ydCBpdCwgY29tcGFyZSB0byBlbXB0eQorICAgIC8vIGFuZCBzcGl0IGl0IG91dC4gQW55dGhpbmcgZWxzZSB3b3VsZCBiZSBhIHN1aWNpZGUgKGFjdHVhbGx5IGlzIC0ga2VybmVsIGp1c3Qga2lsbHMgeW91IDopCisgICAgbG9nZ2VyLT5sb2coIlxuKioqIERldGVjdGluZyBvcmRlciBmb3IgSGFuXG4iKTsKKyAgICBkZWJ1Zy0+b2ZmKCk7CisgICAgc2V0TG9jYWxlKGdMb2NhbGUsIHN0YXR1cyk7CisgICAgZXhlbXBsYXJVU2V0LmNsZWFyKCk7CisgICAgZXhlbXBsYXJVU2V0LmFwcGx5SW50UHJvcGVydHlWYWx1ZShVQ0hBUl9TQ1JJUFQsIFVTQ1JJUFRfSEFOLCBzdGF0dXMpOworICAgIGV4ZW1wbGFyVVNldCA9IGZsYXR0ZW4oZXhlbXBsYXJVU2V0LCBzdGF0dXMpOworICAgIFNvcnRlZExpbmVzIGhhbihleGVtcGxhclVTZXQsIGdFeGNsdWRlU2V0LCBwcm9iZSwgbG9nZ2VyLCBkZWJ1Zyk7CisgICAgaGFuLnNvcnQoVFJVRSwgVFJVRSk7CisgICAgaGFuLmNsYXNzaWZ5UmVwZXJ0b2lyZSgpOworICAgIGhhbi5nZXRCb3VuZHMoc3RhdHVzKTsKKyAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZygiSGFuIG9yZGVyaW5nOjxicj5cbiIpOworICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKGhhbi50b091dHB1dChvdXRwdXRGb3JtYXQsIG15TG9jLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSwgTlVMTCwgVFJVRSwgRkFMU0UsIEZBTFNFKSwgVFJVRSk7CisgICAgYnVuZGxlLT5sb2coaGFuLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgbXlMb2MsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lLCBOVUxMLCBUUlVFLCBGQUxTRSwgRkFMU0UpLCBUUlVFKTsKKyAgfQorICB1Y29sX2Nsb3NlKGdDb2wpOworfQorCit2b2lkCitwcm9jZXNzTG9jYWxlKGNvbnN0IGNoYXIgKmxvY2FsZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIHNldExvY2FsZShsb2NhbGUsIHN0YXR1cyk7CisgIHNldEZpbGVzKGxvY2FsZSwgc3RhdHVzKTsKKyAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICByZXR1cm47CisgIH0KKworICBkZWJ1Zy0+bG9nKCJMb2NhbGUgJXMgKExDSUQ6JTA2WCwgdW5peDolcylcbiIsIGxvY2FsZSwgZ1dpbkxDSUQsIHNldGxvY2FsZShMQ19DT0xMQVRFLCBOVUxMKSk7CisgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCIvLyBPcmRlcmluZyBmb3IgbG9jYWxlICVzIChMQ0lEOiUwNlgsIHVuaXg6JXMpLCBwbGF0Zm9ybSAlcyByZWZlcmVuY2UgJXM8YnI+XG4iLCAKKyAgICBsb2NhbGUsIGdXaW5MQ0lELCBzZXRsb2NhbGUoTENfQ09MTEFURSwgTlVMTCksIAorICAgIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lLCBwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSk7CisgIGlmKG9wdGlvbnNbUkVGRVJFTkNFXS5kb2VzT2NjdXIpIHsKKyAgICByZWZlcmVuY2VCdW5kbGUtPmxvZygiLy8gUmVmZXJlbmNlIGZvciBsb2NhbGUgJXMgKExDSUQ6JTA2WCwgdW5peDolcyksIHBsYXRmb3JtICVzIHJlZmVyZW5jZSAlczxicj5cbiIsIAorICAgICAgbG9jYWxlLCBnV2luTENJRCwgc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpLCAKKyAgICAgIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lLCBwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSk7CisgIH0KKworCisgIHByb2Nlc3NDb2xsYXRvcihnQ29sLCBzdGF0dXMpOworfQorCisKKworVUJvb2wgCitoYXNDb2xsYXRpb25FbGVtZW50cyhjb25zdCBjaGFyICpsb2NOYW1lKSB7CisKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIFVSZXNvdXJjZUJ1bmRsZSAqQ29sRWwgPSBOVUxMOworCisgIFVSZXNvdXJjZUJ1bmRsZSAqbG9jID0gdXJlc19vcGVuKE5VTEwsIGxvY05hbWUsICZzdGF0dXMpOzsKKworICBpZihVX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBDb2xFbCA9IHVyZXNfZ2V0QnlLZXkobG9jLCAiQ29sbGF0aW9uRWxlbWVudHMiLCBDb2xFbCwgJnN0YXR1cyk7CisgICAgaWYoc3RhdHVzID09IFVfWkVST19FUlJPUikgeyAvKiBkbyB0aGUgdGVzdCAtIHRoZXJlIGFyZSByZWFsIGVsZW1lbnRzICovCisgICAgICB1cmVzX2Nsb3NlKENvbEVsKTsKKyAgICAgIHVyZXNfY2xvc2UobG9jKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICB1cmVzX2Nsb3NlKENvbEVsKTsKKyAgICB1cmVzX2Nsb3NlKGxvYyk7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsCisgICAgIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGxvZ2dlciA9IG5ldyBVUHJpbnRlcihzdGRvdXQsICJlbiIsICJsYXRpbi0xIik7CisgIGRlYnVnID0gIG5ldyBVUHJpbnRlcihzdGRlcnIsICJlbiIsICJsYXRpbi0xIik7CisKKy8qCisgIFVTZXQgKndzcCA9IHVwcnZfb3BlblJ1bGVXaGl0ZVNwYWNlU2V0KCZzdGF0dXMpOworICB1c2V0X2FkZCh3c3AsIDB4MDA0MSk7CisgIHVzZXRfcmVtb3ZlKHdzcCwgMHgwMDQxKTsKKyAgVW5pY29kZVN0cmluZyBwYXQ7CisgICgoVW5pY29kZVNldCAqKXdzcCktPnRvUGF0dGVybihwYXQsIFRSVUUpOworICBwYXQuc2V0Q2hhckF0KHBhdC5sZW5ndGgoKSwgMCk7CisgIGVzY2FwZVN0cmluZyhwYXQuZ2V0QnVmZmVyKCksIHBhdC5sZW5ndGgoKSwgbG9nKTsKKyAgdV9mZmx1c2gobG9nKTsKKyovCisKKyAgcHJvY2Vzc0FyZ3MoYXJnYywgYXJndiwgc3RhdHVzKTsKKyAgaW50MzJfdCBpID0gMDsKKworCisKKyAgaWYoVV9GQUlMVVJFKHN0YXR1cykgfHwgZ1BsYXRmb3JtTm8gPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHV0ZjhjbnYgPSB1Y252X29wZW4oInV0Zi04IiwgJnN0YXR1cyk7ICAgIC8vIHdlIGFyZSBqdXN0IGRvaW5nIFVURi04IGxvY2FsZXMgZm9yIG5vdy4KKyAgZ1VDQSA9IHVjb2xfb3Blbigicm9vdCIsICZzdGF0dXMpOworCisgIGlmKG9wdGlvbnNbSU5URVJBQ1RJVkVdLmRvZXNPY2N1cikgeworICAgIHByb2Nlc3NJbnRlcmFjdGl2ZSgpOworICB9IGVsc2UgeworICAgIGlmKGdSdWxlc1N0ZGluKSB7CisgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICAgIFVDaGFyIHJ1bGVCdWZmZXJbMTYzODRdOworICAgICAgVUNoYXIgKnJ1bGVzID0gcnVsZUJ1ZmZlcjsKKyAgICAgIGludDMyX3QgbWF4UnVsZUxlbiA9IDE2Mzg0OworICAgICAgaW50MzJfdCByTGVuID0gMDsKKyAgICAgIHdoaWxlKGZnZXRzKGJ1ZmZlciwgMTAyNCwgc3RkaW4pKSB7CisgICAgICAgIGlmKGJ1ZmZlclswXSAhPSAnLycgJiYgYnVmZmVyWzFdICE9ICcvJykgeworICAgICAgICAgIHJMZW4gPSB1X3VuZXNjYXBlKGJ1ZmZlciwgcnVsZXMsIG1heFJ1bGVMZW4pOworICAgICAgICAgIHJ1bGVzICs9IHJMZW47CisgICAgICAgICAgbWF4UnVsZUxlbiAtPSByTGVuOworICAgICAgICB9CisgICAgICB9CisgICAgICBVUGFyc2VFcnJvciBwYXJzZUVycm9yOworICAgICAgLy9lc2NhcGVTdHJpbmcocnVsZUJ1ZmZlciwgcnVsZXMtcnVsZUJ1ZmZlciwgbG9nKTsvLworICAgICAgZGVidWctPmxvZygiJVVcbiIsIHJ1bGVCdWZmZXIpOworCisgICAgICBVQ29sbGF0b3IgKmNvbCA9IHVjb2xfb3BlblJ1bGVzKHJ1bGVCdWZmZXIsIHJ1bGVzLXJ1bGVCdWZmZXIsIFVDT0xfREVGQVVMVCwgVUNPTF9ERUZBVUxULCAmcGFyc2VFcnJvciwgJnN0YXR1cyk7CisgICAgICBpZihVX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICBzZXRGaWxlcygic3RkaW5SdWxlcyIsIHN0YXR1cyk7CisgICAgICAgIHByb2Nlc3NDb2xsYXRvcihjb2wsIHN0YXR1cyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBsb2dnZXItPmxvZygiRXJyb3IgJXNcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworICAgICAgfQorICAgIH0gZWxzZSBpZihvcHRpb25zW0RJRkZdLmRvZXNPY2N1cikgeworICAgICAgbG9nZ2VyLT5sb2coIkRpZmZpbmcgdHdvIGR1bXBzXG4iKTsKKyAgICAgIC8vIG11c3QgaGF2ZSBsb2NhbGUsIHBsYXRmb3JtIGFuZCByZWYgaW4gb3JkZXIgdG8gYmUgCisgICAgICAvLyBhYmxlIHRvIGZpbmQgZHVtcCBmaWxlcy4KKyAgICAgIHNldEZpbGVzKGdMb2NhbGUsIHN0YXR1cyk7CisgIAorICAgICAgaWYoZlRhaWxvcmluZ0R1bXAgJiYgZkRlZmF1bHREdW1wKSB7CisJICAgIFNvcnRlZExpbmVzIHRhaWxvcmluZyhmVGFpbG9yaW5nRHVtcCwgbG9nZ2VyLCBkZWJ1Zywgc3RhdHVzKTsKKwkgICAgbG9nZ2VyLT5sb2codGFpbG9yaW5nLnRvU3RyaW5nKFRSVUUpLCBUUlVFKTsKKwkgICAgU29ydGVkTGluZXMgcmVmZXJlbmNlKGZEZWZhdWx0RHVtcCwgbG9nZ2VyLCBkZWJ1Zywgc3RhdHVzKTsKKwkgICAgbG9nZ2VyLT5sb2cocmVmZXJlbmNlLnRvU3RyaW5nKFRSVUUpLCBUUlVFKTsKKwkgICAgdGFpbG9yaW5nLnJlZHVjZURpZmZlcmVuY2UocmVmZXJlbmNlKTsKKwkgICAgbG9nZ2VyLT5sb2coIlxuKioqIEZpbmFsIHJ1bGVzXG5cbiIpOworCSAgICBsb2dnZXItPmxvZyh0YWlsb3JpbmcudG9QcmV0dHlTdHJpbmcoVFJVRSksIFRSVUUpOworCSAgICAvL3Jlc3VsdC0+bG9nKGxpbmVzLnRvUHJldHR5U3RyaW5nKFRSVUUpLCBUUlVFKTsKKwkgICAgYnVuZGxlLT5sb2codGFpbG9yaW5nLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgZ0xvY2FsZSwgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lLCBUUlVFLCBUUlVFLCBGQUxTRSksIFRSVUUpOworICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgIGlmKGdMb2NhbGUpIHsKKyAgICAgICAgcHJvY2Vzc0xvY2FsZShnTG9jYWxlLCBzdGF0dXMpOworICAgICAgfSBlbHNlIGlmKGdMb2NhbGVObykgeworICAgICAgICBmb3IoaSA9IDA7IGkgPCBnTG9jYWxlTm87IGkrKykgeworICAgICAgICAgIHByb2Nlc3NMb2NhbGUoZ0xvY2FsZXNbaV0sIHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7IC8vIGRvIHRoZSBsb29wIHRocm91Z2ggYWxsIHRoZSBsb2NhbGVzCisgICAgICAgIGludDMyX3Qgbm9PZkxvYyA9IHVsb2NfY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgY29uc3QgY2hhciAqbG9jTmFtZSA9IE5VTEw7CisgICAgICAgIGZvcihpID0gMDsgaTxub09mTG9jOyBpKyspIHsKKyAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgbG9jTmFtZSA9IHVsb2NfZ2V0QXZhaWxhYmxlKGkpOworICAgICAgICAgIGlmKGhhc0NvbGxhdGlvbkVsZW1lbnRzKGxvY05hbWUpKSB7CisgICAgICAgICAgICBwcm9jZXNzTG9jYWxlKGxvY05hbWUsIHN0YXR1cyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKworICB1Y29sX2Nsb3NlKGdVQ0EpOworICB1Y252X2Nsb3NlKHV0ZjhjbnYpOworCisgIGRlbGV0ZSBsb2dnZXI7CisgIGRlbGV0ZSBkZWJ1ZzsKKyAgaWYodGFpbG9yaW5nQnVuZGxlKSB7CisgICAgZGVsZXRlIHRhaWxvcmluZ0J1bmRsZTsKKyAgfQorICBpZihyZWZlcmVuY2VCdW5kbGUpIHsKKyAgICBkZWxldGUgcmVmZXJlbmNlQnVuZGxlOworICB9CisgIGlmKGJ1bmRsZSkgeworICAgIGRlbGV0ZSBidW5kbGU7CisgIH0KKyAgaWYoZlRhaWxvcmluZ0R1bXApIHsKKyAgICBmY2xvc2UoZlRhaWxvcmluZ0R1bXApOworICB9CisgIGlmKGZEZWZhdWx0RHVtcCkgeworICAgIGZjbG9zZShmRGVmYXVsdER1bXApOworICB9CisgIHJldHVybiAwOworfQorCisKK1VuaWNvZGVTdHJpbmcgcHJvcGVydHlBbmRWYWx1ZU5hbWUoVVByb3BlcnR5IHByb3AsIGludDMyX3QgaSkgeworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgcmVzdWx0LmFwcGVuZCh1X2dldFByb3BlcnR5TmFtZShwcm9wLCBVX0xPTkdfUFJPUEVSVFlfTkFNRSkpOworICByZXN1bHQuYXBwZW5kKCI9Iik7CisgIHJlc3VsdC5hcHBlbmQodV9nZXRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCBpLCBVX0xPTkdfUFJPUEVSVFlfTkFNRSkpOworCisgICAgLy8rICIoIiArIHByb3AgKyAiLCIgKyBpICsgIikgIjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkIGdlbmVyYXRlUmVwZXJ0b2lyZShjb25zdCBjaGFyICpsb2NhbGUsIFVuaWNvZGVTZXQgJnJlcCwgVUJvb2wgJmhhbkFwcGVhcnMsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICAgIFVuaWNvZGVTdHJpbmcgZGlzcE5hbWU7CisgICAgZGVidWctPmxvZygiR2V0dGluZyByZXBlcnRvaXJlIGZvciAlc1xuIiwgbG9jYWxlKTsKKyAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZygiLy8gU2NyaXB0cyBpbiByZXBlcnRvaXJlOiAiKTsKKyAgICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB7CisgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZygiLy8gU2NyaXB0cyBpbiByZXBlcnRvaXJlOiAiKTsKKyAgICB9CisJcmVwLmNsZWFyKCk7CisgICAgVW5pY29kZVNldCBkZWx0YTsKKyAgICAKKyAgICBVU2NyaXB0Q29kZSBzY3JpcHRbMjU2XTsKKyAgICBpbnQzMl90IGkgPSAwOworICAgIC8vIG5vdyBhZGQgdGhlIHNjcmlwdHMgZm9yIHRoZSBsb2NhbGUKKyAgICBVUHJvcGVydHkgcHJvcCA9IFVDSEFSX1NDUklQVDsKKwlpbnQzMl90IHNjcmlwdExlbmd0aCA9IHVzY3JpcHRfZ2V0Q29kZShsb2NhbGUsIHNjcmlwdCwgMjU2LCAmc3RhdHVzKTsKKyAgICBpZihzY3JpcHRMZW5ndGgpIHsKKwkgIGZvciAoaSA9IDA7IGkgPCBzY3JpcHRMZW5ndGg7ICsraSkgeworICAgICAgICBpZihzY3JpcHRbaV0gPT0gVVNDUklQVF9IQU4pIHsKKyAgICAgICAgICBoYW5BcHBlYXJzID0gVFJVRTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkZWx0YS5hcHBseUludFByb3BlcnR5VmFsdWUocHJvcCwgc2NyaXB0W2ldLCBzdGF0dXMpOworICAgICAgICBkZWJ1Zy0+bG9nKCJBZGRpbmcgIik7CisgICAgICAgIGRlYnVnLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgc2NyaXB0W2ldKSwgVFJVRSk7CisgICAgICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCIvLyAiKTsKKyAgICAgICAgdGFpbG9yaW5nQnVuZGxlLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgc2NyaXB0W2ldKSwgVFJVRSk7CisgICAgICAgIGlmKG9wdGlvbnNbUkVGRVJFTkNFXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZygiLy8gIik7CisgICAgICAgICAgcmVmZXJlbmNlQnVuZGxlLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgc2NyaXB0W2ldKSwgVFJVRSk7CisgICAgICAgIH0KKwkJcmVwLmFkZEFsbChkZWx0YSk7CisJICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGRlbHRhLmFwcGx5SW50UHJvcGVydHlWYWx1ZShVQ0hBUl9TQ1JJUFQsIFVTQ1JJUFRfTEFUSU4sIHN0YXR1cyk7CisgICAgICByZXAuYWRkQWxsKGRlbHRhKTsKKyAgICB9CisgICAgCisgICAgLy8gbm93IHNlZSB3aGljaCBibG9ja3MgdGhvc2Ugb3ZlcmxhcCwgYW5kIGFkZAorICAgIHByb3AgPSBVQ0hBUl9CTE9DSzsKKyAgICBpbnQzMl90IG1pbiA9IHVfZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShwcm9wKTsKKyAgICBpbnQzMl90IG1heCA9IHVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZShwcm9wKTsKKyAgICBVbmljb2RlU2V0IGNoZWNrRGVsdGE7CisgICAgZm9yIChpID0gbWluOyBpIDw9IG1heDsgKytpKSB7CisgICAgICAgIC8vIHNraXAgY2VydGFpbiBibG9ja3MKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHVfZ2V0UHJvcGVydHlWYWx1ZU5hbWUocHJvcCwgaSwgVV9MT05HX1BST1BFUlRZX05BTUUpOworICAgICAgICBpZiAoc3RyY21wKG5hbWUsICJTdXBlcnNjcmlwdHNfYW5kX1N1YnNjcmlwdHMiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcChuYW1lLCAiTGV0dGVybGlrZV9TeW1ib2xzIikgPT0gMAorICAgICAgICB8fCBzdHJjbXAobmFtZSwgIkFscGhhYmV0aWNfUHJlc2VudGF0aW9uX0Zvcm1zIikgPT0gMAorICAgICAgICB8fCBzdHJjbXAobmFtZSwgIkhhbGZ3aWR0aF9hbmRfRnVsbHdpZHRoX0Zvcm1zIikgPT0gMCkgY29udGludWU7CisKKyAgICAgICAgZGVsdGEuYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKHByb3AsIGksIHN0YXR1cykucmVtb3ZlQWxsKFVOQVNTSUdORUQpOworICAgICAgICBpZiAoIXJlcC5jb250YWluc1NvbWUoZGVsdGEpKSBjb250aW51ZTsKKyAgICAgICAgaWYgKHJlcC5jb250YWluc0FsbChkZWx0YSkpIGNvbnRpbnVlOyAvLyBqdXN0IHRvIHNlZSB3aGF0IHdlIGFyZSBhZGRpbmcKKyAgICAgICAgZGVidWctPmxvZygiQWRkaW5nICIpOworICAgICAgICBkZWJ1Zy0+bG9nKHByb3BlcnR5QW5kVmFsdWVOYW1lKHByb3AsIGkpLCBUUlVFKTsgICAgICAgICAgICAgICAgCisgICAgICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCIvLyAiKTsKKyAgICAgICAgdGFpbG9yaW5nQnVuZGxlLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgaSksIFRSVUUpOworICAgICAgICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB7CisgICAgICAgICAgcmVmZXJlbmNlQnVuZGxlLT5sb2coIi8vICIpOworICAgICAgICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKHByb3BlcnR5QW5kVmFsdWVOYW1lKHByb3AsIGkpLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICByZXAuYWRkQWxsKGRlbHRhKTsKKyAgICB9CisgICAgCisgICAgLy8gYWRkIEFTQ0lJIGFuZCBnZW5lcmFsIGFjY2VudHMKKyAgICByZXAuYWRkQWxsKEdFTkVSQUxfQUNDRU5UUykuYWRkQWxsKEFTQ0lJX0JBU0UpOworICAgIHJlcC5yZW1vdmVBbGwoQ09OVFJPTCk7CisgICAgLy9kZWx0YS5hcHBseUludFByb3BlcnR5VmFsdWUoVUNIQVJfU0NSSVBULCBVU0NSSVBUX0hBTiwgc3RhdHVzKTsKKyAgICAvL3JlcC5yZW1vdmVBbGwoZGVsdGEpOworCisgICAgLy8gbm93IGFkZCB0aGUgZXhlbXBsYXIgY2hhcmFjdGVycworICAgIC8vIGNhbid0IGdldCBhdCB0aGVtIGZyb20gSmF2YSByaWdodCBub3cKKyAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZygiPGJyPlxuIik7CisgICAgaWYob3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgeworICAgICAgcmVmZXJlbmNlQnVuZGxlLT5sb2coIjxicj5cbiIpOworICAgIH0KK30KKworVW5pY29kZVNldCBmbGF0dGVuKGNvbnN0IFVuaWNvZGVTZXQgJnNvdXJjZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgICAgVW5pY29kZVNldCByZXN1bHQ7CisgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0KHNvdXJjZSk7CisgICAgVW5pY29kZVN0cmluZyBpdGVtLCBpdGVtTkZLRCwgdG9Ob3JtYWxpemU7CisgICAgd2hpbGUgKGl0Lm5leHQoKSkgeworICAgICAgICAvLyB3b3VsZCBiZSBuaWNlciBpZiBVbmljb2RlU2V0SXRlcmF0b3IgaGFkIGEgZ2V0U3RyaW5nIGZ1bmN0aW9uCisgICAgICAgIGlmIChpdC5pc1N0cmluZygpKSB7CisgICAgICAgICAgTm9ybWFsaXplcjo6bm9ybWFsaXplKGl0LmdldFN0cmluZygpLCBVTk9STV9ORkQsIDAsIGl0ZW0sIHN0YXR1cyk7CisgICAgICAgICAgTm9ybWFsaXplcjo6bm9ybWFsaXplKGl0LmdldFN0cmluZygpLCBVTk9STV9ORktELCAwLCBpdGVtTkZLRCwgc3RhdHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0b05vcm1hbGl6ZS5zZXRUbyhpdC5nZXRDb2RlcG9pbnQoKSk7CisgICAgICAgICAgTm9ybWFsaXplcjo6bm9ybWFsaXplKHRvTm9ybWFsaXplLCBVTk9STV9ORkQsIDAsIGl0ZW0sIHN0YXR1cyk7CisgICAgICAgICAgTm9ybWFsaXplcjo6bm9ybWFsaXplKHRvTm9ybWFsaXplLCBVTk9STV9ORktELCAwLCBpdGVtTkZLRCwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYWRkQWxsKGl0ZW0pOworICAgICAgICByZXN1bHQuYWRkQWxsKGl0ZW1ORktEKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkIHRlc3RXaW4oU3RyZW5ndGhQcm9iZSAmcHJvYmUsIFVFcnJvckNvZGUgJnN0YXR1cykgCit7CisgIFVuaWNvZGVTZXQgdHJhaWxpbmdzKFVuaWNvZGVTdHJpbmcoIltcXHVGRTdEXFx1RkU3Q1xcdTMwRkRcXHVGRjcwXFx1MzBGQ1xcdTMwOURcXHUzMDMyXFx1MzAzMVxcdTMwMDVcXHUwNjUxXSIpLCBzdGF0dXMpOworICBjaGFyIGludENoYXJbXSA9ICJcXHVGRTdEXFx1RkU3Q1xcdTMwRkRcXHVGRjcwXFx1MzBGQ1xcdTMwOURcXHUzMDMyXFx1MzAzMVxcdTMwMDVcXHUwNjUxIjsKKyAgVUNoYXIgaW50ZXJlc3RpbmdbMjU2XTsKKyAgaW50MzJfdCBpbnRMZW4gPSB1X3VuZXNjYXBlKGludENoYXIsIGludGVyZXN0aW5nLCAyNTYpOworICBVQ2hhciBpID0gMDsKKyAgVUNoYXIgaiA9IDAsICBrID0gMDsKKyAgaW50MzJfdCBjb3VudDsKKyAgTGluZSBteUNoLCBjb21ibywgdHJpYWwsIGludGVyLCBrTGluZTsKKyAgZm9yKGkgPSAwOyBpIDwgaW50TGVuOyBpKyspIHsKKyAgICBpbnRlci5zZXRUbyhpbnRlcmVzdGluZ1tpXSk7CisgICAgbG9nZ2VyLT5sb2coaW50ZXIudG9TdHJpbmcoVFJVRSksIFRSVUUpOworICAgIGxvZ2dlci0+bG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICBmb3IoaiA9IDA7IGogPCAweEZGRkY7IGorKykgeworICAgICAgbXlDaC5zZXRUbyhqKTsKKyAgICAgIGlmKHByb2JlLmRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKG15Q2gpID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgbG9nZ2VyLT5sb2cobXlDaC50b1N0cmluZyhUUlVFKSk7CisgICAgICBjb21iby5zZXRUbyhqKTsKKyAgICAgIGNvbWJvLmFwcGVuZChpbnRlcmVzdGluZ1tpXSk7CisgICAgICBjb3VudCA9IDA7CisgICAgICBmb3IoayA9IDA7IGsgPCAweEZGRkY7IGsrKykgeworICAgICAgICBrTGluZS5zZXRUbyhrKTsKKyAgICAgICAgdHJpYWwuc2V0VG8oaik7CisgICAgICAgIHRyaWFsLmFwcGVuZChrKTsKKyAgICAgICAgaWYocHJvYmUuY29tcGFyZShrTGluZSwgaW50ZXIpIDwgMCkgeworICAgICAgICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwsIGNvbWJvKSA+PSAwKSB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgbG9nZ2VyLT5sb2coIiVpICVpXG4iLCBjb3VudCwgY291bnQpOworICAgIH0KKyAgfQorfQorCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9jcmVhdGVDb21wYXJpc29uVGFibGVzLnBsIGIvY29scHJvYmUvY3JlYXRlQ29tcGFyaXNvblRhYmxlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOGY2YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvY3JlYXRlQ29tcGFyaXNvblRhYmxlcy5wbApAQCAtMCwwICsxLDE2NCBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OworCisKK215ICRsb2NhbGUgPSAkQVJHVlswXTsKKworCitteSAkbG9uZ19uYW1lID0gYC9ob21lL3dlaXYvc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvbG9uZ25hbWUgJGxvY2FsZWA7CitteSAkcGFnZVRpdGxlID0gJGxvY2FsZS4iX2NvbGxhdGlvbiI7CitteSAkZmlsZW5hbWUgPSAkcGFnZVRpdGxlLiIuaHRtbCI7CisKK29wZW4gVEFCTEUsICI+JGZpbGVuYW1lIjsKKworCitwcmludCBUQUJMRSA8PCJFbmRPZlRlbXBsYXRlIjsKKzxodG1sPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT4kcGFnZVRpdGxlPC90aXRsZT4KKzxzdHlsZT4KKyAgICAgICAgIDwhLS0KKyAgICAgICAgIHRhYmxlICAgICAgICB7IGJvcmRlci1zcGFjaW5nOiAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgCisgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9Cit0ZCwgdGggICAgICAgeyB3aWR0aDogMTAlOyBib3JkZXItc3BhY2luZzogMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgY29sb3I6IGJsYWNrOyAKKyAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KKy0tPgorICAgICA8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KKworPHA+PGI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkNvbGxhdGlvbjo8L2ZvbnQ+ICRsb2NhbGUgKCRsb25nX25hbWUpIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jZ2ktYmluL2ljdS9seC9lbi8/Xz0kbG9jYWxlIj5EZW1vPC9hPiwgCisKKzxhIGhyZWY9Ii4uL2FsbF9kaWZmX3htbC9jb21wYXJpc29uX2NoYXJ0cy5odG1sIj5Db3ZlciAKK1BhZ2U8L2E+LCA8YSBocmVmPSIuLi9hbGxfZGlmZl94bWwvaW5kZXguaHRtbCI+SW5kZXg8L2E+PC9iPjwvcD4KKzx0YWJsZT4KKyAgPHRyPgorRW5kT2ZUZW1wbGF0ZQorCitteSAkZGlyQ29tbW9uID0gImNvbW1vbiI7CitteSAkcmVmQ29tbW9uID0gJGRpckNvbW1vbi4iL1VDQVJ1bGVzLnR4dCI7CitteSAkbmFtZUNvbW1vbiA9ICRkaXJDb21tb24uIi8iLiRsb2NhbGUuIl9jb2xsYXRpb24uaHRtbCI7CitteSAkY29sb3JDb21tb24gPSAiI0FEOTg5RCI7CisKK215ICRsb2M7CisKK2lmKCEoLWUgJG5hbWVDb21tb24pKSB7CisgICRsb2NhbGUgPX4gL18vOworICAkbG9jID0gJGA7CisgICRuYW1lQ29tbW9uID0gIiRkaXJDb21tb24vJGxvYyIuIl9jb2xsYXRpb24uaHRtbCI7Cit9CitwcmludCBUQUJMRSAiICAgIDx0aCBiZ2NvbG9yPVwiJGNvbG9yQ29tbW9uXCI+Q09NTU9OICg8YSBocmVmPVwiJHJlZkNvbW1vblwiPlVDQTwvYT4gPGEgaHJlZj1cIi4uLyRkaXJDb21tb24veG1sLyRsb2NhbGUueG1sXCI+eG1sPC9hPik8L3RoPlxuIjsKKworbXkgJGRpckxpbnV4ID0gImxpbnV4IjsKK215ICRyZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZS4iLnV0ZjhfZGVmYXVsdF9yYXcuaHRtbCI7CitteSAkcmF3TGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuIi51dGY4X3Jhdy5odG1sIjsKK215ICRkZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZTsKK215ICRuYW1lTGludXggPSAiJGRpckxpbnV4LyRsb2NhbGUiLiIudXRmOF9jb2xsYXRpb24uaHRtbCI7CitteSAkY29sb3JMaW51eCA9ICIjMTE5MUYxIjsKKworcHJpbnQgVEFCTEUgIiAgICA8dGggYmdjb2xvcj1cIiRjb2xvckxpbnV4XCI+TElOVVggKCI7CitpZiAoISgtZSAkbmFtZUxpbnV4KSkgeworI3RyeSB0aGUgdmFyaWFudCB0aGF0IGhhcyBAZXVybyBzdHVjayBpbgorICAkbmFtZUxpbnV4ID0gIiRkaXJMaW51eC8kbG9jYWxlIi4nLnV0ZjhAZXVyb19jb2xsYXRpb24uaHRtbCc7CisgIGlmKC1lICRuYW1lTGludXgpIHsKKyAgICAkcmVmTGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuJy51dGY4QGV1cm9fZGVmYXVsdF9yYXcuaHRtbCc7CisgICAgJHJhd0xpbnV4ID0gJGRpckxpbnV4LiIvIi4kbG9jYWxlLicudXRmOEBldXJvX3Jhdy5odG1sJzsKKyAgfQorfQoraWYgKC1lICRuYW1lTGludXgpIHsKKyAgICBwcmludCBUQUJMRSAiPGEgaHJlZj1cIiRyYXdMaW51eFwiPk9yZGVyaW5nPC9hPiA8YSBocmVmPVwiJGRlZkxpbnV4XCI+RGVmaW5pdGlvbjwvYT4gPGEgaHJlZj1cIiRyZWZMaW51eFwiPmJhc2U8L2E+IjsKK30gCisKK3ByaW50IFRBQkxFICIgPGEgaHJlZj1cIi4uLyRkaXJMaW51eC94bWwvJGxvY2FsZS54bWxcIj54bWw8L2E+KTwvdGg+XG4iOworCitteSAkZGlyV2luID0gIndpbnhwIjsKK215ICRyZWZXaW4gPSAkZGlyV2luLiIvIi4kbG9jYWxlLiJfZGVmYXVsdF9yYXcuaHRtbCI7CitteSAkcmF3V2luID0gJGRpcldpbi4iLyIuJGxvY2FsZS4iX3Jhdy5odG1sIjsKK215ICRuYW1lV2luID0gIiRkaXJXaW4vJGxvY2FsZSIuIl9jb2xsYXRpb24uaHRtbCI7CitteSAkY29sb3JXaW4gPSAiIzk4RkI5OCI7CisKK3ByaW50IFRBQkxFICIgICAgPHRoIGJnY29sb3I9XCIkY29sb3JXaW5cIj5XSU5ET1dTICgiOyAKK2lmICgtZSAkbmFtZVdpbikgeworICAgcHJpbnQgVEFCTEUgIjxhIGhyZWY9XCIkcmF3V2luXCI+T3JkZXJpbmc8L2E+IDxhIGhyZWY9XCIkcmVmV2luXCI+YmFzZTwvYT4gIjsKK30gCitwcmludCBUQUJMRSAiPGEgaHJlZj1cIi4uL3dpbmRvd3MveG1sLyRsb2NhbGUueG1sXCI+eG1sPC9hPik8L3RoPlxuIjsKKworcHJpbnQgVEFCTEUgIiAgPC90cj5cbiAgPHRyPiI7CisKKworcmVhZFJ1bGVzKCRuYW1lQ29tbW9uLCAiI0FEOTg5RCIsICJTYW1lIGFzIHRoZSBVQ0EuIik7CityZWFkUnVsZXMoJG5hbWVMaW51eCwgIiMxMTkxRjEiLCAiTm8gZGF0YSBhdmFpbGFibGUuIik7ICAgICAgCityZWFkUnVsZXMoJG5hbWVXaW4sICIjOThGQjk4IiwgIk5vIGRhdGEgYXZhaWxhYmxlLiIpOworCisKK3ByaW50IFRBQkxFIDw8IkVuZE9mRm9vdGVyIjsKKyAgPC90cj4KKzwvdGFibGU+CisKKzwvYm9keT4KKzwvaHRtbD4KK0VuZE9mRm9vdGVyCisKKworc3ViIHJlYWRSdWxlcyB7CisgICMgcmVhZFJ1bGVzKCRmaWxlLCAkY29sb3IpCisgIG15ICRmaWxlbmFtZSAgPSBzaGlmdDsKKyAgbXkgJGNvbG9yID0gc2hpZnQ7CisgIG15ICRjb21tZW50ID0gc2hpZnQ7CisgIG15ICRub0xpbmVzID0gMDsKKyAgbXkgJHByaW50T3V0ID0gMDsKKworICBteSAkZmlsZTsKKworICBpZigtZSAkZmlsZW5hbWUpIHsKKyAgICBvcGVuKCRmaWxlLCAiPCRmaWxlbmFtZSIpIHx8IGRpZSAic29tZXRoaW5nIHZlcnkgc3RyYW5nZSBoYXBwZW5lZFxuIjsKKyAgICBwcmludCBUQUJMRSAiPHRkIGJnY29sb3I9XCIkY29sb3JcIj5cbiI7CisgICAgd2hpbGUgKDwkZmlsZT4pIHsKKyAgICAgIGlmICgvXH1cPGJyXD4kLykgeworICAgICAgICAkcHJpbnRPdXQgPSAwOworCisgICAgICB9CisgICAgICBpZiAoJHByaW50T3V0KSB7CisgICAgICAgIHByaW50IFRBQkxFICRfOworICAgICAgICAkbm9MaW5lcysrOworICAgICAgfQorICAgICAgaWYgKC9TZXF1ZW5jZS8pIHsKKyAgICAgICAgJHByaW50T3V0ID0gMTsKKyAgICAgICAgcHJpbnQgImZvdW5kIHNlcXVlbmNlXG4iOworICAgICAgICAkbm9MaW5lcyA9IDA7CisgICAgICB9CisKKyAgICB9CisgICAgaWYgKCEkbm9MaW5lcykgeworICAgICAgcHJpbnQgVEFCTEUgIlNhbWUgb3JkZXJpbmcgYXMgYmFzZVxuIjsKKyAgICB9CisgICAgcHJpbnQgVEFCTEUgIjwvdGQ+XG4iOworICB9IGVsc2UgeworICAgIHByaW50IFRBQkxFICI8dGQgYmdjb2xvcj1cIiRjb2xvclwiPlxuJGNvbW1lbnQ8L3RkPlxuIjsKKyAgfSAgICAKK30KKworCisjIFRhc3Rpbmcgb2YgZm9vZCBwcm9kdWN0CisjIDY1MC01NzQtNDU1MSAkNTAgMSBob3VyCisKKworIyAgICAgPHRkIGJnY29sb3I9IiNBRDk4OUQiPjEuMC1hbHBoYTwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+MS4wPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj48c3BhbiB0aXRsZT0iMDA2RSB7TEFUSU4gU01BTEwgTEVUVEVSIE59Ij4mYW1wO248L3NwYW4+PGJyPgorIyAgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSI+Jm5ic3A7Jm5ic3A7Jmx0OyZuYnNwO255PC9zcGFuPjxicj4KKworIyAgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgWX0gLyAwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs9Jm5ic3A7bm55Jm5ic3A7LyZuYnNwO255PC9zcGFuPjxicj4KKyMgICAgICAgPHNwYW4gdGl0bGU9IjAwNkUgMDA1OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBDQVBJVEFMIExFVFRFUiBZfSI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0OyZsdDsmbHQ7Jm5ic3A7blk8L3NwYW4+PGJyPgorIyAgICAgPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkZGRjMzIj4xLjI8L3RkPgorCisjICAgICA8dGQgYmdjb2xvcj0iIzk4RkI5OCI+V2luZG93cyBYUDwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CmRpZmYgLS1naXQgYS9jb2xwcm9iZS9kb0NvbXBhcmlzb25UYWJsZS5wbCBiL2NvbHByb2JlL2RvQ29tcGFyaXNvblRhYmxlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhMDJlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvZG9Db21wYXJpc29uVGFibGUucGwKQEAgLTAsMCArMSwyMDkgQEAKKyMhIC91c3IvYmluL3BlcmwgLXcKKwordXNlIHN0cmljdDsKK3VzZSBJTzo6RmlsZTsKKworCitteSAkbG9jYWxlID0gJEFSR1ZbMF07CisKKworbXkgJGxvbmdfbmFtZSA9IGAvaG9tZS93ZWl2L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL2xvbmduYW1lICRsb2NhbGVgOworcHJpbnQgIkxvbmcgbmFtZSBpcyAkbG9uZ19uYW1lXG4iOworbXkgJHBhZ2VUaXRsZSA9ICRsb2NhbGUuIiBjb2xsYXRpb24iOworbXkgJGZpbGVuYW1lID0gJGxvY2FsZS4iLmh0bWwiOworCitvcGVuIFRBQkxFLCAiPiRmaWxlbmFtZSI7CisKKworcHJpbnQgVEFCTEUgPDwiRW5kT2ZUZW1wbGF0ZSI7Cis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+JHBhZ2VUaXRsZTwvdGl0bGU+Cis8c3R5bGU+CisgICAgICAgICA8IS0tCisgICAgICAgICB0YWJsZSAgICAgICAgeyBib3JkZXItc3BhY2luZzogMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7IAorICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2sgfQordGQsIHRoICAgICAgIHsgd2lkdGg6IDEwJTsgYm9yZGVyLXNwYWNpbmc6IDA7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGNvbG9yOiBibGFjazsgCisgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9CistLT4KKyAgICAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiI+CisKKzxwPjxiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5Db2xsYXRpb246PC9mb250PiAkbG9jYWxlICgkbG9uZ19uYW1lKSA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vY2dpLWJpbi9pY3UvbHgvZW4vP189JGxvY2FsZSI+RGVtbzwvYT4sIAorCis8YSBocmVmPSIuLi8uLi9jb21wYXJpc29uX2NoYXJ0cy5odG1sIj5Db3ZlciAKK1BhZ2U8L2E+LCA8YSBocmVmPSIuLi9tYWluL2luZGV4Lmh0bWwiPkxvY2FsZSBEaWZmcyBJbmRleDwvYT4sIDxhIGhyZWY9ImluZGV4Lmh0bWwiPkNvbGxhdGlvbiBEaWZmcyBJbmRleDwvYT48L2I+PC9wPgorPHRhYmxlPgorICA8dHI+CitFbmRPZlRlbXBsYXRlCisKK215ICRkaXJDb21tb24gPSAiaWN1Y29sbGF0aW9ucyI7CitteSAkcmVmQ29tbW9uID0gJGRpckNvbW1vbi4iL1VDQVJ1bGVzLnR4dCI7CitteSAkbmFtZUNvbW1vbiA9ICRkaXJDb21tb24uIi8iLiRsb2NhbGUuIl9jb2xsYXRpb24uaHRtbCI7CitteSAkY29sb3JDb21tb24gPSAiI0FEOTg5RCI7CisKK215ICRsb2MgPSAkbG9jYWxlOworCitpZighKC1lICRuYW1lQ29tbW9uKSkgeworICAkbG9jYWxlID1+IC9fLzsKKyAgJGxvYyA9ICRgOworICAkbmFtZUNvbW1vbiA9ICIkZGlyQ29tbW9uLyRsb2MiLiJfY29sbGF0aW9uLmh0bWwiOworfQorCitwcmludCAiQ29tbW9uIGlzICRuYW1lQ29tbW9uXG4iOworCitwcmludCBUQUJMRSAiICAgIDx0aCBiZ2NvbG9yPVwiJGNvbG9yQ29tbW9uXCI+Q09NTU9OICgiOworaWYoLWUgJG5hbWVDb21tb24pIHsKKyAgcHJpbnQgVEFCTEUgIjxhIGhyZWY9XCIuLi8uLi9jb21tb24vY29sbGF0aW9uLyRsb2MueG1sXCI+eG1sPC9hPiAiOworfQorcHJpbnQgVEFCTEUgIjxhIGhyZWY9XCIuLi8uLi9jb21tb24vY29sbGF0aW9uL3Jvb3QueG1sXCI+VUNBPC9hPik8L3RoPlxuIjsKKworbXkgJGRpckxpbnV4ID0gImxpbnV4Y29sbGF0aW9ucyI7CitteSAkcmVmTGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuIi51dGY4X2RlZmF1bHRfcmF3Lmh0bWwiOworbXkgJHJhd0xpbnV4ID0gJGRpckxpbnV4LiIvIi4kbG9jYWxlLiIudXRmOF9yYXcuaHRtbCI7CitteSAkZGVmTGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGU7CitteSAkbmFtZUxpbnV4ID0gIiRkaXJMaW51eC8kbG9jYWxlIi4iX2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvckxpbnV4ID0gIiMxMTkxRjEiOworCitwcmludCBUQUJMRSAiICAgIDx0aCBiZ2NvbG9yPVwiJGNvbG9yTGludXhcIj5MSU5VWCI7CitpZiAoISgtZSAkbmFtZUxpbnV4KSkgeworI3RyeSB0aGUgdmFyaWFudCB0aGF0IGhhcyBAZXVybyBzdHVjayBpbgorICAkbmFtZUxpbnV4ID0gIiRkaXJMaW51eC8kbG9jYWxlIi4nLnV0ZjhAZXVyb19jb2xsYXRpb24uaHRtbCc7CisgIGlmKC1lICRuYW1lTGludXgpIHsKKyAgICAkcmVmTGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuJy51dGY4QGV1cm9fZGVmYXVsdF9yYXcuaHRtbCc7CisgICAgJHJhd0xpbnV4ID0gJGRpckxpbnV4LiIvIi4kbG9jYWxlLicudXRmOEBldXJvX3Jhdy5odG1sJzsKKyAgfQorfQoraWYgKC1lICRuYW1lTGludXgpIHsKKyAgcHJpbnQgVEFCTEUgIiAoPGEgaHJlZj1cIi4uLy4uL2xpbnV4L2NvbGxhdGlvbi8kbG9jYWxlLnhtbFwiPnhtbDwvYT4iOworICBteSAkbGludXhCYXNlID0gJmdldEJhc2VMb2NhbGUoIiRkaXJMaW51eC9iYXNlIiwgJGxvY2FsZSk7CisgIGlmKCRsaW51eEJhc2UgbmUgIiIpIHsKKyAgICBwcmludCBUQUJMRSAiIDxhIGhyZWY9XCIuLi8uLi9saW51eC9jb2xsYXRpb24vJGxpbnV4QmFzZS54bWxcIj5CYXNlICgkbGludXhCYXNlKTwvYT4iOworICB9CisgIHByaW50IFRBQkxFICIpIjsKK30gCitwcmludCBUQUJMRSAiPC90aD5cbiI7CisKKworbXkgJGRpcldpbiA9ICJ3Mmtjb2xsYXRpb25zIjsKK215ICRyZWZXaW4gPSAkZGlyV2luLiIvIi4kbG9jYWxlLiJfZGVmYXVsdF9yYXcuaHRtbCI7CitteSAkcmF3V2luID0gJGRpcldpbi4iLyIuJGxvY2FsZS4iX3Jhdy5odG1sIjsKK215ICRuYW1lV2luID0gIiRkaXJXaW4vJGxvY2FsZSIuIl9jb2xsYXRpb24uaHRtbCI7CitteSAkY29sb3JXaW4gPSAiIzk4RkI5OCI7CiskbG9jID0gJGxvY2FsZTsKKyN0cnkgZmFsbGJhY2sgZm9yIHdpbmRvd3MKK3ByaW50IFRBQkxFICIgICAgPHRoIGJnY29sb3I9XCIkY29sb3JXaW5cIj5XSU5ET1dTIjsgCitpZighKC1lICRuYW1lV2luKSkgeworICAkbG9jYWxlID1+IC9fLzsKKyAgJGxvYyA9ICRgOworICAkbmFtZVdpbiA9ICIkZGlyV2luLyRsb2MiLiJfY29sbGF0aW9uLmh0bWwiOworfQorCitwcmludCAiV2luZG93cyBsb2MgaXMgJGxvY1xuIjsKKworaWYgKC1lICRuYW1lV2luKSB7CisgIHByaW50IFRBQkxFICIgKDxhIGhyZWY9XCIuLi8uLi93aW5kb3dzL2NvbGxhdGlvbi8kbG9jLnhtbFwiPnhtbDwvYT4iOworICBteSAkd2luQmFzZSA9ICZnZXRCYXNlTG9jYWxlKCIkZGlyV2luL2Jhc2UiLCAkbG9jYWxlKTsKKyAgaWYoJHdpbkJhc2UgbmUgIiIpIHsKKyAgICBwcmludCBUQUJMRSAiPGEgaHJlZj1cIi4uLy4uL3dpbmRvd3MvY29sbGF0aW9uLyR3aW5CYXNlLnhtbFwiPmJhc2UgKCR3aW5CYXNlKTwvYT4iOworICB9CisgIHByaW50IFRBQkxFICIpIjsKK30gCitwcmludCBUQUJMRSAiPC90aD5cbiI7CitwcmludCBUQUJMRSAiICA8L3RyPlxuICA8dHI+IjsKKworCityZWFkUnVsZXMoJG5hbWVDb21tb24sICIjQUQ5ODlEIiwgIlNhbWUgYXMgdGhlIFVDQS4iKTsKK3JlYWRSdWxlcygkbmFtZUxpbnV4LCAiIzExOTFGMSIsICJObyBkYXRhIGF2YWlsYWJsZS4iKTsgICAgICAKK3JlYWRSdWxlcygkbmFtZVdpbiwgIiM5OEZCOTgiLCAiTm8gZGF0YSBhdmFpbGFibGUuIik7CisKKworcHJpbnQgVEFCTEUgPDwiRW5kT2ZGb290ZXIiOworICA8L3RyPgorPC90YWJsZT4KKworPC9ib2R5PgorPC9odG1sPgorRW5kT2ZGb290ZXIKKworCitzdWIgcmVhZFJ1bGVzIHsKKyAgIyByZWFkUnVsZXMoJGZpbGUsICRjb2xvcikKKyAgbXkgJGZpbGVuYW1lICA9IHNoaWZ0OworICBteSAkY29sb3IgPSBzaGlmdDsKKyAgbXkgJGNvbW1lbnQgPSBzaGlmdDsKKyAgbXkgJG5vTGluZXMgPSAwOworICBteSAkcHJpbnRPdXQgPSAwOworCisgIG15ICRmaWxlOworCisgIGlmKC1lICRmaWxlbmFtZSkgeworICAgIG9wZW4oJGZpbGUsICI8JGZpbGVuYW1lIikgfHwgZGllICJzb21ldGhpbmcgdmVyeSBzdHJhbmdlIGhhcHBlbmVkXG4iOworICAgIHByaW50IFRBQkxFICI8dGQgYmdjb2xvcj1cIiRjb2xvclwiPlxuIjsKKyAgICB3aGlsZSAoPCRmaWxlPikgeworICAgICAgaWYgKC9cfVw8YnJcPiQvKSB7CisgICAgICAgICRwcmludE91dCA9IDA7CisKKyAgICAgIH0KKyAgICAgIGlmICgkcHJpbnRPdXQpIHsKKyAgICAgICAgaWYoIS9eJC8gJiYgIS8mbmJzcDs8YnI+JC8pIHsKKyAgICAgICAgICBwcmludCBUQUJMRSAkXzsKKyAgICAgICAgICAkbm9MaW5lcysrOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoL1NlcXVlbmNlLykgeworICAgICAgICAkcHJpbnRPdXQgPSAxOworICAgICAgICBwcmludCAiZm91bmQgc2VxdWVuY2VcbiI7CisgICAgICAgICRub0xpbmVzID0gMDsKKyAgICAgIH0KKworICAgIH0KKyAgICBpZiAoISRub0xpbmVzKSB7CisgICAgICBwcmludCBUQUJMRSAiU2FtZSBvcmRlcmluZyBhcyBiYXNlXG4iOworICAgIH0KKyAgICBwcmludCBUQUJMRSAiPC90ZD5cbiI7CisgIH0gZWxzZSB7CisgICAgcHJpbnQgVEFCTEUgIjx0ZCBiZ2NvbG9yPVwiJGNvbG9yXCI+XG4kY29tbWVudDwvdGQ+XG4iOworICB9ICAgIAorfQorCitzdWIgZ2V0QmFzZUxvY2FsZSgpeworICAgIG15ICRiYXNlZmlsZSA9IHNoaWZ0OworICAgIG15ICRsb2NhbGUgPSBzaGlmdDsKKyAgICBteSAkYmFzZUZIID0gSU86OkZpbGUtPm5ldygkYmFzZWZpbGUsInIiKQorICAgICAgICAgICAgb3IgZGllICAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgJGJhc2VmaWxlIGZvciByZWFkaW5nOiAkISBcbiI7CisgICAgbXkgJGJzZTsKKyAgICBteSAkbG9jOworICAgIHdoaWxlKGRlZmluZWQgKCBteSAkbGluZSA9IDwkYmFzZUZIPikpeworICAgICAgICBpZiggJGxpbmUgPX4gL1w8JGxvY2FsZVw+Lyl7CisgICAgICAgICAgICAoJGxvYywkYnNlKSA9IHNwbGl0ICgvXD4vLCAkbGluZSk7CisgICAgICAgICAgICAgJGJzZSA9fiBzL15ccytcPC8vOworICAgICAgICAgICAgIHJldHVybiAkYnNlOworICAgICAgICB9CisgICAgfQorfQorCisKKyMgVGFzdGluZyBvZiBmb29kIHByb2R1Y3QKKyMgNjUwLTU3NC00NTUxICQ1MCAxIGhvdXIKKworCisjICAgICA8dGQgYmdjb2xvcj0iI0FEOTg5RCI+MS4wLWFscGhhPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj4xLjA8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPjxzcGFuIHRpdGxlPSIwMDZFIHtMQVRJTiBTTUFMTCBMRVRURVIgTn0iPiZhbXA7bjwvc3Bhbj48YnI+CisjICAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbHQ7Jm5ic3A7bnk8L3NwYW4+PGJyPgorCisjICAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNkUgMDA3OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSAvIDAwNkUgMDA3OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgWX0iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOz0mbmJzcDtubnkmbmJzcDsvJm5ic3A7bnk8L3NwYW4+PGJyPgorIyAgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDU5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIENBUElUQUwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Jmx0OyZsdDsmbmJzcDtuWTwvc3Bhbj48YnI+CisjICAgICA8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRkZGMzMiPjEuMjwvdGQ+CisKKyMgICAgIDx0ZCBiZ2NvbG9yPSIjOThGQjk4Ij5XaW5kb3dzIFhQPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KZGlmZiAtLWdpdCBhL2NvbHByb2JlL2V4dHJhY3RDb2xsYXRpb25EYXRhLnBsIGIvY29scHJvYmUvZXh0cmFjdENvbGxhdGlvbkRhdGEucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcwNzliZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2V4dHJhY3RDb2xsYXRpb25EYXRhLnBsCkBAIC0wLDAgKzEsMjQ2IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBVbmljb2RlOjpVQ0QgJ2NoYXJpbmZvJzsKK3VzZSBVbmljb2RlOjpOb3JtYWxpemU7Cit1c2UgdXRmODsKK3VzZSBvcGVuICc6dXRmOCc7CisKK215ICRwcmludG91dCA9IDA7CitteSAkYnJhY2VzID0gMDsKK215ICRjb2xscyA9IDA7CitteSAkYWxpYXNlZCA9IDA7CitteSAkbmV3TmFtZSA9ICIiOworbXkgJGZpbGVuYW1lOworbXkgJHN1ZmZpeDsKK215ICRsb2NhbGU7CisKK05FV19GSUxFOgorZm9yZWFjaCBteSAkYXJnIChAQVJHVikgeworICBpZigkbmV3TmFtZSA9fiAvXiQvKSB7CisgICAgJGxvY2FsZSA9ICRhcmc7CisgICAgJGxvY2FsZSA9fiBzI14uKi8jI2c7CisgICAgJGxvY2FsZSA9fiBzL1wudHh0Ly87CisgIH0gZWxzZSB7CisgICAgJG5ld05hbWUgPSAiIjsKKyAgfQorICBteSAkY29tbWFuZCA9ICIvaG9tZS93ZWl2L2J1aWxkL2N1cnJlbnQvYmluL3Vjb252IC14IGhleC1hbnkvSmF2YSAtZiB1dGY4IC10IHV0ZjggJGFyZyI7CisgIHByaW50ICRjb21tYW5kLiJcbiI7CisgIG15IEBidW5kbGUgPSBgJGNvbW1hbmRgOworICBmb3JlYWNoICRfIChAYnVuZGxlKSB7CisgI3doaWxlKDw+KSB7CisgICAjcHJpbnQgJEFSR1YgaWYgZW9mOworICAgaWYoL15cL1wvLykgeworICAgICBuZXh0OworICAgfQorICAgaWYoL2NvbGxhdGlvbnMvKSB7CisgICAgIHByaW50ICJmb3VuZCBDb2xsYXRpb25zXG4iOworICAgICAkY29sbHMgPSAxOworICAgICBpZigvYWxpYXMvKSB7CisgICAgICAgcHJpbnQgImNvbGxhdGlvbnMgYXJlIGFsaWFzZWRcbiI7CisgICAgICAgJGFsaWFzZWQgPSAxOworICAgICB9CisgICB9CisgICBpZigkYWxpYXNlZCkgeworICAgICBwcmludCAicHJvY2Vzc2luZyBhbGlhc2VkIGRhdGE6ICRfXG4iOworICAgICBpZigvXHsvKSB7CisgICAgICAgcHJpbnQgIkJyYWNlcyBvcGVuZWRcbiI7CisgICAgICAgJGJyYWNlcyA9IDE7CisgICAgIH0KKyAgICAgaWYoJGJyYWNlcyAmJiAvXCIoLiopXCIvKSB7CisgICAgICAgJG5ld05hbWUgPSAkMTsKKyAgICAgICBwcmludCAiQWxpYXNpbmcgdG8gJG5ld05hbWVcbiI7CisgICAgIH0KKyAgICAgaWYoJGJyYWNlcyAmJiAvXH0vKSB7CisgICAgICAgJGJyYWNlcyA9IDA7CisgICAgICAgcHJpbnQgIkJyYWNlcyBjbG9zZWRcbiI7CisgICAgICAgJGFsaWFzZWQgPSAwOworICAgICAgIHByaW50ICJTd2l0Y2hpbmcgZnJvbSAkZmlsZW5hbWUgdG8gJG5ld05hbWVcbiI7CisgICAgICAgJGFyZyA9fiBzLyRsb2NhbGVcLnR4dCQvJG5ld05hbWVcLnR4dC87CisgICAgICAgcHJpbnQgIiRhcmdcbiI7CisgICAgICAgcmVkbyBORVdfRklMRTsKKyAgICAgfQorCisgICB9CisgICBpZigvc3RhbmRhcmR8cGhvbmVib29rfHRyYWRpdGlvbmFsfHBpbnlpbnxzdHJva2V8ZGlyZWN0LyAmJiAkY29sbHMpIHsKKyAgICAgcHJpbnQgImZvdW5kICQmIGNvbGxhdGlvblxuIjsKKyAgICAgJHN1ZmZpeCA9ICJfIi51YygkJik7CisgICAgIGlmKC9zdGFuZGFyZC8pIHsKKyAgICAgICAkc3VmZml4ID0gIiI7CisgICAgIH0KKyAgIH0KKyAgIGlmKC9TZXF1ZW5jZS8gJiYgJGNvbGxzKSB7CisgICAgICNiaW5tb2RlIEFSR1YsICI6dXRmOCI7CisgICAgICRwcmludG91dCA9IDE7CisgICAgICMkZmlsZW5hbWUgPSAkQVJHVjsKKyAgICAgJGZpbGVuYW1lID0gJGxvY2FsZTsKKyAgICAgaWYoJHN1ZmZpeCkgeworICAgICAgICRmaWxlbmFtZSAuPSAiXyIuJHN1ZmZpeDsKKyAgICAgfQorICAgICAkZmlsZW5hbWUgLj0gIl9jb2xsYXRpb24uaHRtbCI7CisgICAgIHByaW50ICJmaWxlbmFtZSBpcyAkZmlsZW5hbWVcbiI7CisgICAgICNvcGVuKE9VVCwgIj46dXRmOCIsICIkZmlsZW5hbWUiKTsKKyAgICAgb3BlbihPVVQsICI+JGZpbGVuYW1lIik7CisgICAgIHByaW50SGVhZGluZygkYXJnKTsKKyAgICAgI25leHQ7CisgICB9CisgICBteSAkbGluZSA9ICRfOworICAgaWYoJGxpbmUgPX4gL1x7LyAmJiAkcHJpbnRvdXQpIHsKKyAgICAgJGJyYWNlcysrOworICAgfQorICAgaWYoJHByaW50b3V0KSB7CisgICAgIHByaW50IE9VVCBwcm9jZXNzTGluZSgkbGluZSk7CisgICAgIHByaW50IE9VVCAiXG4iOworICAgfQorICAgaWYoICRsaW5lID1+IC9cfS8gJiYgJHByaW50b3V0KSB7CisgICAgICRicmFjZXMtLTsKKyAgICAgaWYoJGJyYWNlcyA9PSAwKSB7CisgICAgICAgJHByaW50b3V0ID0gMDsKKyAgICAgICBwcmludEZvb3RpbmcoKTsKKyAgICAgICBjbG9zZShPVVQpOworICAgICB9CisgICB9CisgfSAKK30KKworc3ViIHByb2Nlc3NMaW5lIHsKKyAgbXkgJGxpbmUgPSBzaGlmdDsKKyAgJF8gPSAkbGluZTsKKyAgbXkgJGkgPSAwOworICBteSAkaiA9IDA7CisgIG15ICRyZXN1bHQ7CisjIHJlbW92ZSBjb21tZW50cworICBzIy8vLiokIyNnOworIyByZW1vdmUgIlNlcXVlbmNlIiBpZiBwcmVzZW50CisgIHMvU2VxdWVuY2VccyovLzsKKyMgcmVtb3ZlIGxlYWRpbmcgYnJhY2UgaWYgcHJlc2VudAorICBzL15ccyp7Ly87CisjIHJlbW92ZSB0cmFpbGluZyBicmFjZSBpZiBwcmVzZW50CisgIHMvfVxzKiQvLzsKKyMgcmVtb3ZlIHRyYWlsaW5nIHF1b3RlCisgIHMvIlxzKiQvLzsKKyNyZW1vdmUgbGVhZCBxdW90ZQorICBzL15ccyoiLy87Cisjc2VwYXJhdGUgb3B0aW9ucworICBzLyhcWy4qXF0pL1xuXDEvZzsKKyNzZXBhcmF0ZSByZXNldHMKKyAgcy9ccypcJlxzKi9cblwmIC9nOworI3NlcGFyYXRlIHN0cmVuZ3RocyBhbmQgaW5zZXJ0IHNwYWNlcworICBzL1xzKig8ezEsNH0pXHMqL1xuXDEgL2c7Cisjc2VwYXJhdGUgZXF1YWxzIGFuZCBpbnNlcnQgc3BhY2VzCisgIHMvXHMqPVxzKi9cbj0gL2c7CisKKyMgYnJlYWsgaW50byBpbmRpdmlkdWFsIHJlc2V0L3N0cmVuZ3RoL3NldHRpbmcgbGluZXMKKyAgbXkgQGxpbmVzID0gc3BsaXQoL1xuLyk7CisKKyAgbXkgJGxpbmU7CisgIG15ICRuYW1lOworICBteSAkc3BhbkVuZCA9ICIiOworICBteSAkcmVzdWx0ID0gIiI7CisgIG15ICRuYW1lcyA9ICIiOworICBteSAkY29kZXMgPSAiIjsKKyAgbXkgJGxybSA9ICIiOworCisgIGZvcmVhY2ggJGxpbmUgKEBsaW5lcykgeworICAgICMgc2tpcCBlbXB0eSBsaW5lcworICAgIGlmKCRsaW5lID1+IC9eJC8pIHsKKyAgICAgIG5leHQ7CisgICAgfQorICAgICRzcGFuRW5kID0gIiI7CisgICAgJG5hbWUgPSAiIjsKKyAgICAkbHJtID0gIiI7CisgICAgJGxpbmUgPSBORkMoJGxpbmUpOworICAgICMgZm9yIHJlc2V0cyBhbmQgc3RyZW5ndGhzIHdlIHdpbGwgZ2V0IG5hbWUgZm9yIGVsZW1lbnRzCisgICAgaWYoJGxpbmUgPX4gLzx7MSw0fSB8PSB8JiBcWy4qXF18JiAvKSB7CisgICAgICAkbmFtZSA9ICI8c3BhbiB0aXRsZT1cIiI7CisgICAgICAkbmFtZXMgPSAiIjsKKyAgICAgICRjb2RlcyA9ICIiOworICAgICAgbXkgJHN0YXJ0ID0gJCY7CisgICAgICBteSAkcmVzdCA9ICQnOworICAgICAgZm9yICgkaiA9IDA7ICRqIDwgbGVuZ3RoKCRyZXN0KTsgJGorKykgeworCW15ICRjaGFyID0gc3Vic3RyKCRyZXN0LCAkaiwgMSk7CisJbXkgJGNoYXJWYWwgPSBvcmQoJGNoYXIpOworCSMgc29tZSBvZiBlbGVtZW50cyBhcmUgcGFydCBvZiB0aGUgc3ludGF4LCBzbyB0aGV5IGFyZQorCSMgZW50ZXJlZCB3aXRob3V0IHRyYW5zbGF0aW9uIHRvIHRoZSBuYW1lCisJaWYoJGNoYXJWYWwgPT0gMHgwMDJGIHx8ICRjaGFyVmFsID09IDB4MDA3QykgeworCSAgJG5hbWUgLj0gJGNvZGVzLiRuYW1lcy4iICRjaGFyICI7CisJICAkY29kZXMgPSAiIjsKKwkgICRuYW1lcyA9ICIiOworCX0gZWxzaWYoJGNoYXJWYWwgPT0gMHgwMDI3KSB7ICNxdW90ZSByZXF1aXJlcyBtb3JlIHByb2Nlc3NpbmcKKwkgICMkbmFtZSAuPSAiJyI7CisJfSBlbHNlIHsKKwkgIG15ICRjaGFyaW5mbyA9IGNoYXJpbmZvKCRjaGFyVmFsKTsKKwkgICRjb2RlcyAuPSAkY2hhcmluZm8tPnsnY29kZSd9LiIgIjsKKwkgICRuYW1lcyAuPSAieyIuJGNoYXJpbmZvLT57J25hbWUnfS4ifSAiOworICAgICAgICAgIGlmKCRjaGFyaW5mby0+eydiaWRpJ30gZXEgIlIiIHx8ICRjaGFyaW5mby0+eydiaWRpJ30gZXEgIkFMIikgeworICAgICAgICAgICAgJGxybSA9ICImbHJtOyI7CisgICAgICAgICAgfQorCSAgIyRuYW1lIC49ICRjaGFyaW5mby0+eydjb2RlJ30uIiB7Ii4kY2hhcmluZm8tPnsnbmFtZSd9LiJ9ICI7CisJfQorICAgICAgfQorICAgICAgJG5hbWUgLj0gJGNvZGVzLiRuYW1lcy4iXCIgPiI7CisgICAgICAkc3BhbkVuZCA9ICI8L3NwYW4+IjsKKyAgICB9CisgICAgI3ByaW50ICRuYW1lLiJcbiI7CisgICAgaWYoJGxpbmUgPX4gL148PDw8LykgeworICAgICAgJGxpbmUgPSAiICAgICRsaW5lIjsKKyAgICB9IGVsc2lmKCRsaW5lID1+IC9ePDw8LykgeworICAgICAgJGxpbmUgPSAiICAgJGxpbmUiOworICAgIH0gZWxzaWYoJGxpbmUgPX4gL148PC8pIHsKKyAgICAgICRsaW5lID0gIiAgJGxpbmUiOworICAgIH0gZWxzaWYoJGxpbmUgPX4gL148LykgeworICAgICAgJGxpbmUgPSAiICRsaW5lIjsKKyAgICB9IGVsc2lmKCRsaW5lID1+IC9ePS8pIHsKKyAgICAgICRsaW5lID0gIiAgICAkbGluZSI7CisgICAgfQorICAgICMgaW5zZXJ0IHNwYWNlcyBhcm91bmQgdmVydGljYWwgYmFycyAoZml4IHByZWZpeGVzKQorCisgICAgIyBpbnNlcnQgc3BhY2VzIGFyb3VuZCBzbGFzaGVzIChmaXggZXhwYW5zaW9ucykKKyAgICAkbGluZSA9fiBzIy8jIC8gI2c7CisgICAgIyByZXBsYWNlICYKKyAgICAkbGluZSA9fiBzL1wmLyZhbXA7L2c7CisgICAgIyByZXBsYWNlIHNwYWNlcworICAgICRsaW5lID1+IHMvIC8mbmJzcDsvZzsKKyAgICAjIHJlcGxhY2UgPAorICAgICRsaW5lID1+IHMvPC8mbHQ7L2c7CisgICAgIyByZXBsYWNlID4KKyAgICAkbGluZSA9fiBzLz4vJmd0Oy9nOworCisgICAgIyRsaW5lc1skaV0gPSAkbmFtZS4kbHJtLiRsaW5lLiI8L3NwYW4+PGJyPiI7IAorICAgICMkaSsrOworICAgICRyZXN1bHQgLj0gICRuYW1lLiRscm0uJGxpbmUuJHNwYW5FbmQuIjxicj5cbiI7CisgIH0KKworICAjJF8gPSBqb2luKCJcbiIsIEBsaW5lcyk7CisgIHJldHVybiAkcmVzdWx0OworCit9CisgCitzdWIgcHJpbnRIZWFkaW5nIHsKK215ICRmaWxlbmFtZSA9IHNoaWZ0OworJGZpbGVuYW1lID1+IHMvXC50eHQvLzsKK3ByaW50IE9VVCA8PCJFbmRPZkhlYWRpbmciOworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzwvaGVhZD4KKyMgQ29sbGF0aW9uIGRhdGEgcmVzb3VyY2UgYnVuZGxlIGdlbmVyYXRlZCBmb3IgbG9jYWxlOiAkZmlsZW5hbWU8YnI+CisjIEZvciBwbGF0Zm9ybSBpY3UgcmVmZXJlbmNlIHBsYXRmb3JtIFVDQTxicj48YnI+CisKKworJGZpbGVuYW1lJm5ic3A7ezxicj4KKyZuYnNwOyZuYnNwO0NvbGxhdGlvbkVsZW1lbnRzJm5ic3A7ezxicj4KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NlcXVlbmNlJm5ic3A7ezxicj4KK0VuZE9mSGVhZGluZworfQorCitzdWIgcHJpbnRGb290aW5nIHsKK3ByaW50IE9VVCA8PCJFbmRPZkZvb3RpbmciOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTxicj4KKyZuYnNwOyZuYnNwO308YnI+Cit9PGJyPgorCis8L3ByZT4KKzwvaHRtbD4KK0VuZE9mRm9vdGluZworfQpkaWZmIC0tZ2l0IGEvY29scHJvYmUvZ2NkMi5wbCBiL2NvbHByb2JlL2djZDIucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhlNWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2djZDIucGwKQEAgLTAsMCArMSwyNCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKKyNteSAkbG9jYWxlTWludXNBID0gYGxvY2FsZSAtYWA7CitteSAkbG9jYWxlTWludXNBID0gYGNhdCB+L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL2xvY2FsZS50eHRgOworbXkgQGxvY2FsZXMgPSBzcGxpdCgvXG4vLCAkbG9jYWxlTWludXNBKTsKK215ICRsb2NhbGU7CitteSAkY29tbWFuZDsKKworbXkgJHBsYXRmb3JtID0gJEFSR1ZbMF07CisKK21rZGlyICRwbGF0Zm9ybS4ibG9nczIiOworbWtkaXIgJHBsYXRmb3JtOworCitmb3JlYWNoICRsb2NhbGUgKEBsb2NhbGVzKSB7CisgICRjb21tYW5kID0gIn4vc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvY29scHJvYmUgLS1wbGF0Zm9ybSAkcGxhdGZvcm0gLS1yZWYgJHBsYXRmb3JtIC0tZGlmZiAkbG9jYWxlID4kcGxhdGZvcm0iLiJsb2dzMi8kbG9jYWxlIi4iTG9nLnR4dCAyPiYxIjsKKyAgKCRsb2NhbGUsICRfKSA9IHNwbGl0KC9cLi8sICRsb2NhbGUpOworICAkY29tbWFuZCAuPSAiOyBjcCAvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy8kbG9jYWxlICRwbGF0Zm9ybS8iOworICBwcmludCAiJGNvbW1hbmRcbiI7CisgIGAkY29tbWFuZGA7CisgICNjaGRpciAiLi4iOworCit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS9nZW5Db2xsRGF0YS5wbCBiL2NvbHByb2JlL2dlbkNvbGxEYXRhLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNDYxODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9nZW5Db2xsRGF0YS5wbApAQCAtMCwwICsxLDIzIEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIHN0cmljdDsKKworbXkgJGxvY2FsZU1pbnVzQSA9IGBsb2NhbGUgLWFgOworbXkgQGxvY2FsZXMgPSBzcGxpdCgvXG4vLCAkbG9jYWxlTWludXNBKTsKK215ICRsb2NhbGU7CitteSAkY29tbWFuZDsKKworbXkgJHBsYXRmb3JtID0gJEFSR1ZbMF07CisKK21rZGlyICRwbGF0Zm9ybS4ibG9ncyI7Citta2RpciAkcGxhdGZvcm07CisKK2ZvcmVhY2ggJGxvY2FsZSAoQGxvY2FsZXMpIHsKKyAgJGNvbW1hbmQgPSAifi9zcmMvaWN1L3NvdXJjZS9leHRyYS9jb2xwcm9iZS9jb2xwcm9iZSAtLW91dHB1dCByZXNiIC0tcGxhdGZvcm0gbGludXggLS1yZWYgbGludXggJGxvY2FsZSA+JHBsYXRmb3JtIi4ibG9ncy8kbG9jYWxlIi4iTG9nLnR4dCAyPiYxIjsKKyAgKCRsb2NhbGUsICRfKSA9IHNwbGl0KC9cLi8sICRsb2NhbGUpOworICAkY29tbWFuZCAuPSAiOyBjcCAvdXNyL3NoYXJlL2kxOG4vbG9jYWxlcy8kbG9jYWxlICRwbGF0Zm9ybS8iOworICBwcmludCAiJGNvbW1hbmRcbiI7CisgIGAkY29tbWFuZGA7CisgICNjaGRpciAiLi4iOworCit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS9saW5lLmNwcCBiL2NvbHByb2JlL2xpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODI5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9saW5lLmNwcApAQCAtMCwwICsxLDcwMSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSBsaW5lLmNwcAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDAzLzE4LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgImxpbmUuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCitVbmljb2RlU2V0ICogTGluZTo6bmVlZHNRdW90aW5nID0gTlVMTDsKKwordm9pZAorTGluZTo6aW5pdCgpCit7CisgICAgICAgIGxlbiA9IDA7CisgICAgICAgIGV4cExlbiA9IDA7CisgICAgICAgIHN0cmVuZ3RoID0gVUNPTF9PRkY7CisgICAgICAgIHN0cmVuZ3RoRnJvbUVtcHR5ID0gVUNPTF9PRkY7CisgICAgICAgIGN1bXVsYXRpdmVTdHJlbmd0aCA9IFVDT0xfT0ZGOworICAgICAgICBleHBTdHJlbmd0aCA9IFVDT0xfT0ZGOworICAgICAgICBwcmV2aW91cyA9IE5VTEw7CisgICAgICAgIG5leHQgPSBOVUxMOworICAgICAgICBsZWZ0ID0gTlVMTDsKKyAgICAgICAgcmlnaHQgPSBOVUxMOworICAgICAgICBpc0NvbnRyYWN0aW9uID0gRkFMU0U7CisgICAgICAgIGlzRXhwYW5zaW9uID0gRkFMU0U7CisgICAgICAgIGlzUmVtb3ZlZCA9IEZBTFNFOworICAgICAgICBpc1Jlc2V0ID0gRkFMU0U7CisgICAgICAgIGV4cEluZGV4ID0gMDsKKyAgICAgICAgZmlyc3RDQyA9IDA7CisgICAgICAgIGxhc3RDQyA9IDA7CisgICAgICAgIHNvcnRLZXkgPSBOVUxMOworfQorCitMaW5lOjpMaW5lKCkKK3sKKyAgaW5pdCgpOworICBtZW1zZXQobmFtZSwgMCwgMjUqc2l6ZW9mKFVDaGFyKSk7CisgIG1lbXNldChleHBhbnNpb25TdHJpbmcsIDAsIDI1KnNpemVvZihVQ2hhcikpOworfQorCitMaW5lOjpMaW5lKGNvbnN0IFVDaGFyKiBuYW1lLCBpbnQzMl90IGxlbikKK3sKKyAgaW5pdCgpOworICB0aGlzLT5sZW4gPSBsZW47CisgIHVfbWVtY3B5KHRoaXMtPm5hbWUsIG5hbWUsIGxlbik7CisgIG1lbXNldChleHBhbnNpb25TdHJpbmcsIDAsIDI1KnNpemVvZihVQ2hhcikpOworICBVQ2hhcjMyIGM7CisgIFUxNl9HRVQobmFtZSwgMCwgMCwgbGVuLCBjKTsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7CisgIFUxNl9HRVQobmFtZSwgMCwgbGVuLTEsIGxlbiwgYyk7CisgIGxhc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK0xpbmU6OkxpbmUoY29uc3QgVUNoYXIgbmFtZSkKK3sKKyAgICBpbml0KCk7CisgICAgbGVuID0gMTsKKyAgICB0aGlzLT5uYW1lWzBdID0gbmFtZTsKKyAgICB0aGlzLT5uYW1lWzFdID0gMDsKKyAgbWVtc2V0KGV4cGFuc2lvblN0cmluZywgMCwgMjUqc2l6ZW9mKFVDaGFyKSk7CisgIGZpcnN0Q0MgPSB1X2dldENvbWJpbmluZ0NsYXNzKG5hbWUpOworICBsYXN0Q0MgPSBmaXJzdENDOworfQorCitMaW5lOjpMaW5lKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0cmluZykKK3sKKyAgaW5pdCgpOworICBzZXRUbyhzdHJpbmcpOworfQorCitMaW5lOjpMaW5lKGNvbnN0IGNoYXIgKmJ1ZmYsIGludDMyX3QgYnVmZkxlbiwgVUVycm9yQ29kZSAmc3RhdHVzKSA6CitwcmV2aW91cyhOVUxMKSwKK25leHQoTlVMTCksCitsZWZ0KE5VTEwpLAorcmlnaHQoTlVMTCkKK3sKKyAgaW5pdEZyb21TdHJpbmcoYnVmZiwgYnVmZkxlbiwgc3RhdHVzKTsKK30KKworTGluZTo6TGluZShjb25zdCBMaW5lICZvdGhlcikgOgorICBwcmV2aW91cyhOVUxMKSwKKyAgbmV4dChOVUxMKSwKK2xlZnQoTlVMTCksCityaWdodChOVUxMKQoreworICAqdGhpcyA9IG90aGVyOworfQorICAgICAgICAgCitMaW5lICYKK0xpbmU6Om9wZXJhdG9yPShjb25zdCBMaW5lICZvdGhlcikgeworICBsZW4gPSBvdGhlci5sZW47CisgIGV4cExlbiA9IG90aGVyLmV4cExlbjsKKyAgc3RyZW5ndGggPSBvdGhlci5zdHJlbmd0aDsKKyAgc3RyZW5ndGhGcm9tRW1wdHkgPSBvdGhlci5zdHJlbmd0aEZyb21FbXB0eTsKKyAgY3VtdWxhdGl2ZVN0cmVuZ3RoID0gb3RoZXIuY3VtdWxhdGl2ZVN0cmVuZ3RoOworICBleHBTdHJlbmd0aCA9IG90aGVyLmV4cFN0cmVuZ3RoOworICBpc0NvbnRyYWN0aW9uID0gb3RoZXIuaXNDb250cmFjdGlvbjsKKyAgaXNFeHBhbnNpb24gPSBvdGhlci5pc0V4cGFuc2lvbjsKKyAgaXNSZW1vdmVkID0gb3RoZXIuaXNSZW1vdmVkOworICBpc1Jlc2V0ID0gb3RoZXIuaXNSZXNldDsKKyAgZXhwSW5kZXggPSBvdGhlci5leHBJbmRleDsKKyAgZmlyc3RDQyA9IG90aGVyLmZpcnN0Q0M7CisgIGxhc3RDQyA9IG90aGVyLmxhc3RDQzsKKyAgdV9zdHJjcHkobmFtZSwgb3RoZXIubmFtZSk7CisgIHVfc3RyY3B5KGV4cGFuc2lvblN0cmluZywgb3RoZXIuZXhwYW5zaW9uU3RyaW5nKTsKKyAgc29ydEtleSA9IG90aGVyLnNvcnRLZXk7CisgIGxlZnQgPSBvdGhlci5sZWZ0OworICByaWdodCA9IG90aGVyLnJpZ2h0OworICByZXR1cm4gKnRoaXM7Cit9CisKK1VCb29sIAorTGluZTo6b3BlcmF0b3I9PShjb25zdCBMaW5lICZvdGhlcikgY29uc3QgeworICBpZih0aGlzID09ICZvdGhlcikgeworICAgIHJldHVybiBUUlVFOworICB9CisgIGlmKGxlbiAhPSBvdGhlci5sZW4pIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYodV9zdHJjbXAobmFtZSwgb3RoZXIubmFtZSkgIT0gMCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworVUJvb2wgCitMaW5lOjplcXVhbHMoY29uc3QgTGluZSAmb3RoZXIpIGNvbnN0IHsKKyAgaWYodGhpcyA9PSAmb3RoZXIpIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBpZihsZW4gIT0gb3RoZXIubGVuKSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmKHVfc3RyY21wKG5hbWUsIG90aGVyLm5hbWUpICE9IDApIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYoc3RyZW5ndGggIT0gb3RoZXIuc3RyZW5ndGgpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYoZXhwTGVuICE9IG90aGVyLmV4cExlbikgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZih1X3N0cmNtcChleHBhbnNpb25TdHJpbmcsIG90aGVyLmV4cGFuc2lvblN0cmluZykpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK1VCb29sCitMaW5lOjpvcGVyYXRvciE9KGNvbnN0IExpbmUgJm90aGVyKSBjb25zdCB7CisgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworCitMaW5lOjp+TGluZSgpIHsKK30KKwordm9pZAorTGluZTo6Y29weUFycmF5KExpbmUgKmRlc3QsIGNvbnN0IExpbmUgKnNyYywgaW50MzJfdCBzaXplKSB7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGRlc3RbaV0gPSBzcmNbaV07CisgIH0KK30KKwordm9pZAorTGluZTo6c2V0TmFtZShjb25zdCBVQ2hhciogbmFtZSwgaW50MzJfdCBsZW4pIHsKKyAgdGhpcy0+bGVuID0gbGVuOworICB1X21lbWNweSh0aGlzLT5uYW1lLCBuYW1lLCBsZW4pOworICBVQ2hhcjMyIGM7CisgIFUxNl9HRVQobmFtZSwgMCwgMCwgbGVuLCBjKTsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7CisgIFUxNl9HRVQobmFtZSwgMCwgbGVuLTEsIGxlbiwgYyk7CisgIGxhc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK3ZvaWQgCitMaW5lOjpzZXRUb0NvbmNhdChjb25zdCBMaW5lICpmaXJzdCwgY29uc3QgTGluZSAqc2Vjb25kKSB7CisgIHVfc3RyY3B5KG5hbWUsIGZpcnN0LT5uYW1lKTsKKyAgdV9zdHJjYXQobmFtZSwgc2Vjb25kLT5uYW1lKTsKKyAgbGVuID0gZmlyc3QtPmxlbiArIHNlY29uZC0+bGVuOworICBmaXJzdENDID0gZmlyc3QtPmZpcnN0Q0M7CisgIGxhc3RDQyA9IHNlY29uZC0+bGFzdENDOworfQorCitVbmljb2RlU3RyaW5nCitMaW5lOjpzdHJpbmdUb05hbWUoVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4pIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBjaGFyIGJ1ZmZlclsyNTZdOworICBpbnQzMl90IGkgPSAwOworICBVQ2hhcjMyIGM7IAorICB3aGlsZShpIDwgbGVuKSB7CisgICAgVTE2X05FWFQoc3RyaW5nLCBpLCBsZW4sIGMpOworICAgIGlmKGMgPCAweDEwMDAwKSB7CisgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiUwNFggIiwgYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHNwcmludGYoYnVmZmVyLCAiJTA2WCAiLCBjKTsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICB9CisgIGkgPSAwOworICB3aGlsZShpIDwgbGVuKSB7CisgICAgVTE2X05FWFQoc3RyaW5nLCBpLCBsZW4sIGMpOworICAgIHVfY2hhck5hbWUoYywgVV9FWFRFTkRFRF9DSEFSX05BTUUsIGJ1ZmZlciwgMjU2LCAmc3RhdHVzKTsKKyAgICByZXN1bHQuYXBwZW5kKCJ7Iik7CisgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgIHJlc3VsdC5hcHBlbmQoIn0gIik7CisgIH0KKy8qCisgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgc3ByaW50ZihidWZmZXIsICIlMDRYICIsIHN0cmluZ1tpXSk7CisgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICB9CisgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgdV9jaGFyTmFtZShzdHJpbmdbaV0sIFVfRVhURU5ERURfQ0hBUl9OQU1FLCBidWZmZXIsIDI1NiwgJnN0YXR1cyk7CisgICAgcmVzdWx0LmFwcGVuZCgieyIpOworICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICByZXN1bHQuYXBwZW5kKCJ9ICIpOworICB9CisqLyAgCisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OnRvQnVuZGxlU3RyaW5nKCkgCit7CisKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBpZighbmVlZHNRdW90aW5nKSB7CisgICAgbmVlZHNRdW90aW5nID0gbmV3IFVuaWNvZGVTZXQoIltbOndoaXRlc3BhY2U6XVs6YzpdWzp6Ol1bWzphc2NpaTpdLVthLXpBLVowLTldXV0iLCBzdGF0dXMpOworICB9CisgIFVDaGFyIE5GQ1s1MF07CisgIGludDMyX3QgTkZDTGVuID0gdW5vcm1fbm9ybWFsaXplKG5hbWUsIGxlbiwgVU5PUk1fTkZDLCAwLCBORkMsIDUwLCAmc3RhdHVzKTsKKyAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKKyAgaWYoaXNSZXNldCkgeworICAgIHJlc3VsdC5hcHBlbmQoIiYiKTsKKyAgfSBlbHNlIHsKKyAgICByZXN1bHQuYXBwZW5kKHN0cmVuZ3RoVG9TdHJpbmcoc3RyZW5ndGgsIEZBTFNFLCBGQUxTRSkpOworICB9CisgIFVCb29sIHF1b3RlID0gbmVlZHNRdW90aW5nLT5jb250YWluc1NvbWUobmFtZSkgfHwgbmVlZHNRdW90aW5nLT5jb250YWluc1NvbWUoTkZDKTsKKyAgaWYocXVvdGUpIHsKKyAgICByZXN1bHQuYXBwZW5kKCInIik7CisgIH0KKyAgaWYoTkZDWzBdID09IDB4MjIpIHsKKyAgICByZXN1bHQuYXBwZW5kKCJcXHUwMDIyIik7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0LmFwcGVuZChORkMsIE5GQ0xlbik7CisgIH0KKyAgaWYocXVvdGUgJiYgTkZDWzBdICE9IDB4MDAyNykgeworICAgIHJlc3VsdC5hcHBlbmQoIiciKTsKKyAgfQorICBpZihleHBMZW4gJiYgIWlzUmVzZXQpIHsKKyAgICBxdW90ZSA9IG5lZWRzUXVvdGluZy0+Y29udGFpbnNTb21lKGV4cGFuc2lvblN0cmluZyk7CisgICAgcmVzdWx0LmFwcGVuZCgiIC8gIik7CisgICAgaWYocXVvdGUpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiciKTsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZChleHBhbnNpb25TdHJpbmcpOworICAgIGlmKHF1b3RlKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCInIik7CisgICAgfQorICB9CisgIHJlc3VsdC5hcHBlbmQoIlwiIC8vIik7CisKKyAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoTkZDLCBORkNMZW4pKTsKKyAgaWYoZXhwTGVuICYmICFpc1Jlc2V0KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiIC8gIik7CisgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoZXhwYW5zaW9uU3RyaW5nLCBleHBMZW4pKTsKKyAgfQorICByZXN1bHQuYXBwZW5kKCJcbiIpOworICByZXR1cm4gcmVzdWx0OworfQorCitVbmljb2RlU3RyaW5nCitMaW5lOjp0b0hUTUxTdHJpbmcoKSAKK3sKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBVQ2hhciBORkNbNTBdOworICBpbnQzMl90IE5GQ0xlbiA9IHVub3JtX25vcm1hbGl6ZShuYW1lLCBsZW4sIFVOT1JNX05GQywgMCwgTkZDLCA1MCwgJnN0YXR1cyk7CisgIHJlc3VsdC5hcHBlbmQoIjxzcGFuIHRpdGxlPVwiIik7CisgIHJlc3VsdC5hcHBlbmQoc3RyaW5nVG9OYW1lKE5GQywgTkZDTGVuKSk7CisgIGlmKGV4cExlbiAmJiAhaXNSZXNldCkgeworICAgIHJlc3VsdC5hcHBlbmQoIiAvICIpOworICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nVG9OYW1lKGV4cGFuc2lvblN0cmluZywgZXhwTGVuKSk7CisgIH0KKyAgcmVzdWx0LmFwcGVuZCgiXCI+Iik7CisgIGlmKGlzUmVzZXQpIHsKKyAgICByZXN1bHQuYXBwZW5kKCImYW1wOyIpOworICB9IGVsc2UgeworICAgIHJlc3VsdC5hcHBlbmQoc3RyZW5ndGhUb1N0cmluZyhzdHJlbmd0aCwgRkFMU0UsIFRSVUUpKTsKKyAgfQorICByZXN1bHQuYXBwZW5kKE5GQywgTkZDTGVuKTsKKyAgaWYoZXhwTGVuICYmICFpc1Jlc2V0KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7LyZuYnNwOyIpOworICAgIHJlc3VsdC5hcHBlbmQoZXhwYW5zaW9uU3RyaW5nKTsKKyAgfQorICByZXN1bHQuYXBwZW5kKCI8L3NwYW4+PGJyPlxuIik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OnRvU3RyaW5nKFVCb29sIHByZXR0eSkgeworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgaWYoIXByZXR0eSkgeworICAgIHJlc3VsdC5zZXRUbyhuYW1lKTsKKyAgICBpZihleHBMZW4pIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIi8iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoZXhwYW5zaW9uU3RyaW5nKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVUNoYXIgTkZDWzUwXTsKKyAgICBpbnQzMl90IE5GQ0xlbiA9IHVub3JtX25vcm1hbGl6ZShuYW1lLCBsZW4sIFVOT1JNX05GQywgMCwgTkZDLCA1MCwgJnN0YXR1cyk7CisgICAgcmVzdWx0LnNldFRvKE5GQywgTkZDTGVuKTsKKyAgICBpZihleHBMZW4pIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIi8iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoZXhwYW5zaW9uU3RyaW5nKTsKKyAgICB9CisgICAgLyoKKyAgICBpZihORkNMZW4gIT0gbGVuIHx8IHVfc3RybmNtcChuYW1lLCBORkMsIGxlbikgIT0gMCkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiKE5GQzogIik7CisgICAgICByZXN1bHQuYXBwZW5kKE5GQywgTkZDTGVuKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nVG9OYW1lKE5GQywgTkZDTGVuKSk7CisgICAgICByZXN1bHQuYXBwZW5kKCIpIik7CisgICAgfQorICAgICovCisgICAgcmVzdWx0LmFwcGVuZCgiICAgICMgIik7CisgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoTkZDLCBORkNMZW4pKTsKKyAgICBpZihleHBMZW4pIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIi8gIik7CisgICAgICByZXN1bHQuYXBwZW5kKHN0cmluZ1RvTmFtZShleHBhbnNpb25TdHJpbmcsIGV4cExlbikpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQKK0xpbmU6OnNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0cmluZykgeworICBpbnQzMl90IGxlbiA9IHN0cmluZy5sZW5ndGgoKTsKKyAgdV9zdHJuY3B5KG5hbWUsIHN0cmluZy5nZXRCdWZmZXIoKSwgbGVuKTsKKyAgbmFtZVtsZW5dID0gMDsKKyAgdGhpcy0+bGVuID0gbGVuOworICBVQ2hhcjMyIGM7CisgIFUxNl9HRVQobmFtZSwgMCwgMCwgbGVuLCBjKTsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7CisgIFUxNl9HRVQobmFtZSwgMCwgbGVuLTEsIGxlbiwgYyk7CisgIGxhc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK3ZvaWQgCitMaW5lOjpzZXRUbyhjb25zdCBVQ2hhcjMyIG4pIHsKKyAgVUJvb2wgaXNFcnJvciA9IEZBTFNFOworICBsZW4gPSAwOyAvLyB3ZSBhcmUgc2V0dGluZyB0aGUgbGluZSB0byBjaGFyLCBub3QgYXBwZW5kaW5nCisgIFUxNl9BUFBFTkQobmFtZSwgbGVuLCAyNSwgbiwgaXNFcnJvcik7CisgIG5hbWVbbGVuXSA9IDA7CisgIGZpcnN0Q0MgPSB1X2dldENvbWJpbmluZ0NsYXNzKG4pOworICBsYXN0Q0MgPSBmaXJzdENDOworfQorCisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OnN0cmVuZ3RoSW5kZW50KFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCwgaW50IGluZGVudFNpemUsIFVuaWNvZGVTdHJpbmcgJnJlc3VsdCkgCit7CisgIGludCBpOworICBpbnQgbnVtSW5kZW50cyA9IHN0cmVuZ3RoKzE7CisgIGlmKHN0cmVuZ3RoID4gVUNPTF9JREVOVElDQUwpIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgaWYoc3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICBudW1JbmRlbnRzID0gNTsKKyAgfQorICBmb3IoaSA9IDA7IGkgPCBudW1JbmRlbnRzKmluZGVudFNpemU7IGkrKykgeworICAgIHJlc3VsdC5hcHBlbmQoIiAiKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitVbmljb2RlU3RyaW5nIAorTGluZTo6c3RyZW5ndGhUb1N0cmluZyhVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGgsIFVCb29sIHByZXR0eSwgVUJvb2wgaHRtbCkgeworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgaWYoaHRtbCkgeworICAgIHN3aXRjaChzdHJlbmd0aCkgeworICAgIGNhc2UgVUNPTF9JREVOVElDQUw6CisgICAgICByZXN1bHQuYXBwZW5kKCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs9Jm5ic3A7Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfUVVBVEVSTkFSWToKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsmbHQ7Jmx0OyZsdDsmbmJzcDsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9URVJUSUFSWToKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsmbHQ7Jmx0OyZuYnNwOyIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVQ09MX1NFQ09OREFSWToKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsmbHQ7Jm5ic3A7Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfUFJJTUFSWToKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZsdDsmbmJzcDsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9PRkY6CisgICAgICByZXN1bHQuYXBwZW5kKCImbmJzcDsmZ3Q7PyZuYnNwOyIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOz8hJm5ic3A7Iik7CisgICAgICBicmVhazsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3dpdGNoKHN0cmVuZ3RoKSB7CisgICAgY2FzZSBVQ09MX0lERU5USUNBTDoKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgICAgICIpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZCgiID0gIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfUVVBVEVSTkFSWToKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgICAgICIpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZCgiIDw8PDwgIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfVEVSVElBUlk6CisgICAgICAvL3VfZnByaW50ZihmaWxlLCAiPDMiKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgICAiKTsKKyAgICAgIH0KKyAgICAgIHJlc3VsdC5hcHBlbmQoIiA8PDwgIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfU0VDT05EQVJZOgorICAgICAgLy91X2ZwcmludGYoZmlsZSwgIjwyIik7CisgICAgICBpZihwcmV0dHkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICIpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZCgiIDw8ICIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVQ09MX1BSSU1BUlk6CisgICAgICAvL3VfZnByaW50ZihmaWxlLCAiPDEiKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICIpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZCgiIDwgIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfT0ZGOgorICAgICAgcmVzdWx0LmFwcGVuZCgiID4/ICIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiA/ISAiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitMaW5lICoKK0xpbmU6Om5leHRJbnRlcmVzdGluZygpIHsKKyAgTGluZSAqcmVzdWx0ID0gdGhpcy0+bmV4dDsKKyAgd2hpbGUocmVzdWx0ICYmIHJlc3VsdC0+c3RyZW5ndGggIT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICByZXN1bHQgPSByZXN1bHQtPm5leHQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorTGluZTo6YXBwZW5kKGNvbnN0IFVDaGFyKiBuLCBpbnQzMl90IGxlbmd0aCkgCit7CisgIHVfc3RybmNhdChuYW1lLCBuLCBsZW5ndGgpOworICBuYW1lW2xlbitsZW5ndGhdID0gMDsKKyAgbGVuICs9IGxlbmd0aDsKKyAgVUNoYXIzMiBlbmQ7CisgIFUxNl9HRVQobiwgMCwgbGVuZ3RoLTEsIGxlbmd0aCwgZW5kKTsKKyAgbGFzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhlbmQpOworfQorCit2b2lkCitMaW5lOjphcHBlbmQoY29uc3QgVUNoYXIgbikgCit7CisgIG5hbWVbbGVuXSA9IG47CisgIG5hbWVbbGVuKzFdID0gMDsKKyAgbGVuKys7CisgIGxhc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3Mobik7Cit9CisKK3ZvaWQKK0xpbmU6OmFwcGVuZChjb25zdCBMaW5lICZsKQoreworICBhcHBlbmQobC5uYW1lLCBsLmxlbik7CisgIGxhc3RDQyA9IGwubGFzdENDOworfQorCit2b2lkCitMaW5lOjpjbGVhcigpCit7CisgIG5hbWVbMF0gPSAwOworICBsZW4gPSAwOworfQorCitpbnQzMl90CitMaW5lOjp3cml0ZShjaGFyICpidWZmLCBpbnQzMl90LCBVRXJyb3JDb2RlICYpIAoreworICAvKgorICAgIFVDaGFyICAgICBuYW1lWzI1XTsKKyAgICBpbnQzMl90ICAgbGVuOworICAgIFVDaGFyICAgICBleHBhbnNpb25TdHJpbmdbMjVdOworICAgIGludDMyX3QgICBleHBMZW47CisKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGg7CisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoRnJvbUVtcHR5OworICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjdW11bGF0aXZlU3RyZW5ndGg7CisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIGV4cFN0cmVuZ3RoOworCisgICAgTGluZSAqcHJldmlvdXM7CisgICAgTGluZSAqbmV4dDsKKworICAgIFVCb29sICAgaXNDb250cmFjdGlvbjsKKyAgICBVQm9vbCAgIGlzRXhwYW5zaW9uOworICAgIFVCb29sICAgaXNSZW1vdmVkOworICAgIFVCb29sICAgaXNSZXNldDsKKworICAgIGludDMyX3QgZXhwSW5kZXg7CisgICAgdWludDhfdCBmaXJzdENDOworICAgIHVpbnQ4X3QgbGFzdENDOworKi8KKyAgaW50MzJfdCByZXNMZW4gPSAwOworICBpbnQzMl90IGkgPSAwOworICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTA0WCIsIG5hbWVbMF0pOworICByZXNMZW4gKz0gNDsKKyAgZm9yKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKKyAgICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiICUwNFgiLCBuYW1lW2ldKTsKKyAgICByZXNMZW4gKz0gNTsKKyAgfQorICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiLyIpOworICByZXNMZW4gKz0gMTsKKworICBpID0gMDsKKyAgaWYoZXhwTGVuKSB7CisgICAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUwNFgiLCBleHBhbnNpb25TdHJpbmdbMF0pOworICAgIHJlc0xlbiArPSA0OworICAgIGZvcihpID0gMTsgaSA8IGV4cExlbjsgaSsrKSB7CisgICAgICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiICUwNFgiLCBleHBhbnNpb25TdHJpbmdbaV0pOworICAgICAgcmVzTGVuICs9IDU7CisgICAgfQorICB9CisgIHNwcmludGYoYnVmZityZXNMZW4sICI7ICIpOworICByZXNMZW4gKz0gMjsKKworICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTAyaSAiLCBzdHJlbmd0aCk7CisgIHJlc0xlbiArPSAzOworICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTAyaSIsIHN0cmVuZ3RoRnJvbUVtcHR5KTsKKyAgcmVzTGVuICs9IDI7CisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDJpIiwgY3VtdWxhdGl2ZVN0cmVuZ3RoKTsKKyAgcmVzTGVuICs9IDI7CisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDJpIiwgZXhwU3RyZW5ndGgpOworICByZXNMZW4gKz0gMjsKKworICAvLyBWYXJpb3VzIGZsYWdzLiBUaGUgb25seSBpbnRlcmVzdGluZyBvbmVzIGFyZSBpc1Jlc2V0IGFuZCBpc1JlbW92ZWQuIFdlIHdpbGwgbm90IG91dHB1dCByZW1vdmVkIGxpbmVzCisgIC8vc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUxaSUxaSUxaSUxaSAiLCBpc0NvbnRyYWN0aW9uLCBpc0V4cGFuc2lvbiwgaXNSZW1vdmVkLCBpc1Jlc2V0KTsKKyAgLy9yZXNMZW4gKz0gNTsKKyAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUxaSUxaSAiLCBpc1JlbW92ZWQsIGlzUmVzZXQpOworICByZXNMZW4gKz0gMzsKKworICAvLyBmaXJzdCBhbmQgbGFzdCBDQworICAvLyBjYW4gYmUgY2FsY3VsYXRlZCBvbiByZWFkaW5nCisgIC8vc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUwM2kgJTAzaSAiLCBmaXJzdENDLCBsYXN0Q0MpOworICAvL3Jlc0xlbiArPSA4OworCisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDhYIiwgZXhwSW5kZXgpOworICByZXNMZW4gKz0gODsKKworICBidWZmW3Jlc0xlbl0gPSAwOworCisgIHJldHVybiByZXNMZW47Cit9CisKK3ZvaWQKK0xpbmU6OmluaXRGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKmJ1ZmYsIGludDMyX3QsIFVFcnJvckNvZGUgJikKK3sKKyAgaW50MzJfdCBidWZJbmRleCA9IDA7CisgIGludDMyX3QgaSA9IDA7CisKKyAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIlMDRYIiwgJm5hbWVbaV0pOworICBpKys7CisgIGJ1ZkluZGV4ICs9IDQ7CisgIHdoaWxlKGJ1ZmZbYnVmSW5kZXhdICE9ICcvJykgeworICAgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiICUwNFgiLCAmbmFtZVtpXSk7CisgICAgaSsrOworICAgIGJ1ZkluZGV4ICs9IDU7CisgIH0KKyAgbGVuID0gaTsKKyAgbmFtZVtsZW5dID0gMDsKKyAgYnVmSW5kZXgrKzsKKworICBpZihpID4gMSkgeworICAgIGlzQ29udHJhY3Rpb24gPSBUUlVFOworICB9IGVsc2UgeworICAgIGlzQ29udHJhY3Rpb24gPSBGQUxTRTsKKyAgfQorCisgIGlmKGJ1ZmZbYnVmSW5kZXhdID09ICc7JykgeworICAgIGlzRXhwYW5zaW9uID0gRkFMU0U7CisgICAgYnVmSW5kZXggKz0gMjsKKyAgICBleHBhbnNpb25TdHJpbmdbMF0gPSAwOworICAgIGV4cExlbiA9IDA7CisgIH0gZWxzZSB7CisgICAgaSA9IDA7CisgICAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIlMDRYIiwgJmV4cGFuc2lvblN0cmluZ1tpXSk7CisgICAgaSsrOworICAgIGJ1ZkluZGV4ICs9IDQ7CisgICAgd2hpbGUoYnVmZltidWZJbmRleF0gIT0gJzsnKSB7CisgICAgICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiAlMDRYIiwgJmV4cGFuc2lvblN0cmluZ1tpXSk7CisgICAgICBpKys7CisgICAgICBidWZJbmRleCArPSA1OworICAgIH0KKyAgICBleHBMZW4gPSBpOworICAgIGV4cGFuc2lvblN0cmluZ1tleHBMZW5dID0gMDsKKyAgICBidWZJbmRleCArPSAyOworICB9CisgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiJTAyaSAiLCAmc3RyZW5ndGgpOworICBidWZJbmRleCArPSAzOworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwMmkiLCAmc3RyZW5ndGhGcm9tRW1wdHkpOworICBidWZJbmRleCArPSAyOworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwMmkiLCAmY3VtdWxhdGl2ZVN0cmVuZ3RoKTsKKyAgYnVmSW5kZXggKz0gMjsKKyAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIlMDJpIiwgJmV4cFN0cmVuZ3RoKTsKKyAgYnVmSW5kZXggKz0gMjsKKworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUxaSUxaSAiLCAmaXNSZW1vdmVkLCAmaXNSZXNldCk7CisgIGJ1ZkluZGV4ICs9IDM7CisKKyAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIlMDhYIiwgJmV4cEluZGV4KTsKKyAgYnVmSW5kZXggKz0gODsKKworICAvLyBjYWxjdWxhdGUgZmlyc3QgYW5kIGxhc3QgQ0MKKyAgVUNoYXIzMiBjOworICBVMTZfR0VUKG5hbWUsIDAsIDAsIGxlbiwgYyk7CisgIGZpcnN0Q0MgPSB1X2dldENvbWJpbmluZ0NsYXNzKGMpOworICBVMTZfR0VUKG5hbWUsIDAsIGxlbi0xLCBsZW4sIGMpOworICBsYXN0Q0MgPSB1X2dldENvbWJpbmluZ0NsYXNzKGMpOworfQorCit2b2lkCitMaW5lOjpzd2FwQ2FzZShVQ2hhciAqc3RyaW5nLCBpbnQzMl90ICZzTGVuKQoreworICBVQ2hhcjMyIGMgPSAwOworICBpbnQzMl90IGkgPSAwLCBqID0gMDsKKyAgVUNoYXIgYnVmZlsyNTZdOworICBVQm9vbCBpc0Vycm9yID0gRkFMU0U7CisgIHdoaWxlKGkgPCBzTGVuKSB7CisgICAgVTE2X05FWFQoc3RyaW5nLCBpLCBzTGVuLCBjKTsKKyAgICBpZih1X2lzVVVwcGVyY2FzZShjKSkgeworICAgICAgYyA9IHVfdG9sb3dlcihjKTsKKyAgICB9IGVsc2UgaWYodV9pc1VMb3dlcmNhc2UoYykpIHsKKyAgICAgIGMgPSB1X3RvdXBwZXIoYyk7CisgICAgfQorICAgIFUxNl9BUFBFTkQoYnVmZiwgaiwgMjU2LCBjLCBpc0Vycm9yKTsKKyAgfQorICBidWZmW2pdID0gMDsKKyAgdV9zdHJjcHkoc3RyaW5nLCBidWZmKTsKKyAgc0xlbiA9IGo7Cit9CisKKwordm9pZAorTGluZTo6c3dhcENhc2UoKQoreworICBzd2FwQ2FzZShuYW1lLCBsZW4pOworICBzd2FwQ2FzZShleHBhbnNpb25TdHJpbmcsIGV4cExlbik7Cit9CisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OmR1bXBTb3J0a2V5KCkgCit7CisKKyAgY2hhciBidWZmZXJbMjU2XTsKKyAgY2hhciAqYnVmZiA9IGJ1ZmZlcjsKKyAgKmJ1ZmYgPSAwOworICB1aW50OF90ICprZXkgPSBzb3J0S2V5OworICBpZihzb3J0S2V5KSB7CisgICAgd2hpbGUoKmtleSkgeworICAgICAgc3ByaW50ZihidWZmLCAiJTAyWCAiLCAqa2V5KTsKKyAgICAgIGtleSsrOworICAgICAgYnVmZiArPSAzOworICAgICAgaWYoYnVmZiAtIGJ1ZmZlciA+IDI1MikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIFVuaWNvZGVTdHJpbmcoYnVmZmVyKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29scHJvYmUvbGluZS5oIGIvY29scHJvYmUvbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2UyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9saW5lLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDAzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgbGluZS5oCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDMvMTgvMjAwMyAgd2VpdiAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvLworLy8gICBjbGFzcyBMaW5lCisvLworLy8gICAgICBFYWNoIGxpbmUgZnJvbSB0aGUgc291cmNlIGZpbGUgKGNvbnRhaW5pbmcgYSBuYW1lLCBwcmVzdW1hYmx5KSBnZXRzCisvLyAgICAgIG9uZSBvZiB0aGVzZSBzdHJ1Y3RzLgorLy8KKworI2lmbmRlZiBDT0xQUk9CRV9MSU5FX0gKKyNkZWZpbmUgQ09MUFJPQkVfTElORV9ICisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2wuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNoYXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgImNvbHByb2JlLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGludCBNQVhfRVhQQU5TSU9OX1BSRUZJWEVTID0gMTA7CisKK2NsYXNzICBMaW5lIHsKK3B1YmxpYzoKKyAgc3RhdGljIHZvaWQgY29weUFycmF5KExpbmUgKmRlc3QsIGNvbnN0IExpbmUgKnNyYywgaW50MzJfdCBzaXplKTsKKyAgTGluZSgpOworICBMaW5lKGNvbnN0IExpbmUgJm90aGVyKTsKKyAgTGluZShjb25zdCBVQ2hhciogbmFtZSwgaW50MzJfdCBsZW4pOworICBMaW5lKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0cmluZyk7CisgIExpbmUoY29uc3QgVUNoYXIgbmFtZSk7CisgIExpbmUoY29uc3QgY2hhciAqYnVmZiwgaW50MzJfdCBidWZmTGVuLCBVRXJyb3JDb2RlICZzdGF0dXMpOworICB+TGluZSgpOworICBMaW5lICYgb3BlcmF0b3I9KGNvbnN0IExpbmUgJm90aGVyKTsKKyAgVUJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lICZvdGhlcikgY29uc3Q7CisgIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgTGluZSAmb3RoZXIpIGNvbnN0OworICB2b2lkIHNldFRvQ29uY2F0KGNvbnN0IExpbmUgKmZpcnN0LCBjb25zdCBMaW5lICpzZWNvbmQpOworICB2b2lkIHNldE5hbWUoY29uc3QgVUNoYXIqIG5hbWUsIGludDMyX3QgbGVuKTsKKyAgVW5pY29kZVN0cmluZyB0b1N0cmluZyhVQm9vbCBwcmV0dHkgPSBGQUxTRSk7CisgIFVuaWNvZGVTdHJpbmcgdG9CdW5kbGVTdHJpbmcoKTsKKyAgVW5pY29kZVN0cmluZyB0b0hUTUxTdHJpbmcoKTsKKyAgaW50MzJfdCB3cml0ZShjaGFyICpidWZmLCBpbnQzMl90IGJ1ZmZMZW4sIFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIHZvaWQgaW5pdEZyb21TdHJpbmcoY29uc3QgY2hhciAqYnVmZiwgaW50MzJfdCBidWZmTGVuLCBVRXJyb3JDb2RlICZzdGF0dXMpOworICAKKworICBVbmljb2RlU3RyaW5nIHN0cmVuZ3RoSW5kZW50KFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCwgaW50IGluZGVudFNpemUsIFVuaWNvZGVTdHJpbmcgJnJlc3VsdCk7CisgIFVuaWNvZGVTdHJpbmcgc3RyZW5ndGhUb1N0cmluZyhVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGgsIFVCb29sIHByZXR0eSwgVUJvb2wgaHRtbCA9IEZBTFNFKTsKKyAgVW5pY29kZVN0cmluZyBzdHJpbmdUb05hbWUoVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4pOworICB2b2lkIHNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0cmluZyk7CisgIHZvaWQgc2V0VG8oY29uc3QgVUNoYXIzMiBuKTsKKyAgVUJvb2wgZXF1YWxzKGNvbnN0IExpbmUgJm90aGVyKSBjb25zdDsKKyAgTGluZSAqbmV4dEludGVyZXN0aW5nKCk7CisgIHZvaWQgYXBwZW5kKGNvbnN0IFVDaGFyIG4pOworICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciogbiwgaW50MzJfdCBsZW5ndGgpOworICB2b2lkIGFwcGVuZChjb25zdCBMaW5lICZsKTsKKyAgdm9pZCBjbGVhcigpOworICB2b2lkIHN3YXBDYXNlKCk7CisgIHZvaWQgc3dhcENhc2UoVUNoYXIgKnN0cmluZywgaW50MzJfdCAmc0xlbik7CisgIFVuaWNvZGVTdHJpbmcgZHVtcFNvcnRrZXkoKTsKKyAgdm9pZCBpbml0KCk7CisKKyAgCitwdWJsaWM6CisgICAgVUNoYXIgICAgIG5hbWVbMjVdOworICAgIGludDMyX3QgICBsZW47CisgICAgVUNoYXIgICAgIGV4cGFuc2lvblN0cmluZ1syNV07CisgICAgaW50MzJfdCAgIGV4cExlbjsKKworICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aDsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGhGcm9tRW1wdHk7CisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIGN1bXVsYXRpdmVTdHJlbmd0aDsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgZXhwU3RyZW5ndGg7CisKKyAgICBMaW5lICpwcmV2aW91czsKKyAgICBMaW5lICpuZXh0OworCisgICAgLy8gSW4gY2FzZSB0aGlzIGVsZW1lbnQgaXMgYSBjb250cmFjdGlvbgorICAgIC8vIHdlIGtlZXAgYSBwb2ludGVyIGF0IHdoaWNoIGxpbmVzIHdlcmUgY29tcG9uZW50cworICAgIExpbmUgKmxlZnQ7CisgICAgTGluZSAqcmlnaHQ7CisKKyAgICBVQm9vbCAgIGlzQ29udHJhY3Rpb247CisgICAgVUJvb2wgICBpc0V4cGFuc2lvbjsKKyAgICBVQm9vbCAgIGlzUmVtb3ZlZDsKKyAgICBVQm9vbCAgIGlzUmVzZXQ7CisKKyAgICBpbnQzMl90IGV4cEluZGV4OworICAgIHVpbnQ4X3QgZmlyc3RDQzsKKyAgICB1aW50OF90IGxhc3RDQzsKKworICAgIHVpbnQ4X3QgICAqc29ydEtleTsKK3B1YmxpYzoKKyAgc3RhdGljIFVuaWNvZGVTZXQgKm5lZWRzUXVvdGluZzsKK307CisKKworI2VuZGlmIC8vQ09MUFJPQkVfTElORV9ICmRpZmYgLS1naXQgYS9jb2xwcm9iZS9sb2NhbGUudHh0IGIvY29scHJvYmUvbG9jYWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRhYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvbG9jYWxlLnR4dApAQCAtMCwwICsxLDI0MSBAQAorYWYKK2FmX1pBCithbQorYW1fRVQKK2FyCithcl9BRQorYXJfQkgKK2FyX0RaCithcl9FRworYXJfSU4KK2FyX0lRCithcl9KTworYXJfS1cKK2FyX0xCCithcl9MWQorYXJfTUEKK2FyX09NCithcl9RQQorYXJfU0EKK2FyX1NECithcl9TWQorYXJfVE4KK2FyX1lFCitiZQorYmVfQlkKK2JnCitiZ19CRworYm4KK2JuX0lOCitjYQorY2FfRVMKKyNjYV9FU19QUkVFVVJPCitjcworY3NfQ1oKK2RhCitkYV9ESworZGUKK2RlX0FUCisjZGVfQVRfUFJFRVVSTworZGVfQkUKK2RlX0NICitkZV9ERQorI2RlX0RFX1BSRUVVUk8KK2RlX0xVCisjZGVfTFVfUFJFRVVSTworZGVfX1BIT05FQk9PSworZWwKK2VsX0dSCisjZWxfR1JfUFJFRVVSTworZW4KK2VuX0FVCitlbl9CRQorI2VuX0JFX1BSRUVVUk8KK2VuX0JXCitlbl9DQQorZW5fR0IKKyNlbl9HQl9FVVJPCitlbl9ISworZW5fSUUKKyNlbl9JRV9QUkVFVVJPCitlbl9JTgorZW5fTVQKK2VuX05aCitlbl9QSAorZW5fU0cKK2VuX1VTCitlbl9VU19QT1NJWAorZW5fVkkKK2VuX1pBCitlbl9aVworZW8KK2VzCitlc19BUgorZXNfQk8KK2VzX0NMCitlc19DTworZXNfQ1IKK2VzX0RPCitlc19FQworZXNfRVMKKyNlc19FU19QUkVFVVJPCitlc19HVAorZXNfSE4KK2VzX01YCitlc19OSQorZXNfUEEKK2VzX1BFCitlc19QUgorZXNfUFkKK2VzX1NWCitlc19VUworZXNfVVkKK2VzX1ZFCitlc19fVFJBRElUSU9OQUwKK2V0CitldF9FRQorZXUKK2V1X0VTCisjZXVfRVNfUFJFRVVSTworZmEKK2ZhX0FGCitmYV9JUgorZmkKK2ZpX0ZJCisjZmlfRklfUFJFRVVSTworZm8KK2ZvX0ZPCitmcgorZnJfQkUKKyNmcl9CRV9QUkVFVVJPCitmcl9DQQorZnJfQ0gKK2ZyX0ZSCisjZnJfRlJfUFJFRVVSTworZnJfTFUKKyNmcl9MVV9QUkVFVVJPCitnYQorZ2FfSUUKKyNnYV9JRV9QUkVFVVJPCitnbAorZ2xfRVMKKyNnbF9FU19QUkVFVVJPCitndQorZ3VfSU4KK2d2Citndl9HQgoraGUKK2hlX0lMCitoaQoraGlfSU4KK2hpX19ESVJFQ1QKK2hyCitocl9IUgoraHUKK2h1X0hVCitoeQoraHlfQU0KK2h5X0FNX1JFVklTRUQKK2lkCitpZF9JRAoraXMKK2lzX0lTCitpdAoraXRfQ0gKK2l0X0lUCisjaXRfSVRfUFJFRVVSTworamEKK2phX0pQCisjamFfSlBfVFJBRElUSU9OQUwKK2trX0taCitrbAora2xfR0wKK2tuCitrbl9JTgora28KK2tvX0tSCitrb2sKK2tva19JTgora3cKK2t3X0dCCitsdAorbHRfTFQKK2x2Citsdl9MVgorbWsKK21rX01LCittcgorbXJfSU4KK21zX01ZCittdAorbXRfTVQKK25iCituYl9OTworbmwKK25sX0JFCisjbmxfQkVfUFJFRVVSTworbmxfTkwKKyNubF9OTF9QUkVFVVJPCitubgorbm5fTk8KK29tCitvbV9FVAorb21fS0UKK3BsCitwbF9QTAorcHMKK3BzX0FGCitwdAorcHRfQlIKK3B0X1BUCisjcHRfUFRfUFJFRVVSTworcm8KK3JvX1JPCitydQorcnVfUlUKK3J1X1VBCitzaAorc2hfWVUKK3NrCitza19TSworc2wKK3NsX1NJCitzbworc29fREoKK3NvX0VUCitzb19LRQorc29fU08KK3NxCitzcV9BTAorc3IKK3NyX1lVCitzdgorc3ZfRkkKK3N2X1NFCitzdworc3dfS0UKK3N3X1RaCit0YQordGFfSU4KK3RlCit0ZV9JTgordGgKK3RoX1RICisjdGhfVEhfVFJBRElUSU9OQUwKK3RpCit0aV9FUgordGlfRVQKK3RyCit0cl9UUgordWsKK3VrX1VBCit2aQordmlfVk4KK3poCit6aF9DTgoremhfSEsKK3poX01PCit6aF9TRworemhfVFcKK3poX1RXX1NUUk9LRQoremhfX1BJTllJTgpkaWZmIC0tZ2l0IGEvY29scHJvYmUvbG9uZ25hbWUuY3BwIGIvY29scHJvYmUvbG9uZ25hbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmE0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9sb25nbmFtZS5jcHAKQEAgLTAsMCArMSw0OCBAQAorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisjaW5jbHVkZSAidW5pY29kZS9sb2NpZC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLAorICAgICBjaGFyKiBhcmd2W10pCit7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBjb25zdCBjaGFyICpsb2MgPSBhcmd2WzFdOworICBpbnQzMl90IGhhc0NvdW50cnk7CisgIFVDb252ZXJ0ZXIgKmNvbnYgPSB1Y252X29wZW4oInV0ZjgiLCAmc3RhdHVzKTsKKworICAKKyAgVUNoYXIgVUJ1ZmZlclsyNTZdOworICBpbnQzMl90IHVCdWZMZW4gPSAwOworICBjaGFyIGJ1ZmZlclsyNTZdOworICBpbnQzMl90IGJ1ZkxlbiA9IDA7CisKKyAgdUJ1ZkxlbiA9IHVsb2NfZ2V0RGlzcGxheUxhbmd1YWdlKGxvYywgImVuIiwgVUJ1ZmZlciwgMjU2LCAmc3RhdHVzKTsKKyAgYnVmTGVuID0gdWNudl9mcm9tVUNoYXJzKGNvbnYsIGJ1ZmZlciwgMjU2LCBVQnVmZmVyLCB1QnVmTGVuLCAmc3RhdHVzKTsKKyAgLy91X1VDaGFyc1RvQ2hhcnMoVUJ1ZmZlciwgIGJ1ZmZlciwgdUJ1Zkxlbik7CisgIGJ1ZmZlcltidWZMZW5dID0gMDsKKyAgcHJpbnRmKCIlcyIsIGJ1ZmZlcik7CisKKyAgaWYoaGFzQ291bnRyeSA9IHVsb2NfZ2V0Q291bnRyeShsb2MsIGJ1ZmZlciwgMjU2LCAmc3RhdHVzKSkgeworICAgIHVCdWZMZW4gPSB1bG9jX2dldERpc3BsYXlDb3VudHJ5KGxvYywgImVuIiwgVUJ1ZmZlciwgMjU2LCAmc3RhdHVzKTsKKyAgICBidWZMZW4gPSB1Y252X2Zyb21VQ2hhcnMoY29udiwgYnVmZmVyLCAyNTYsIFVCdWZmZXIsIHVCdWZMZW4sICZzdGF0dXMpOworICAgIC8vdV9VQ2hhcnNUb0NoYXJzKFVCdWZmZXIsICBidWZmZXIsIHVCdWZMZW4pOworICAgIGJ1ZmZlcltidWZMZW5dID0gMDsKKyAgICBwcmludGYoIl8lcyIsIGJ1ZmZlcik7CisgIH0KKworICBpZih1bG9jX2dldFZhcmlhbnQobG9jLCBidWZmZXIsIDI1NiwgJnN0YXR1cykpIHsKKyAgICB1QnVmTGVuID0gdWxvY19nZXREaXNwbGF5VmFyaWFudChsb2MsICJlbiIsIFVCdWZmZXIsIDI1NiwgJnN0YXR1cyk7CisgICAgYnVmTGVuID0gdWNudl9mcm9tVUNoYXJzKGNvbnYsIGJ1ZmZlciwgMjU2LCBVQnVmZmVyLCB1QnVmTGVuLCAmc3RhdHVzKTsKKyAgICAvL3VfVUNoYXJzVG9DaGFycyhVQnVmZmVyLCAgYnVmZmVyLCB1QnVmTGVuKTsKKyAgICBidWZmZXJbYnVmTGVuXSA9IDA7CisgICAgaWYoIWhhc0NvdW50cnkpIHsKKyAgICAgIHByaW50ZigiXyIpOworICAgIH0KKyAgICBwcmludGYoIl8lcyIsIGJ1ZmZlcik7CisgIH0KKyAgcHJpbnRmKCJcbiIpOworCisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS9yZWFkbWUudHh0IGIvY29scHJvYmUvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI5MTRhCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvcmVhZG1lLnR4dApAQCAtMCwwICsxLDQgQEAKK1RoZXJlIGFyZSBzZXZlcmFsIHRvb2xzIGluIHRoaXMgZGlyZWN0b3J5IHRoYXQgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGdlbmVyYXRlIGNvbGxhdGlvbiBkYXRhOgorZXh0cmFjdENvbGxhdGlvbkRhdGEucGwgLSBwZXJsIHNjcmlwdCB0aGF0IHJlYWRzIElDVSByZXNvdXJjZSBidW5kbGUgZmlsZXMgYW5kIG91dHB1dHMgYSBsb2NhbGVfY29sbGF0aW9uLmh0bWwgZmlsZSBpZiBjb2xsYXRpb24gZWxlbWVudHMgYXJlIHByZXNlbnQgaW4gdGhlIGxvY2FsZS4gQXJndW1lbnRzIGFyZSB0aGUgbGlzdCBvZiBsb2NhbGUgc291cmNlIGZpbGVzICgqLnR4dCkgdGhhdCBuZWVkIHRvIGJlIHByb2Nlc3NlZC4KK2NyZWF0ZUNvbXBhcmlzb25UYWJsZXMucGwgLSB0YWtlcyBhIGxvY2FsZSBuYW1lLiBMb29rcyBpbiBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBjb250YWluIHRoZSBodG1sIGRhdGEgcHJvZHVjZWQgYnkgY29scHJvYmUgb3IgZXh0cmFjdENvbGxhdGlvbkRhdGEuCit0YWJsZVN0YXJ0ZXIucGwgLSBpbnZva2VzIGNyZWF0ZUNvbXBhcmlzb25UYWJsZXMucGwgd2l0aCBhIGxpc3Qgb2YgbG9jYWxlcy4gCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9zb3J0ZWRsaW5lcy5jcHAgYi9jb2xwcm9iZS9zb3J0ZWRsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmM2RmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3NvcnRlZGxpbmVzLmNwcApAQCAtMCwwICsxLDIwNjcgQEAKKyNpbmNsdWRlICJzb3J0ZWRsaW5lcy5oIgorCitzdGF0aWMgaW50IGNvZGVQb2ludENtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgIHJldHVybiB1X3N0cmNtcCgoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5uYW1lKTsKK30KKworU29ydGVkTGluZXM6OlNvcnRlZExpbmVzKGNvbnN0IFVuaWNvZGVTZXQgJnNldCwgY29uc3QgVW5pY29kZVNldCAmZXhjbHVkZUJvdW5kcywgY29uc3QgU3RyZW5ndGhQcm9iZSAmcHJvYmUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIFVQcmludGVyICpsb2dnZXIsIFVQcmludGVyICpkZWJ1ZykgOgordG9Tb3J0KE5VTEwpLAordG9Tb3J0Q2FwYWNpdHkoMCksCitsaW5lcyhOVUxMKSwKK3NpemUoMCksCitjYXBhY2l0eSgwKSwKK3JlcGVydG9pcmUoc2V0KSwKK2V4Y2x1ZGVCb3VuZHMoZXhjbHVkZUJvdW5kcyksCitwcm9iZShwcm9iZSksCitmaXJzdChOVUxMKSwKK2xhc3QoTlVMTCksCitsb2dnZXIobG9nZ2VyKSwKK2RlYnVnKGRlYnVnKSwKK2NvbnRyYWN0aW9uc1RhYmxlKE5VTEwpLAorZHVwbGljYXRvcnMoTlVMTCksCittYXhFeHBhbnNpb25QcmVmaXhTaXplKDApLAord29yZFNvcnQoRkFMU0UpLAorZnJlbmNoU2Vjb25kYXJ5KEZBTFNFKSwKK3VwcGVyRmlyc3QoRkFMU0UpLAorc29ydGtleXMoTlVMTCksCitzb3J0a2V5T2Zmc2V0KDApCit7CisgIG1lbXNldChVQiwgMCwgc2l6ZW9mKFVCKSk7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IFVDT0xfT0ZGOyBpKyspIHsKKyAgICBVQltpXSA9ICZlbXB0eTsKKyAgfQorICBpbml0KCk7Cit9CisKK1NvcnRlZExpbmVzOjp+U29ydGVkTGluZXMoKQoreworICBkZWxldGVbXSBsaW5lczsKKyAgaWYoc29ydGtleXMpIHsKKyAgICBkZWxldGVbXSBzb3J0a2V5czsKKyAgfQorICBpZih0b1NvcnQpIHsKKyAgICBkZWxldGVbXSB0b1NvcnQ7CisgIH0KKyAgaWYoY29udHJhY3Rpb25zVGFibGUpIHsKKyAgICBkZWxldGUgY29udHJhY3Rpb25zVGFibGU7CisgIH0KKyAgaWYoZHVwbGljYXRvcnMpIHsKKyAgICBkZWxldGUgZHVwbGljYXRvcnM7CisgIH0KK30KKwordm9pZAorU29ydGVkTGluZXM6OmdldEJvdW5kcyhVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgLy8gZmlyc3Qgc29ydCB0aHJvdWdoIHRoZSBzZXQKKyAgZGVidWctPmxvZyh0b1N0cmluZygpLCBUUlVFKTsKKyAgaW50MzJfdCBpID0gMCwgaiA9IDA7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCA9IFVDT0xfT0ZGOworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBpZih0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5IDwgc3RyZW5ndGgpIHsKKyAgICAgIGlmKGkgJiYgc3RyZW5ndGggPCBVQ09MX09GRikgeworICAgICAgICAvL3Vfc3RyY3B5KFVCW3N0cmVuZ3RoXSwgdG9Tb3J0W2ktMV0tPm5hbWUpOworICAgICAgICBqID0gMTsKKyAgICAgICAgd2hpbGUoZXhjbHVkZUJvdW5kcy5jb250YWlucyhVbmljb2RlU3RyaW5nKHRvU29ydFtpLWpdLT5uYW1lLCB0b1NvcnRbaS1qXS0+bGVuKSkpIHsKKyAgICAgICAgICBqKys7CisgICAgICAgIH0KKyAgICAgICAgVUJbc3RyZW5ndGhdID0gdG9Tb3J0W2ktal07CisgICAgICB9CisgICAgICBzdHJlbmd0aCA9IHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHk7CisgICAgICBpZihzdHJlbmd0aCA9PSBVQ09MX1BSSU1BUlkpIHsKKyAgICAgICAgcHJvYmUuU0UgPSB0b1NvcnRbaV0tPm5hbWVbMF07CisgICAgICB9CisgICAgfQorICB9CisgIC8vdV9zdHJjcHkoVUJbc3RyZW5ndGhdLCB0b1NvcnRbc2l6ZS0xXS0+bmFtZSk7CisgIC8vIGEgZGlmZmVyZW50IHNvbHV0aW9uIGZvciBib3VuZHM6IGdvIGZyb20gZW5kIGFuZCBzZWUgaWYgdGhlIGd1eXMgb24gdGhlIHRvcAorICAvLyBjYXVzZSBkdXBsaWNhdGlvbiBmb3IgdGhpbmdzCisgIFVDaGFyIGR1cGNoW10gPSB7IDB4MDAyMCwgMHgwMDMwLCAweDAwNDIsIDB4MDA1MSwgMHgwMDYyLCAweDAwNzEsIDB4MDM5MSwgMHgwMzk2LCAweDAzYjEsIDB4MDNiNiB9OworICBqID0gMTsKKyAgTGluZSBkdXA7CisgIExpbmUgYm91bmQ7CisgIGludDMyX3QgZHVwcyA9IDA7CisgIHdoaWxlKGogPCBzaXplKSB7CisgICAgZHVwcyA9IDA7CisgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKGR1cGNoKS9zaXplb2YoZHVwY2hbMF0pOyBpKyspIHsKKyAgICAgIGR1cC5zZXRUbyhkdXBjaFtpXSk7CisgICAgICBkdXAuYXBwZW5kKGR1cGNoW2ldKTsKKyAgICAgIGJvdW5kLnNldFRvKGR1cGNoW2ldKTsKKyAgICAgIGJvdW5kLmFwcGVuZCh0b1NvcnRbc2l6ZS1qXS0+bmFtZSwgdG9Tb3J0W3NpemUtal0tPmxlbik7CisgICAgICBpZihwcm9iZS5nZXRTdHJlbmd0aChkdXAsIGJvdW5kKSA+PSBVQ09MX0lERU5USUNBTCkgeworICAgICAgICBkdXBzKys7CisgICAgICB9CisgICAgfQorICAgIGlmKGR1cHMgPT0gMCkgeworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmKCFkdXBsaWNhdG9ycykgeworICAgICAgICBkdXBsaWNhdG9ycyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgIH0KKyAgICAgIGR1cGxpY2F0b3JzLT5wdXQoVW5pY29kZVN0cmluZyh0b1NvcnRbc2l6ZS1qXS0+bmFtZSwgdG9Tb3J0W3NpemUtal0tPmxlbiksICZ0b1NvcnRbc2l6ZS1qXSwgc3RhdHVzKTsKKyAgICAgIGRlYnVnLT5sb2codG9Tb3J0W3NpemUtal0tPnRvU3RyaW5nKCkpOworICAgICAgZGVidWctPmxvZygiIGlzIG5vdCBnb29kIGVub3VnaCB0byBiZSBhbiB1cHBlciBib3VuZFxuIik7CisgICAgICBqKys7CisgICAgfQorICB9CisgIGlmKGogPT0gc2l6ZSkgeworICAgIGRlYnVnLT5sb2coIk9pISBJJ20gaGFsbHVjaW5hdGluZy4gV2lsbCB1c2UgdGhlIGZpcnN0IHVwcGVyIGJvdW5kIik7CisgICAgZGVsZXRlIGR1cGxpY2F0b3JzOworICAgIGR1cGxpY2F0b3JzID0gTlVMTDsKKyAgICBqID0gMTsKKyAgfQorLyoKKyAgaiA9IDE7CisgIHdoaWxlKGV4Y2x1ZGVCb3VuZHMuY29udGFpbnMoVW5pY29kZVN0cmluZyh0b1NvcnRbc2l6ZS1qXS0+bmFtZSwgdG9Tb3J0W3NpemUtal0tPmxlbikpKSB7CisgICAgaisrOworICB9CisqLworICBVQltzdHJlbmd0aF0gPSB0b1NvcnRbc2l6ZS1qXTsKKyAgZm9yKGkgPSAwOyBpIDwgVUNPTF9PRkY7IGkrKykgeworICAgIGlmKFVCW2ldKSB7CisgICAgICAvL2RlYnVnLT5sb2coVUJbaV0sIFRSVUUpOworICAgICAgZGVidWctPmxvZyhVQltpXS0+dG9TdHJpbmcoVFJVRSksIFRSVUUpOworICAgIH0KKyAgfQorfQorCisvLyBjbGFzc2lmaWVzIHJlcGVydG9pcmUgYWNjb3JkaW5nIHRvIHRoZSBzdHJlbmd0aCBvZiB0aGVpciBkaWZmZXJlbmNlCisvLyBmcm9tIHRoZSBlbXB0eSBzdHJpbmcKK3ZvaWQKK1NvcnRlZExpbmVzOjpjbGFzc2lmeVJlcGVydG9pcmUoKSB7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJvbmdlc3RTdHJlbmd0aEZyb21FbXB0eSA9IFVDT0xfT0ZGOworICBpbnQzMl90IGxhc3RDaGFuZ2UgPSAwOworICBpbnQzMl90IGkgPSAwLCBqID0gMDsKKyAgd2hpbGUoaSA8IHNpemUpIC8vICYmIHByb2JlLmRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKCp0b1NvcnRbaV0pID4gVUNPTF9QUklNQVJZKSAKKyAgeworICAgIHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPSBwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZygqdG9Tb3J0W2ldKTsKKyAgICBpZih0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5IDwgc3Ryb25nZXN0U3RyZW5ndGhGcm9tRW1wdHkpIHsKKyAgICAgIHN0cm9uZ2VzdFN0cmVuZ3RoRnJvbUVtcHR5ID0gdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eTsKKyAgICAgIGxhc3RDaGFuZ2UgPSBpOworICAgIH0gZWxzZSBpZiAodG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eSA+IHN0cm9uZ2VzdFN0cmVuZ3RoRnJvbUVtcHR5KSB7IAorICAgICAgLy8gdGhlcmUgaXMgYSBwcm9ibGVtIGluIGRldGVjdGlvbi4gTW9zdCBwcm9iYWJseSBhIHF1YXRlcm5hcnkuCisgICAgICAvLyB3aHkgZG9uJ3Qgd2UgdHJ5IHRvIGludGVycG9sYXRlCisgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgbmV4dFN0cmVuZ3RoID0gVUNPTF9PRkY7CisgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgcHJldlN0cmVuZ3RoID0gVUNPTF9PRkY7CisgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgc3QgPSBVQ09MX09GRjsKKworICAgICAgbG9nZ2VyLT5sb2coIkludGVycG9sYXRpbmcgdG8gZ2V0IHRoZSBkaXN0YW5jZSBmcm9tIGVtcHR5IGZvciBMaW5lICIpOworICAgICAgbG9nZ2VyLT5sb2codG9Tb3J0W2ldLT50b1N0cmluZyhUUlVFKSwgVFJVRSk7CisKKyAgICAgIGlmKGkpIHsKKyAgICAgICAgc3QgPSBwcm9iZS5nZXRTdHJlbmd0aCgqdG9Tb3J0W2ktMV0sICp0b1NvcnRbaV0pOworICAgICAgICBpZihzdCA9PSBVQ09MX09GRikgeworICAgICAgICAgIGxvZ2dlci0+bG9nKCJDYW5ub3QgZGVkdWNlIGRpc3RhbmNlIGZyb20gZW1wdHkgdXNpbmcgcHJldmlvdXMgZWxlbWVudC4gU29tZXRoaW5nIGlzIHZlcnkgd3JvbmchIExpbmU6Iik7CisgICAgICAgICAgbG9nZ2VyLT5sb2codG9Tb3J0W2ldLT50b1N0cmluZyhUUlVFKSwgVFJVRSk7CisgICAgICAgIH0gZWxzZSBpZihzdCA9PSBVQ09MX0lERU5USUNBTCB8fCBzdCA+PSB0b1NvcnRbaS0xXS0+c3RyZW5ndGhGcm9tRW1wdHkpIHsKKyAgICAgICAgICBwcmV2U3RyZW5ndGggID0gdG9Tb3J0W2ktMV0tPnN0cmVuZ3RoRnJvbUVtcHR5OworICAgICAgICB9IGVsc2UgaWYoc3QgPCB0b1NvcnRbaS0xXS0+c3RyZW5ndGhGcm9tRW1wdHkpIHsgCisgICAgICAgICAgcHJldlN0cmVuZ3RoID0gc3Q7CisgICAgICAgIH0KKyAgICAgICAgdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9IHByZXZTdHJlbmd0aDsKKyAgICAgIH0KKyAgICAgIGlmKGkgPCBzaXplLTIpIHsKKyAgICAgICAgdG9Tb3J0W2krMV0tPnN0cmVuZ3RoRnJvbUVtcHR5ID0gcHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoKnRvU29ydFtpKzFdKTsKKyAgICAgICAgc3QgPSBwcm9iZS5nZXRTdHJlbmd0aCgqdG9Tb3J0W2krMV0sICp0b1NvcnRbaV0pOworICAgICAgICBpZihzdCA9PSBVQ09MX09GRikgeworICAgICAgICAgIGxvZ2dlci0+bG9nKCJDYW5ub3QgZGVkdWNlIGRpc3RhbmNlIGZyb20gZW1wdHkgdXNpbmcgbmV4dCBlbGVtZW50LiBTb21ldGhpbmcgaXMgdmVyeSB3cm9uZyEgTGluZToiKTsKKyAgICAgICAgICBsb2dnZXItPmxvZyh0b1NvcnRbaV0tPnRvU3RyaW5nKFRSVUUpLCBUUlVFKTsKKyAgICAgICAgfSBlbHNlIGlmKHN0ID09IFVDT0xfSURFTlRJQ0FMIHx8IHN0IDwgdG9Tb3J0W2krMV0tPnN0cmVuZ3RoRnJvbUVtcHR5KSB7CisgICAgICAgICAgbmV4dFN0cmVuZ3RoID0gdG9Tb3J0W2krMV0tPnN0cmVuZ3RoRnJvbUVtcHR5OworICAgICAgICB9IGVsc2UgaWYoc3QgPj0gdG9Tb3J0W2krMV0tPnN0cmVuZ3RoRnJvbUVtcHR5KSB7IAorICAgICAgICAgIG5leHRTdHJlbmd0aCA9IHN0OworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgaWYoaSkgeworICAgICAgICAgIGlmKHByZXZTdHJlbmd0aCAhPSBuZXh0U3RyZW5ndGgpIHsKKyAgICAgICAgICAgIGxvZ2dlci0+bG9nKCJJbmNvbnNpc3RlbnQgcmVzdWx0cyBmcm9tIGludGVycG9sYXRpb24hIFJlc3VsdHMgd2lsbCBtb3N0IGxpa2VseSBiZSB3cm9uZ1xuIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPSBuZXh0U3RyZW5ndGg7CisgICAgICB9CisgICAgICAvKgorICAgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHByb2JsZW1TdHJlbmd0aCA9IFVDT0xfUFJJTUFSWTsKKyAgICAgIGZvcihqID0gbGFzdENoYW5nZTsgaiA8IGkgOyBqKyspIHsKKyAgICAgICAgaWYodG9Tb3J0W2pdLT5zdHJlbmd0aCA+IHByb2JsZW1TdHJlbmd0aCkgeworICAgICAgICAgIHByb2JsZW1TdHJlbmd0aCA9IHRvU29ydFtqXS0+c3RyZW5ndGg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvcihqID0gbGFzdENoYW5nZTsgaiA8IGkgOyBqKyspIHsKKyAgICAgICAgdG9Tb3J0W2pdLT5zdHJlbmd0aEZyb21FbXB0eSA9IHByb2JsZW1TdHJlbmd0aDsKKyAgICAgIH0KKyAgICAgIHN0cm9uZ2VzdFN0cmVuZ3RoRnJvbUVtcHR5ID0gdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eTsKKyAgICAgIGxhc3RDaGFuZ2UgPSBpOworICAgICAgZGVidWctPmxvZygiUHJvYmxlbSBkZXRlY3RlZCBpbiBkaXN0YW5jZXMgZnJvbSBlbXB0eS4gTW9zdCBwcm9iYWJseSB3b3JkIHNvcnQgaXMgb25cbiIpOworICAgICAgKi8KKyAgICAgIHdvcmRTb3J0ID0gVFJVRTsKKyAgICB9CisgICAgaSsrOworICB9CisgIGRlYnVnLT5sb2coIkRpc3RhbmNlcyBmcm9tIGVtcHR5IHN0cmluZ1xuIik7CisgIGRlYnVnLT5sb2codG9TdHJpbmdGcm9tRW1wdHkoKSwgVFJVRSk7Cit9CisKK3ZvaWQKK1NvcnRlZExpbmVzOjphbmFseXNlKFVFcnJvckNvZGUgJnN0YXR1cykgeworICBmcmVuY2hTZWNvbmRhcnkgPSBwcm9iZS5pc0ZyZW5jaFNlY29uZGFyeShzdGF0dXMpOworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgIGxvZ2dlci0+bG9nKCJUZXN0IGZvciBGcmVuY2ggc2Vjb25kYXJ5IGZhaWxlZC4gQmFpbGluZyBvdXQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKyAgbG9nZ2VyLT5sb2coIkZyZW5jaCBzZWNvbmRhcnkgdmFsdWUgaXMgJWlcbiIsIGZyZW5jaFNlY29uZGFyeSwgZnJlbmNoU2Vjb25kYXJ5KTsKKyAgdXBwZXJGaXJzdCA9IHByb2JlLmlzVXBwZXJGaXJzdChzdGF0dXMpOworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgIGxvZ2dlci0+bG9nKCJUZXN0IGZvciB1cHBlciBmaXJzdCBmYWlsZWQuIEJhaWxpbmcgb3V0IVxuIik7CisgICAgcmV0dXJuOworICB9CisgIGxvZ2dlci0+bG9nKCJ1cHBlciBmaXJzdCB2YWx1ZSBpcyAlaVxuIiwgdXBwZXJGaXJzdCwgdXBwZXJGaXJzdCk7CisgIHNvcnQoVFJVRSwgVFJVRSk7CisgIGNsYXNzaWZ5UmVwZXJ0b2lyZSgpOworICBnZXRCb3VuZHMoc3RhdHVzKTsKKyAgLy9zb3J0KFRSVUUsIFRSVUUpOworICBhZGRDb250cmFjdGlvbnNUb1JlcGVydG9pcmUoc3RhdHVzKTsKKyAgLy9zb3J0KFRSVUUsIFRSVUUpOworICBkZWJ1Zy0+bG9nKCJcbioqKiBPcmRlciBhZnRlciBkZXRlY3RpbmcgY29udHJhY3Rpb25zXG5cbiIpOworICBjYWxjdWxhdGVTb3J0S2V5cygpOworICBkZWJ1Zy0+bG9nKHRvUHJldHR5U3RyaW5nKEZBTFNFLCBUUlVFKSwgVFJVRSk7CisgIGRldGVjdEV4cGFuc2lvbnMoKTsKK30KKwordm9pZCBTb3J0ZWRMaW5lczo6aW5pdCgpIAoreworICBzaXplID0gcmVwZXJ0b2lyZS5zaXplKCk7CisgIGNhcGFjaXR5ID0gNSpzaXplOworICBsaW5lcyA9IG5ldyBMaW5lW2NhcGFjaXR5XTsKKyAgaW5pdChyZXBlcnRvaXJlLCBsaW5lcyk7Cit9CisKK3ZvaWQgU29ydGVkTGluZXM6OmluaXQoVW5pY29kZVNldCAmcmVwLCBMaW5lICpsaW4pCit7CisKKyAgVW5pY29kZVNldEl0ZXJhdG9yIGV4ZW1wbGFyVVNldEl0ZXIocmVwKTsKKyAgaW50MzJfdCBzaXplID0gMDsKKworICB3aGlsZShleGVtcGxhclVTZXRJdGVyLm5leHQoKSkgeworICAgIExpbmUgKmN1cnJMaW5lID0gbGluK3NpemU7CisgICAgaWYoZXhlbXBsYXJVU2V0SXRlci5pc1N0cmluZygpKSB7IC8vIHByb2Nlc3MgYSBzdHJpbmcKKyAgICAgIGN1cnJMaW5lLT5zZXRUbyhleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpKTsKKyAgICB9IGVsc2UgeyAvLyBwcm9jZXNzIGNvZGUgcG9pbnQKKyAgICAgIGN1cnJMaW5lLT5zZXRUbyhleGVtcGxhclVTZXRJdGVyLmdldENvZGVwb2ludCgpKTsKKyAgICB9CisgICAgY3VyckxpbmUtPm5hbWVbY3VyckxpbmUtPmxlbl0gPSAwOyAvLyB6ZXJvIHRlcm1pbmF0ZSwgZm9yIG91ciBldmlsIHdheXMKKyAgICAvL2N1cnJMaW5lLT5pbmRleCA9IHNpemU7CisgICAgc2l6ZSsrOworICB9Cit9CisKK3ZvaWQgCitTb3J0ZWRMaW5lczo6c2V0U29ydGluZ0FycmF5KExpbmUgKipzb3J0aW5nQXJyYXksIExpbmUgKmVsZW1lbnRzLCBpbnQzMl90IHNpemVUb1NvcnQpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZVRvU29ydDsgaSsrKSB7CisgICAgc29ydGluZ0FycmF5W2ldID0gJmVsZW1lbnRzW2ldOworICB9Cit9CisKK2ludDMyX3QKK1NvcnRlZExpbmVzOjpzZXRTb3J0aW5nQXJyYXkoTGluZSAqKnNvcnRpbmdBcnJheSwgSGFzaHRhYmxlICp0YWJsZSkgeworICBpbnQzMl90IHNpemUgPSB0YWJsZS0+Y291bnQoKTsKKyAgaW50MzJfdCBoYXNoSW5kZXggPSAtMTsKKyAgY29uc3QgVUhhc2hFbGVtZW50ICpoYXNoRWxlbWVudCA9IE5VTEw7CisgIGludDMyX3QgY291bnQgPSAwOworICB3aGlsZSgoaGFzaEVsZW1lbnQgPSB0YWJsZS0+bmV4dEVsZW1lbnQoaGFzaEluZGV4KSkgIT0gTlVMTCkgeworICAgIHNvcnRpbmdBcnJheVtjb3VudCsrXSA9IChMaW5lICopaGFzaEVsZW1lbnQtPnZhbHVlLnBvaW50ZXI7CisgIH0KKyAgcmV0dXJuIHNpemU7Cit9CisKK3ZvaWQKK1NvcnRlZExpbmVzOjpzb3J0KExpbmUgKipzb3J0aW5nQXJyYXksIGludDMyX3Qgc2l6ZVRvU29ydCwgVUJvb2wgc2V0U3RyZW5ndGhzLCBVQm9vbCBsaW5rKSB7CisgIGludDMyX3QgaSA9IDA7CisgIGludDMyX3QgZXF1YWxTdGFydCA9IDA7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBlcXVhbFN0cmVuZ3RoID0gVUNPTF9PRkY7CisKKyAgcXNvcnQoc29ydGluZ0FycmF5LCBzaXplVG9Tb3J0LCBzaXplb2YoTGluZSAqKSwgcHJvYmUuY29tcGFyZXIpOworCisgIGlmKHNldFN0cmVuZ3RocykgeyAvLyBhbmFseXplIHN0cmVuZ3RocworICAgIGZvcihpID0gMTsgaSA8IHNpemVUb1NvcnQ7IGkrKykgeworICAgICAgc29ydGluZ0FycmF5W2ldLT5zdHJlbmd0aCA9IHByb2JlLmdldFN0cmVuZ3RoKCpzb3J0aW5nQXJyYXlbaS0xXSwgKnNvcnRpbmdBcnJheVtpXSk7CisgICAgfQorICAgIC8vIGZvciBlcXVhbCBndXlzLCBkbyB0aGUgY29kZSBwb2ludCBvcmRlcmluZworICAgIAorICAgIGkgPSAxOworICAgIHdoaWxlKGkgPCBzaXplVG9Tb3J0KSAKKyAgICB7CisgICAgICBpZihzb3J0aW5nQXJyYXlbaV0tPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgIGVxdWFsU3RhcnQgPSBpIC0gMTsKKyAgICAgICAgZXF1YWxTdHJlbmd0aCA9IHNvcnRpbmdBcnJheVtlcXVhbFN0YXJ0XS0+c3RyZW5ndGg7CisgICAgICAgIHNvcnRpbmdBcnJheVtlcXVhbFN0YXJ0XS0+c3RyZW5ndGggPSBVQ09MX0lERU5USUNBTDsKKyAgICAgICAgd2hpbGUoaSA8IHNpemVUb1NvcnQgJiYgc29ydGluZ0FycmF5W2ldLT5zdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkgeworICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICBxc29ydChzb3J0aW5nQXJyYXkrZXF1YWxTdGFydCwgaS1lcXVhbFN0YXJ0LCBzaXplb2YoTGluZSAqKSwgY29kZVBvaW50Q21wKTsKKyAgICAgICAgc29ydGluZ0FycmF5W2VxdWFsU3RhcnRdLT5zdHJlbmd0aCA9IGVxdWFsU3RyZW5ndGg7CisgICAgICB9IGVsc2UgeworICAgICAgICBpKys7CisgICAgICB9CisgICAgfQorICAgIAorICB9CisKKworCisgIGlmKGxpbmspIHsgLy8gZG8gdGhlIGxpbmtpbmcKKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplVG9Tb3J0IC0gMTsgaSsrKSB7CisgICAgICBMaW5lICpjdXJyID0gKihzb3J0aW5nQXJyYXkraSk7CisgICAgICBjdXJyLT5uZXh0ID0gKihzb3J0aW5nQXJyYXkraSsxKTsKKyAgICAgICgqKHNvcnRpbmdBcnJheStpKzEpKS0+cHJldmlvdXMgPSBjdXJyOworICAgIH0KKyAgfQorfQorCit2b2lkCitTb3J0ZWRMaW5lczo6c29ydChVQm9vbCBzZXRTdHJlbmd0aHMsIFVCb29sIGxpbmspIHsKKyAgaWYodG9Tb3J0Q2FwYWNpdHkgPCBzaXplIHx8ICF0b1NvcnQpIHsKKyAgICBpZih0b1NvcnQpIHsKKyAgICAgIGRlbGV0ZVtdIHRvU29ydDsKKyAgICB9CisgICAgdG9Tb3J0ID0gbmV3IExpbmUqW3NpemUqMl07CisgICAgdG9Tb3J0Q2FwYWNpdHkgPSBzaXplKjI7CisgIH0KKworICBzZXRTb3J0aW5nQXJyYXkodG9Tb3J0LCBsaW5lcywgc2l6ZSk7CisgIHNvcnQodG9Tb3J0LCBzaXplLCBzZXRTdHJlbmd0aHMsIGxpbmspOworCisgIGZpcnN0ID0gbGFzdCA9IE5VTEw7CisKKyAgaWYobGluaykgeyAvLyBkbyB0aGUgbGlua2luZworICAgIGZpcnN0ID0gKnRvU29ydDsKKyAgICBsYXN0ID0gKih0b1NvcnQrc2l6ZS0xKTsKKyAgfQorfQorCit2b2lkCitTb3J0ZWRMaW5lczo6dXBkYXRlQm91bmRzKFVuaWNvZGVTZXQgJnNldCkgeworICBMaW5lIGxpbmU7CisgIFVuaWNvZGVTdHJpbmcgczE7CisgIFVuaWNvZGVTZXRJdGVyYXRvciBpdDEoc2V0KTsgCisgIHdoaWxlKGl0MS5uZXh0KCkpIHsKKyAgICBpZighZGVidWctPmlzT24oKSkgeworICAgICAgbG9nZ2VyLT5sb2coIi4iKTsKKyAgICB9CisgICAgaWYoaXQxLmlzU3RyaW5nKCkpIHsgLy8gcHJvY2VzcyBhIHN0cmluZworICAgICAgczEuc2V0VG8oaXQxLmdldFN0cmluZygpKTsKKyAgICB9IGVsc2UgeyAvLyBwcm9jZXNzIGNvZGUgcG9pbnQKKyAgICAgIHMxLnNldFRvKGl0MS5nZXRDb2RlcG9pbnQoKSk7CisgICAgfQorICAgIC8vbGluZS5zZXRUbyhzMSk7CisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoID0gcHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoczEpOworICAgIGlmKHByb2JlLmNvbXBhcmUoVW5pY29kZVN0cmluZyhVQltzdHJlbmd0aF0tPm5hbWUpLCBzMSkgPCAwKSB7CisgICAgICAvLyBUT0RPOiBsZWFrIGhlcmUgLSBmaXhpdCEKKyAgICAgIFVCW3N0cmVuZ3RoXSA9IG5ldyBMaW5lKHMxKTsKKyAgICAgIC8vdV9zdHJjcHkoVUJbc3RyZW5ndGhdLCBzMS5nZXRUZXJtaW5hdGVkQnVmZmVyKCkpOworICAgIH0KKyAgfQorCisKKworfQorCit2b2lkIFNvcnRlZExpbmVzOjphZGRBbGwoTGluZSogdG9BZGQsIGludDMyX3QgdG9BZGRTaXplKSAKK3sKKyAgaWYoc2l6ZSt0b0FkZFNpemUgPiBjYXBhY2l0eSkgeworICAgIGludDMyX3QgZG9Hcm93aW5nQnJlYWtwb2ludCA9IDA7CisgICAgLy8gd2UgbmVlZCB0byBkbyBncm93aW5nIGhlcmUKKyAgfQorICBpbnQzMl90IGkgPSAwOworCisgIGZvcihpID0gMDsgaSA8IHRvQWRkU2l6ZTsgaSsrKSB7CisgICAgbGluZXNbc2l6ZStpXSA9IHRvQWRkW2ldOworICB9CisgIHNpemUgKz0gdG9BZGRTaXplOworfQorCit2b2lkIFNvcnRlZExpbmVzOjpzZXREaXN0YW5jZXNGcm9tRW1wdHkoTGluZSogYXJyYXksIGludDMyX3QgYXJyYXlTaXplKQoreworICBpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykgeworICAgIGFycmF5W2ldLnN0cmVuZ3RoRnJvbUVtcHR5ID0gcHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoYXJyYXlbaV0pOworICB9Cit9CisKKworLy8gYWRkcyBjb250cmFjdGlvbnMgaW4gdG8gcmVwZXJ0b2lyZQoraW50MzJfdCBTb3J0ZWRMaW5lczo6YWRkQ29udHJhY3Rpb25zVG9SZXBlcnRvaXJlKFVFcnJvckNvZGUgJnN0YXR1cykgCit7CisgIGxvZ2dlci0+bG9nKCJcbioqKiBEZXRlY3RpbmcgY29udHJhY3Rpb25zXG5cbiIpOworICBjb250cmFjdGlvbnNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgaW50MzJfdCBub0NvbnRzID0gMDsKKyAgaW50MzJfdCBhbGxvY2F0ZVNpemUgPSA1MCpzaXplOworICAvLyBmaXJzdCBjaGVjayBmb3Igc2ltcGxlIGNvbnRyYWN0aW9ucworICBMaW5lKiBkZWx0YSA9IG5ldyBMaW5lW2FsbG9jYXRlU2l6ZV07CisgIExpbmUqKiBkZWx0YVNvcnRlZCA9IG5ldyBMaW5lKlthbGxvY2F0ZVNpemVdOworICBMaW5lKiBsZXNzZXJUb0FkZFRvID0gbmV3IExpbmVbYWxsb2NhdGVTaXplXTsKKyAgTGluZSogbmV3RGVsdGEgPSBuZXcgTGluZVthbGxvY2F0ZVNpemVdOworICBMaW5lKiogbmV3RGVsdGFTb3J0ZWQgPSBuZXcgTGluZSpbYWxsb2NhdGVTaXplXTsKKyAgTGluZSogZGVsdGFQID0gZGVsdGE7IAorICBMaW5lKiogZGVsdGFQUCA9IGRlbHRhU29ydGVkOworICBMaW5lKiBuZXdEZWx0YVAgPSBuZXdEZWx0YTsKKyAgaW50MzJfdCBkZWx0YVNpemUgPSAwLCBsZXNzZXJUb0FkZFRvU2l6ZSA9IDAsIG5ld0RlbHRhU2l6ZSA9IDA7CisgIGxvZ2dlci0+bG9nKCIrKyBDb250cmFjdGlvbiBkZXRlY3Rpb24gZ2VuZXJhdGlvbiAwXG4iKTsKKyAgbm9Db250cyA9IGRldGVjdENvbnRyYWN0aW9ucyh0b1NvcnQsIHNpemUsIHRvU29ydCwgc2l6ZSwgCisJCQkgICAgICAgZGVsdGEsIGRlbHRhU2l6ZSwgbGVzc2VyVG9BZGRUbywgbGVzc2VyVG9BZGRUb1NpemUsIDMqc2l6ZSwgc3RhdHVzKTsKKyAgc2V0U29ydGluZ0FycmF5KGRlbHRhU29ydGVkLCBkZWx0YSwgZGVsdGFTaXplKTsKKyAgc29ydChkZWx0YVNvcnRlZCwgZGVsdGFTaXplLCBUUlVFKTsKKworICBzZXREaXN0YW5jZXNGcm9tRW1wdHkoZGVsdGEsIGRlbHRhU2l6ZSk7CisgIGludDMyX3QgZGVsdGFQU2l6ZSA9IGRlbHRhU2l6ZTsKKyAgLy91cGRhdGVCb3VuZHMoZGVsdGEpOworCisgIGludDMyX3QgZ2VuZXJhdGlvbiA9IDA7CisgIC8vIGlmIHdlIGZvdW5kIGFueSwgd2UgaGF2ZSB0byB0cnkgbXVsdGlwbGUgY29udHJhY3Rpb25zCisgIC8vIEhvd2V2ZXIsIHdlIHdhbnQgdG8gcHJldmVudCB0aGUgY29udHJhY3Rpb25zIGV4cGxvc2lvbgorICAvLyBpZiB0aGUgbnVtYmVyIG9mIHNpbXBsZSBjb250cmFjdGlvbnMgaXMgZ3JlYXRlciB0aGFuIHRoZQorICAvLyBzdGFydGluZyBzaXplLCBjaGFuY2VzIGFyZSB0aGF0IHdlIGVpdGhlciBoYXZlIGFuIGFsZ29yaXRobWljCisgIC8vIGNvbnRyYWN0aW9uIChsaWtlIGl0ZXJhdGlvbiBtYXJrcyBvbiB3MmspIG9yIHNvbWV0aGluZworICAvLyBpcyBzZXJpb3NseSB3cm9uZy4KKyAgaWYoZGVsdGFQU2l6ZSA8IHNpemUvMikgeworICAgIHdoaWxlIChkZWx0YVBTaXplICYmIGdlbmVyYXRpb24gPCAxKSB7CisgICAgICBnZW5lcmF0aW9uKys7CisgICAgICBsb2dnZXItPmxvZygiXG4rKyBDb250cmFjdGlvbiBkZXRlY3Rpb24gZ2VuZXJhdGlvbiAlaVxuIiwgZ2VuZXJhdGlvbiwgZ2VuZXJhdGlvbik7CisgICAgICAvLyBmaW5kIG1vcmUsIGJ1dCBhdm9pZCB0ZXN0aW5nIHRoZSBjb21iaW5hdGlvbnMgd2UgYWxyZWFkeSBoYXZlCisgICAgICBub0NvbnRzICs9IGRldGVjdENvbnRyYWN0aW9ucyh0b1NvcnQsIHNpemUsIGRlbHRhUFAsIGRlbHRhUFNpemUsCisJCQkJICAgIG5ld0RlbHRhUCwgbmV3RGVsdGFTaXplLCBsZXNzZXJUb0FkZFRvLCBsZXNzZXJUb0FkZFRvU2l6ZSwgMypzaXplLCBzdGF0dXMpOworICAgICAgbm9Db250cyArPSBkZXRlY3RDb250cmFjdGlvbnMoZGVsdGFQUCwgZGVsdGFQU2l6ZSwgdG9Tb3J0LCBzaXplLCAKKwkJCQkgICAgbmV3RGVsdGFQLCBuZXdEZWx0YVNpemUsIGxlc3NlclRvQWRkVG8sIGxlc3NlclRvQWRkVG9TaXplLCAzKnNpemUsIHN0YXR1cyk7CisgICAgICBjYWxjdWxhdGVTb3J0S2V5cygpOworCisgICAgICBhZGRBbGwoZGVsdGFQLCBkZWx0YVBTaXplKTsKKyAgICAgIHNldFNvcnRpbmdBcnJheSh0b1NvcnQsIGxpbmVzLCBzaXplKTsKKyAgICAgIHNvcnQoVFJVRSwgVFJVRSk7CisgICAgICBzZXRTb3J0aW5nQXJyYXkobmV3RGVsdGFTb3J0ZWQsIG5ld0RlbHRhUCwgbmV3RGVsdGFTaXplKTsKKyAgICAgIHNvcnQobmV3RGVsdGFTb3J0ZWQsIG5ld0RlbHRhU2l6ZSwgVFJVRSk7CisJICAKKyAgICAgIC8vIGlmIG5vIG5ldyBvbmVzLCBiYWlsCisgICAgICAvL2lmIChuZXdEZWx0YVNpemUgPT0gMCkgYnJlYWs7CisKKyAgICAgIGRlbHRhUFNpemUgPSBuZXdEZWx0YVNpemU7CisgICAgICBuZXdEZWx0YVNpemUgPSAwOworICAgICAgaWYoZGVsdGFQID09IGRlbHRhKSB7CisgICAgICAgIGRlbHRhUCA9IG5ld0RlbHRhOworICAgICAgICBkZWx0YVBQID0gbmV3RGVsdGFTb3J0ZWQ7CisgICAgICAgIG5ld0RlbHRhUCA9IGRlbHRhOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVsdGFQID0gZGVsdGE7CisgICAgICAgIGRlbHRhUFAgPSBkZWx0YVNvcnRlZDsKKyAgICAgICAgbmV3RGVsdGFQID0gbmV3RGVsdGE7CisgICAgICB9CisgICAgICBzZXREaXN0YW5jZXNGcm9tRW1wdHkoZGVsdGFQLCBkZWx0YVBTaXplKTsKKyAgICB9CisgIH0KKyAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAvLyBhZGQgc3R1ZmYgZnJvbSB0aGUgbGFzdCBiYXRjaAorICBhZGRBbGwoZGVsdGFQLCBkZWx0YVBTaXplKTsKKworICAvLyB3YXJuaW5nOiB3ZSBkb24ndCBhZGQgdGhlIGxlc3NlciBvbmVzIGluIHJlY3Vyc2l2ZWx5LCBzaW5jZSB0aGV5IHdpbGwKKyAgLy8gaW5maW5pdGVseSBsb29wCisgIHNldERpc3RhbmNlc0Zyb21FbXB0eShsZXNzZXJUb0FkZFRvLCBsZXNzZXJUb0FkZFRvU2l6ZSk7CisgIGFkZEFsbChsZXNzZXJUb0FkZFRvLCBsZXNzZXJUb0FkZFRvU2l6ZSk7CisgIHNldFNvcnRpbmdBcnJheSh0b1NvcnQsIGxpbmVzLCBzaXplKTsKKyAgc29ydChUUlVFLCBUUlVFKTsKKworICBkZWxldGVbXSBkZWx0YVNvcnRlZDsKKyAgZGVsZXRlW10gZGVsdGE7CisgIGRlbGV0ZVtdIGxlc3NlclRvQWRkVG87CisgIGRlbGV0ZVtdIG5ld0RlbHRhU29ydGVkOworICBkZWxldGVbXSBuZXdEZWx0YTsKKyAgcmV0dXJuIG5vQ29udHM7Cit9CisKKworaW50MzJfdCBTb3J0ZWRMaW5lczo6ZGV0ZWN0Q29udHJhY3Rpb25zKExpbmUgKipmaXJzdFJlcCwgaW50MzJfdCBmaXJzdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAqKnNlY29uZFJlcCwgaW50MzJfdCBzZWNvbmRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgKnRvQWRkVG8sIGludDMyX3QgJnRvQWRkVG9TaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICpsZXNzZXJUb0FkZFRvLCBpbnQzMl90ICZsZXNzZXJUb0FkZFRvU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNhcGFjaXR5LCBVRXJyb3JDb2RlICZzdGF0dXMpIAoreworICBpbnQzMl90IG5vQ29udHMgPSAwOworICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgTGluZSBsb3dlciwgdXBwZXIsIHRyaWFsLCB0b0FkZCwgaGVscGVyOworICBVQ2hhcjMyIGZpcnN0U3RhcnQsIGZpcnN0RW5kLCBzZWNvbmRTdGFydDsKKyAgVUNoYXIgTkZDVHJpYWxbMjU2XTsKKyAgaW50MzJfdCBORkNUcmlhbExlbiA9IDA7CisgIFVCb29sIHRoYWk7CisgIGkgPSAtMTsKKyAgd2hpbGUoaSA8IGZpcnN0U2l6ZS0xICYmIFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgaSsrOworICAgIGlmKCFkZWJ1Zy0+aXNPbigpKSB7CisgICAgICBsb2dnZXItPmxvZygiXHJUZXN0aW5nICUwNWkvJTA1aS4gRm91bmQgJTA1aSBjb250cy4iLCBpLCBmaXJzdFNpemUsIG5vQ29udHMpOworICAgIH0KKyAgICBVMTZfR0VUKGZpcnN0UmVwW2ldLT5uYW1lLCAwLCAwLCBmaXJzdFJlcFtpXS0+bGVuLCBmaXJzdFN0YXJ0KTsKKyAgICBpZih1c2NyaXB0X2dldFNjcmlwdChmaXJzdFN0YXJ0LCAmc3RhdHVzKSA9PSBVU0NSSVBUX0hBTiB8fCBmaXJzdFJlcFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkpIC8vVUNPTF9URVJUSUFSWSkgCisgICAgICB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIGxvd2VyID0gKmZpcnN0UmVwW2ldOworICAgIGZvcihqID0gMDsgaiA8IHNlY29uZFNpemU7IGorKykgeworICAgICAgaWYobm9Db250cyA9PSBjYXBhY2l0eSkgeworICAgICAgICByZXR1cm4gbm9Db250czsKKyAgICAgIH0KKyAgICAgIFUxNl9HRVQoc2Vjb25kUmVwW2pdLT5uYW1lLCAwLCAwLCBzZWNvbmRSZXBbal0tPmxlbiwgc2Vjb25kU3RhcnQpOworICAgICAgaWYoZmlyc3RTdGFydCA9PSAweDQxICYmIHNlY29uZFN0YXJ0ID09IDB4MzA4KSB7CisgICAgICBpbnQzMl90IHB1dEJyZWFrUG9pbnRIZXJlID0gMDsKKyAgICB9CisgICAgICBpZih1c2NyaXB0X2dldFNjcmlwdChzZWNvbmRTdGFydCwgJnN0YXR1cykgPT0gVVNDUklQVF9IQU4pIC8vIHx8IHNlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1RFUlRJQVJZKSAKKwl7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIAlpZihkdXBsaWNhdG9ycyAmJiBkdXBsaWNhdG9ycy0+Z2V0KFVuaWNvZGVTdHJpbmcoc2Vjb25kUmVwW2pdLT5uYW1lLCBzZWNvbmRSZXBbal0tPmxlbikpICE9IE5VTEwpIHsKKyAgICAgICAgICBkZWJ1Zy0+bG9nKCJTa2lwcGluZyBkdXBsaWNhdG9yICIpOworICAgICAgICAgIGRlYnVnLT5sb2coc2Vjb25kUmVwW2pdLT50b1N0cmluZygpLCBUUlVFKTsKKwkJICBjb250aW51ZTsKKwkJfQorCisgICAgICBpZihmaXJzdFJlcFtpXS0+bmFtZVswXSA9PSAweDYxICYmIHNlY29uZFJlcFtqXS0+bmFtZVswXSA9PSAweDMwOCkgeworCSAgICBpbnQzMl90IHB1dEJyZWFrcG9pbnRoZXJlID0gMDsKKyAgICAgIH0KKyAgICAgIHVwcGVyLnNldFRvQ29uY2F0KGZpcnN0UmVwW2ldLCBVQltVQ09MX1BSSU1BUlldKTsKKyAgICAgIC8vdXBwZXIuc2V0VG9Db25jYXQoZmlyc3RSZXBbaV0sIFVCW3NlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHldKTsKKyAgICAgIHRvQWRkLnNldFRvQ29uY2F0KGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0pOyAgICAgICAgICAKKyAgICAgIFUxNl9HRVQoZmlyc3RSZXBbaV0tPm5hbWUsIDAsIGZpcnN0UmVwW2ldLT5sZW4tMSwgZmlyc3RSZXBbaV0tPmxlbiwgZmlyc3RFbmQpOworICAgICAgaWYoKHRoYWkgPSB1X2hhc0JpbmFyeVByb3BlcnR5KGZpcnN0RW5kLCBVQ0hBUl9MT0dJQ0FMX09SREVSX0VYQ0VQVElPTikpKSB7CisJLy8gdGhpcyBtZWFucyB0aGF0IHRoZSBsb3dlciBpcyBzaW5nbGUgcmVvcmRlcmluZyBjaGFyYWN0ZXIKKwkvLyBpZiB3ZSBkbyB0aGUgbG93ZXIgdGVzdCB3aXRob3V0IHRha2luZyB0aGlzIGludG8gYWNjb3VudCwKKwkvLyB3ZSdsbCBjb21wYXJpbmcgdGhlIHNlY29uZFJlcCBkaXJlY3RseSB0byBUaGFpLiBXZSBhZGQgVUJbVUNPTF9QUklNQVJZXSB0bworCS8vIGVuZCBvZiBsb3dlciBhbmQgaW4gdGhlIG1pZGRsZSBvZiB0cmlhbCwgc28gd2Ugd2lsbCBoYXZlIAorCS8vIGxvd2VyID0gVGhhaSArIFVCLCB0cmlhbCBUaGFpICsgVUIgKyB4LCByZXNvbHZpbmcgdG8KKwkvLyBVQiArIFRoYWkgdnMgVUIgKyBUaGFpICsgeC4KKwkvLyBmb3IgdXBwZXIgYm91bmQsIHdlIGRvIHRoZSBzaW1pbGFyLCBzbyB3ZSBoYXZlCisJLy8gdXBwZXIgPSBUaGFpICsgVUIgKyBVQiwgdHJpYWwgPSBUaGFpICsgVUIgKyB4LAorCS8vIHJlc29sdmluZyB0byBVQiArIFRoYWkgKyBVQiB2cyBVQiArIFRoYWkgKyB4CisJaWYoc2Vjb25kUmVwW2pdLT5maXJzdENDKSB7CisJICBVQ2hhcjMyIFVCQ2hhcjsKKwkgIFUxNl9HRVQoVUJbVUNPTF9TRUNPTkRBUlldLT5uYW1lLCAwLCAwLCBVQltVQ09MX1NFQ09OREFSWV0tPmxlbiwgVUJDaGFyKTsKKwkgIGlmKHNlY29uZFJlcFtqXS0+Zmlyc3RDQyA+IHVfZ2V0Q29tYmluaW5nQ2xhc3MoVUJDaGFyKSkgeworCSAgICBjb250aW51ZTsKKwkgIH0KKwl9IAorCXVwcGVyID0gKmZpcnN0UmVwW2ldOworCXVwcGVyLmFwcGVuZCgqVUJbVUNPTF9QUklNQVJZXSk7CisJLy91cHBlci5hcHBlbmQoKlVCW3NlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHldKTsKKwl1cHBlci5hcHBlbmQoKlVCW1VDT0xfUFJJTUFSWV0pOworCWxvd2VyLmFwcGVuZCgqVUJbVUNPTF9QUklNQVJZXSk7CisJdHJpYWwgPSAqZmlyc3RSZXBbaV07CisJdHJpYWwuYXBwZW5kKCpVQltVQ09MX1BSSU1BUlldKTsKKwl0cmlhbC5hcHBlbmQoKnNlY29uZFJlcFtqXSk7CisgICAgICB9IGVsc2UgaWYoKGZpcnN0UmVwW2ldLT5sYXN0Q0MgPiBzZWNvbmRSZXBbal0tPmZpcnN0Q0MgJiYgc2Vjb25kUmVwW2pdLT5maXJzdENDICYmICFmcmVuY2hTZWNvbmRhcnkpIAorCQl8fCAoZmlyc3RSZXBbaV0tPmZpcnN0Q0MgPCBzZWNvbmRSZXBbal0tPmxhc3RDQyAmJiBmaXJzdFJlcFtpXS0+Zmlyc3RDQyAmJiBmcmVuY2hTZWNvbmRhcnkpKSB7CisJLy8gU2tpcCBiZWNhdXNlIG5vcm1hbGl6YXRpb24gd2lsbCByZW9yZGVyCisJLy8gdGhlcmUgd2lsbCBiZSBhIGNoYW5jZSB0byBjaGVjayB0aGlzIGFnYWluLCBzaW5jZSBpZiB3ZQorCS8vIHRyeSBhK2IsIHdlIHdpbGwgYWxzbyB0cnkgYithCisJICAgIGNvbnRpbnVlOworICAgICAgfSBlbHNlIGlmKGZyZW5jaFNlY29uZGFyeSAmJiAoZmlyc3RSZXBbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5ID4gVUNPTF9QUklNQVJZICYmIHNlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkpKSB7CisJICAgIGNvbnRpbnVlOworICAgICAgfWVsc2UgaWYoZmlyc3RSZXBbaV0tPmxhc3RDQyAmJiBzZWNvbmRSZXBbal0tPmZpcnN0Q0MgJiYgZnJlbmNoU2Vjb25kYXJ5KSB7CisJICAgIHRyaWFsLnNldFRvQ29uY2F0KHNlY29uZFJlcFtqXSwgZmlyc3RSZXBbaV0pOworICAgICAgfSBlbHNlIHsKKyAgICAJdHJpYWwuc2V0VG9Db25jYXQoZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSk7ICAgICAgICAgIAorICAgICAgfQorICAgICAgLy8gTm93IGxldCdzIGNoZWNrIHRoZSB0cmlhbC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIHlvdSBjb21iaW5lIGNoYXJhY3RlcnMsIAorICAgICAgLy8geW91IGNhbiBlbmQgdXAgd2l0aCBjb25jYXRlbmF0aW9uIHRoYXQgaXMgdW5rbm93biBmb3IgdGhlIGV4YW1pbmVkIEFQSS4KKyAgICAgIE5GQ1RyaWFsTGVuID0gdW5vcm1fbm9ybWFsaXplKHRyaWFsLm5hbWUsIHRyaWFsLmxlbiwgVU5PUk1fTkZDLCAwLCBORkNUcmlhbCwgMjU2LCAmc3RhdHVzKTsKKyAgICAgIGlmKCh1X3N0cmNtcCh0cmlhbC5uYW1lLCBORkNUcmlhbCkgPT0gMCkgfHwgdV9zdHJGaW5kTGFzdChORkNUcmlhbCwgTkZDVHJpYWxMZW4sIHNlY29uZFJlcFtqXS0+bmFtZSwgc2Vjb25kUmVwW2pdLT5sZW4pKSB7CisJICAgaWYoc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eSA+IFVDT0xfVEVSVElBUlkpIHsKKwkgICAgIGNvbnRpbnVlOworCSAgIH0KKwkgfQorICAgICAgVUNoYXIzMiBjOworICAgICAgVTE2X0dFVChORkNUcmlhbCwgMCwgMCwgTkZDVHJpYWxMZW4sIGMpOworICAgICAgaGVscGVyLnNldFRvKGMpOworICAgICAgaWYocHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoaGVscGVyKSA+IFVDT0xfVEVSVElBUlkpIHsKKwkgICAgY29udGludWU7CisgICAgICB9CisgICAgICBpZihORkNUcmlhbExlbiA+IDEpIHsKKwkgICAgVTE2X0dFVChORkNUcmlhbCwgMCwgTkZDVHJpYWxMZW4tMSwgTkZDVHJpYWxMZW4sIGMpOworCSAgICBoZWxwZXIuc2V0VG8oYyk7CisgICAgICAgIGlmKHByb2JlLmRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKGhlbHBlcikgPiBVQ09MX1RFUlRJQVJZKSB7CisJICAgICAgY29udGludWU7CisJICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHByb2JlLmNvbXBhcmUobG93ZXIsIHRyaWFsKSA+PSAwKSB7IC8vIGlmIGxvd2VyIGlzIGJpZ2dlciB0aGFuIHRyaWFsCisgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgb2ssIGJ1dCBJJ20gaGF2aW5nIGRvdWJ0cy4gSGVyZSBpcyBhbiBhZGRpdGlvbmFsIGNoZWNrOgorICAgICAgICBpZihmaXJzdFJlcFtpXS0+bGVuID09IDEgfHwgc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1BSSU1BUlkpIHsKKyAgICAgICAgICAvLyBJJ20gYmFzaWNhbGx5IHNheWluZyB0aGF0IEknbGwgYWRkIHRoaXMga2luZCBvZiBjb250cmFjdGlvbiBmb3IgY2FzZXMgd2hlcmUgSSBjb21iaW5lCisgICAgICAgICAgLy8gb25lIGxldHRlciB3aXRoIGFuIGFjY2VudCBPUiB3aGVuIEknbSBjb21iaW5pbmcgbW9yZSB0aGFuIG9uZSBzeW1ib2wgd2l0aCBhIGxldHRlci4KKyAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIkwiLCBsZXNzZXJUb0FkZFRvLCBsZXNzZXJUb0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgfSAKKyAgICAgIGVsc2UgaWYgKHByb2JlLmNvbXBhcmUodHJpYWwsIHVwcGVyKSA+IDApIHsgLy8gdHJpYWwgaXMgYmlnZ2VyIHRoYW4gdXBwZXI/PworICAgICAgICBub3RlQ29udHJhY3Rpb24oIlUiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgIH0gCisjaWYgMAorICAgICAgZWxzZSBpZihmaXJzdFJlcFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gVUNPTF9QUklNQVJZKQorICAgICAgeworICAgICAgICBMaW5lIGV4cGFuc2lvbkxpbmU7CisgICAgICAgIGlmKGdldEV4cGFuc2lvbkxpbmUodHJpYWwsICpmaXJzdFJlcFtpXSwgKnNlY29uZFJlcFtqXSwgZXhwYW5zaW9uTGluZSkgJiYKKyAgICAgICAgZXhwYW5zaW9uTGluZS5sZW4gJiYgIShleHBhbnNpb25MaW5lID09ICpzZWNvbmRSZXBbal0pKSB7CisgICAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCJEIiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0sIG5vQ29udHMsIHN0YXR1cyk7CisgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgIH0KKyNlbmRpZgorICAgICAgZWxzZSBpZihmaXJzdFJlcFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gVUNPTF9QUklNQVJZICYmIHByb2JlLmdldFN0cmVuZ3RoKGxvd2VyLCB0cmlhbCkgPCBzZWNvbmRSZXBbal0tPnN0cmVuZ3RoRnJvbUVtcHR5KSB7CisgICAgICAgIG5vdGVDb250cmFjdGlvbigiRDEiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgIH0gCisgICAgICBlbHNlIGlmIChmaXJzdFJlcFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gVUNPTF9QUklNQVJZICYmIHNlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gVUNPTF9QUklNQVJZKSAKKyAgICAgIHsKKyAgICAgICAgLy8gSSBoYXZlIGFkZGVkIGFuIGFkZGl0aW9uYWwgY2hlY2suIFRoZSBjaGVja3MgdmVyc3VzIHVwcGVyIGFuZCBsb3dlciBib3VuZCBzaG91bGQgYmUgc3VmZmljaWVudAorICAgICAgICAvLyB3aGVuIHRoZSByaWdodCBzaWRlIGlzIGEgY29tYmluaW5nIG1hcmsuIFRoZXJlIG1pZ2h0IGJlIGEgcmVvcmRlcmluZyBvZiBjb21iaW5pbmcgbWFya3MsIGJ1dAorICAgICAgICAvLyB0aGF0IHNob3VsZCBiZSBhbHJlYWR5IHZpc2libGUgaW4gdGhlaXIgb3JkZXIuCisJLy8gY29tcGFyZSB0aGUgc2VxdWVuY2UgCisJLy8gWS0gPD8gWSA8PyBZKworCS8vIGFuZCAKKwkvLyBYWS0gPD8gWFkgPD8gWFkrCisJTGluZSB4eW0sIHh5cCwgeHk7CisJVUJvb2wgeHltSXNDb250cmFjdGlvbiA9IEZBTFNFLCB0b0FkZElzQ29udHJhY3Rpb24gPSBGQUxTRTsKKyAgICBpZihqKSB7CisJICBpZigoKCFzZWNvbmRSZXBbai0xXS0+Zmlyc3RDQyB8fCBmaXJzdFJlcFtpXS0+bGFzdENDIDwgc2Vjb25kUmVwW2otMV0tPmZpcnN0Q0MpICYmICFmcmVuY2hTZWNvbmRhcnkpIAorICAgICAgICAgICAgIHx8KCghZmlyc3RSZXBbaV0tPmZpcnN0Q0MgfHwgZmlyc3RSZXBbaV0tPmZpcnN0Q0MgPiBzZWNvbmRSZXBbai0xXS0+bGFzdENDKSAmJiBmcmVuY2hTZWNvbmRhcnkpKSB7CisJICAgIHh5bS5zZXRUb0NvbmNhdChmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2otMV0pOworCSAgICB0b0FkZC5zdHJlbmd0aCA9IHByb2JlLmdldFN0cmVuZ3RoKHh5bSwgdG9BZGQpOworCSAgICBpZihzZWNvbmRSZXBbal0tPnN0cmVuZ3RoICE9IHRvQWRkLnN0cmVuZ3RoKSB7CisJICAgICAgLy8gdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBlaXRoZXIgeHltIG9yIHh5IGFyZSBjb250cmFjdGlvbnMKKwkgICAgICAvLyBUaGVyZSBhcmUgdHdvIHNpdHVhdGlvbnM6CisJICAgICAgLy8geHltID4geHkgb3IgeHltIDxuIHh5IGFuZCB5bSA8ayB5IGJ1dCBuICE9IGsKKwkgICAgICAvLyBpZiB0aGV5IGFyZSByZW9yZGVyZWQsIHdlIGFyZSBnb2luZyB0byBzZWUgaWYgZWFjaCBvZiB0aGVtIAorCSAgICAgIC8vIGlzIGZ1cnRoZXIgcmVvcmRlcmVkCisJICAgICAgaWYodG9BZGQuc3RyZW5ndGggPT0gVUNPTF9PRkYpIHsKKwkJLy8gY2hlY2sgd2hldGhlciB0b0FkZCBzaGlmdGVkIG1vcmUgZG93bgorCQlrID0gaiAtIDI7CisJCXdoaWxlKGs+PTAgJiYgc2Vjb25kUmVwW2tdLT5zdHJlbmd0aCA+IHNlY29uZFJlcFtqXS0+c3RyZW5ndGgpIHsKKwkJICBrLS07CisJCX0KKwkJd2hpbGUoIXRvQWRkSXNDb250cmFjdGlvbiAmJiBrPj0wKSB7CisJCSAgeHlwLnNldFRvQ29uY2F0KGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBba10pOworCQkgIGlmKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyh4eXAubmFtZSwgeHlwLmxlbikpICE9IE5VTEwpIHsKKwkJICAgIGstLTsKKwkJICAgIGNvbnRpbnVlOworCQkgIH0KKwkJICBpZihwcm9iZS5jb21wYXJlKHh5cCwgeHltKSA+PSAwKSB7CisJCSAgICAvLyB4eXAgbG9va3MgbGlrZSBhIGNvbnRyYWN0aW9uCisJCSAgICBub3RlQ29udHJhY3Rpb24oIiExIiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0sIG5vQ29udHMsIHN0YXR1cyk7CisJCSAgICB0b0FkZElzQ29udHJhY3Rpb24gPSBUUlVFOworCQkgIH0gZWxzZSB7CisJCSAgICBicmVhazsKKwkJICB9CisJCX0KKyAgICAgICAgICAvLyBmaXJzdCBsZXQncyBzZWUgaWYgeHltIGhhcyBtb3ZlZCBiZXlvbmQKKyAgICAgICAgICBpZihjb250cmFjdGlvbnNUYWJsZS0+Z2V0KFVuaWNvZGVTdHJpbmcoeHltLm5hbWUsIHh5bS5sZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBrID0gaisxOworICAgICAgICAgICAgLy8gaWdub3JlIHdlYWtlciBzdHJlbmd0aHMKKyAgICAgICAgICAgIHdoaWxlKGsgPCBzZWNvbmRTaXplICYmIHNlY29uZFJlcFtrXS0+c3RyZW5ndGggPiBzZWNvbmRSZXBbal0tPnN0cmVuZ3RoKSB7CisgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIHNraXBwZWQgdGhlIGZvbGxvd2luZyBndXkKKyAgICAgICAgICAgIGlmKGsgPCBzZWNvbmRTaXplKSB7CisgICAgICAgICAgICAgIHh5cC5zZXRUb0NvbmNhdChmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2tdKTsKKyAgICAgICAgICAgICAgaWYocHJvYmUuY29tcGFyZSh4eXAsIHh5bSkgPD0gMCkgeworCSAgICAgICAgICAgIC8vIHh5cCBsb29rcyBsaWtlIGEgY29udHJhY3Rpb24KKwkgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIiEyIiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbai0xXSwgbm9Db250cywgc3RhdHVzKTsKKwkgICAgICAgICAgICB4eW1Jc0NvbnRyYWN0aW9uID0gVFJVRTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4eW1Jc0NvbnRyYWN0aW9uID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8gaWYgdGhleSBoYXZlIHJlb3JkZXJlZCwgYnV0IG5vbmUgaGFzIG1vdmVkLCB0aGVuIHdlIGFkZCB0aGVtIGJvdGgKKyAgICAgICAgICAvLyBhbmQgaG9wZSBmb3IgdGhlIGJlc3QKKyAgICAgICAgICBpZigheHltSXNDb250cmFjdGlvbiAmJiAhdG9BZGRJc0NvbnRyYWN0aW9uKSB7CisgICAgICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYW4gTkZDIHZlcnNpb24gdmVyc2lvbiBvZiBvbmUgb2YgdGhlIAorICAgICAgICAgICAgICAvLyBzdHJpbmdzLiBJZiB3ZSBoYXZlIFhZID4gWFosIGJ1dCBORkMoWFopID0gVyBhbmQgWCA8IFcsIHdlIG1pZ2h0IGhhdmUKKyAgICAgICAgICAgICAgLy8gaGF2ZSBhIGZhbHNlIGNvbnRyYWN0aW9uLgorICAgICAgICAgICAgICB0cmlhbC5sZW4gPSB1bm9ybV9ub3JtYWxpemUodG9BZGQubmFtZSwgdG9BZGQubGVuLCBVTk9STV9ORkMsIDAsIHRyaWFsLm5hbWUsIDI1LCAmc3RhdHVzKTsKKyAgICAgICAgICAgICAgLy9VQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGggPSBwcm9iZS5nZXRTdHJlbmd0aCgqZmlyc3RSZXBbaV0sIHRyaWFsKTsKKyAgICAgICAgICAgICAgaWYodHJpYWwgPT0gdG9BZGQpIHsKKyAgICAgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIiEzIiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbai0xXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIiEzIiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0sIG5vQ29udHMsIHN0YXR1cyk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCIhNCIsIHRvQWRkVG8sIHRvQWRkVG9TaXplLCBmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2pdLCBub0NvbnRzLCBzdGF0dXMpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICAgICAgfSBlbHNlIHsgLy8gb25seSB0aGUgc3RyZW5ndGggaGFzIGNoYW5nZWQKKyAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIHByZXZpb3VzIGlzIGNvbnRyYWN0aW9uIGFuZCBpZiBub3QsIGFkZCB0aGUgY3VycmVudAorICAgICAgICAgICAgaWYoY29udHJhY3Rpb25zVGFibGUtPmdldChVbmljb2RlU3RyaW5nKHh5bS5uYW1lLCB4eW0ubGVuKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIiE1IiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0sIG5vQ29udHMsIHN0YXR1cyk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgCisJICAgICAgfQorCSAgICB9CisJICB9CisJfQorICAgICAgfQorICAgICAgaWYodGhhaSkgeyAvLyByZXN0b3JlIGxvd2VyCisgICAgICAgIGxvd2VyID0gKmZpcnN0UmVwW2ldOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbm9Db250czsKK30KKwordm9pZAorU29ydGVkTGluZXM6Om5vdGVDb250cmFjdGlvbihjb25zdCBjaGFyKiBtc2csIExpbmUgKnRvQWRkVG8sIGludDMyX3QgJnRvQWRkVG9TaXplLCBMaW5lICpsZWZ0LCBMaW5lICpyaWdodCwgaW50MzJfdCAmbm9Db250cywgVUVycm9yQ29kZSAmc3RhdHVzKSAKK3sKKyAgTGluZSB0b0FkZDsKKyAgdG9BZGQuc2V0VG9Db25jYXQobGVmdCwgcmlnaHQpOworICB0b0FkZC5sZWZ0ID0gbGVmdDsKKyAgdG9BZGQucmlnaHQgPSByaWdodDsKKyAgLy8gaWYgd2UncmUgYWRkaW5nIGFuIGFjY2VudCB0byBhbiBleGlzdGluZyBjb250cmFjdGlvbiwgd2Ugd2FudCB0byBjaGVjaworI2lmIDAKKyAgTGluZSB0ZXN0LCB0cmlhbDEsIHRyaWFsMjsKKyAgaWYocmlnaHQtPnN0cmVuZ3RoRnJvbUVtcHR5ID4gVUNPTF9QUklNQVJZKSB7CisgICAgaWYobGVmdC0+cmlnaHQgJiYgbGVmdC0+cmlnaHQtPnByZXZpb3VzICYmIGxlZnQtPnJpZ2h0LT5uZXh0KSB7CisgICAgICB0ZXN0LnNldFRvQ29uY2F0KGxlZnQtPmxlZnQsIGxlZnQtPnJpZ2h0LT5wcmV2aW91cyk7CisgICAgICB0cmlhbDEuc2V0VG9Db25jYXQoJnRlc3QsIHJpZ2h0KTsKKworICAgICAgdGVzdC5zZXRUb0NvbmNhdChsZWZ0LT5sZWZ0LCBsZWZ0LT5yaWdodC0+bmV4dCk7CisgICAgICB0cmlhbDIuc2V0VG9Db25jYXQoJnRlc3QsIHJpZ2h0KTsKKyAgICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwxLCB0b0FkZCkgPCAwICYmIHByb2JlLmNvbXBhcmUodG9BZGQsIHRyaWFsMikgPCAwKSB7CisgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29udHJhY3Rpb24gaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBuZXdseSBhZGRlZCBhY2NlbnQKKyAgICAgICAgLy8gc28gd2hpbGUgJ2NoJyBpcyBjb250cmFjdGlvbiwgJ2NoJytkb3RfYWJvdmUgc29ydHMgYmV0d2VlbiAnY2cnK2RvdF9hYm92ZSBhbmQgJ2NpJytkb3RfYWJvdmUKKyAgICAgICAgZGVidWctPmxvZygiQ29uIC0iKTsKKyAgICAgICAgZGVidWctPmxvZyhtc2cpOworICAgICAgICBkZWJ1Zy0+bG9nKHRvQWRkLnRvU3RyaW5nKEZBTFNFKSwgVFJVRSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYocmlnaHQtPnByZXZpb3VzICYmIHJpZ2h0LT5uZXh0KSB7CisgICAgICAgIHRyaWFsMS5zZXRUb0NvbmNhdChsZWZ0LCByaWdodC0+cHJldmlvdXMpOworICAgICAgICB0cmlhbDIuc2V0VG9Db25jYXQobGVmdCwgcmlnaHQtPm5leHQpOworICAgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsMSwgdG9BZGQpIDwgMCAmJiBwcm9iZS5jb21wYXJlKHRvQWRkLCB0cmlhbDIpIDwgMCkgeworICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29udHJhY3Rpb24gaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBuZXdseSBhZGRlZCBhY2NlbnQKKyAgICAgICAgICAvLyBzbyB3aGlsZSAnY2gnIGlzIGNvbnRyYWN0aW9uLCAnY2gnK2RvdF9hYm92ZSBzb3J0cyBiZXR3ZWVuICdjZycrZG90X2Fib3ZlIGFuZCAnY2knK2RvdF9hYm92ZQorICAgICAgICAgIGRlYnVnLT5sb2coIkNvbiAtIik7CisgICAgICAgICAgZGVidWctPmxvZyhtc2cpOworICAgICAgICAgIGRlYnVnLT5sb2codG9BZGQudG9TdHJpbmcoRkFMU0UpLCBUUlVFKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKGxlZnQtPnByZXZpb3VzICYmIGxlZnQtPm5leHQpIHsKKyAgICAgICAgdHJpYWwxLnNldFRvQ29uY2F0KGxlZnQtPnByZXZpb3VzLCByaWdodCk7CisgICAgICAgIHRyaWFsMi5zZXRUb0NvbmNhdChsZWZ0LT5uZXh0LCByaWdodCk7CisgICAgICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwxLCB0b0FkZCkgPCAwICYmIHByb2JlLmNvbXBhcmUodG9BZGQsIHRyaWFsMikgPCAwKSB7CisgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250cmFjdGlvbiBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIG5ld2x5IGFkZGVkIGFjY2VudAorICAgICAgICAgIC8vIHNvIHdoaWxlICdjaCcgaXMgY29udHJhY3Rpb24sICdjaCcrZG90X2Fib3ZlIHNvcnRzIGJldHdlZW4gJ2NnJytkb3RfYWJvdmUgYW5kICdjaScrZG90X2Fib3ZlCisgICAgICAgICAgZGVidWctPmxvZygiQ29uIC0iKTsKKyAgICAgICAgICBkZWJ1Zy0+bG9nKG1zZyk7CisgICAgICAgICAgZGVidWctPmxvZyh0b0FkZC50b1N0cmluZyhGQUxTRSksIFRSVUUpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgfQorICB9CisgIGlmKHJpZ2h0LT5yaWdodCAmJiByaWdodC0+cmlnaHQtPnN0cmVuZ3RoRnJvbUVtcHR5ID4gVUNPTF9QUklNQVJZICYmIHJpZ2h0LT5sZWZ0LT5wcmV2aW91cyAmJiByaWdodC0+bGVmdC0+bmV4dCkgeyAvLyBtYXliZSB3ZSBhbHJlYWR5IGhhZCBhIGNvbnRyYWN0aW9uIHdpdGggYW4gYWNjZW50CisgICAgdGVzdC5zZXRUb0NvbmNhdChyaWdodC0+bGVmdC0+cHJldmlvdXMsIHJpZ2h0LT5yaWdodCk7CisgICAgdHJpYWwxLnNldFRvQ29uY2F0KGxlZnQsICZ0ZXN0KTsKKyAgICB0ZXN0LnNldFRvQ29uY2F0KHJpZ2h0LT5sZWZ0LT5uZXh0LCByaWdodC0+cmlnaHQpOworICAgIHRyaWFsMi5zZXRUb0NvbmNhdChsZWZ0LCAmdGVzdCk7CisgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbDEsIHRvQWRkKSA8IDAgJiYgcHJvYmUuY29tcGFyZSh0b0FkZCwgdHJpYWwyKSA8IDApIHsKKyAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29udHJhY3Rpb24gaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBuZXdseSBhZGRlZCBhY2NlbnQKKyAgICAgIC8vIHNvIHdoaWxlICdjaCcgaXMgY29udHJhY3Rpb24sICdjaCcrZG90X2Fib3ZlIHNvcnRzIGJldHdlZW4gJ2NnJytkb3RfYWJvdmUgYW5kICdjaScrZG90X2Fib3ZlCisgICAgICBkZWJ1Zy0+bG9nKCJDb24gLSIpOworICAgICAgZGVidWctPmxvZyhtc2cpOworICAgICAgZGVidWctPmxvZyh0b0FkZC50b1N0cmluZyhGQUxTRSksIFRSVUUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorI2VuZGlmCisgIGlmKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyh0b0FkZC5uYW1lLCB0b0FkZC5sZW4pKSA9PSBOVUxMKSB7CisgICAgaWYocHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcodG9BZGQpIDw9IFVDT0xfVEVSVElBUlkpIHsKKyAgICAgIHRvQWRkVG9bdG9BZGRUb1NpemUrK10gPSB0b0FkZDsKKyAgICAgIGNvbnRyYWN0aW9uc1RhYmxlLT5wdXQoVW5pY29kZVN0cmluZyh0b0FkZC5uYW1lLCB0b0FkZC5sZW4pLCAmdG9BZGQsIHN0YXR1cyk7CisgICAgICBub0NvbnRzKys7CisgICAgICBkZWJ1Zy0+bG9nKG1zZyk7CisgICAgICBkZWJ1Zy0+bG9nKCIgQ29uICsgIik7CisgICAgICBkZWJ1Zy0+bG9nKHRvQWRkLnRvU3RyaW5nKEZBTFNFKSwgVFJVRSk7CisKKyAgICAgIGlmKCFsZWZ0LT5zb3J0S2V5KSB7CisgICAgICAgIGNhbGN1bGF0ZVNvcnRLZXkoKmxlZnQpOworICAgICAgfQorICAgICAgZGVidWctPmxvZyhsZWZ0LT5kdW1wU29ydGtleSgpKTsKKyAgICAgIGRlYnVnLT5sb2coIiArICIpOworCisgICAgICBpZighcmlnaHQtPnNvcnRLZXkpIHsKKyAgICAgICAgY2FsY3VsYXRlU29ydEtleSgqcmlnaHQpOworICAgICAgfQorICAgICAgZGVidWctPmxvZyhyaWdodC0+ZHVtcFNvcnRrZXkoKSk7CisgICAgICBkZWJ1Zy0+bG9nKCIgPSAiKTsKKworICAgICAgY2FsY3VsYXRlU29ydEtleSh0b0FkZCk7CisgICAgICBkZWJ1Zy0+bG9nKHRvQWRkLmR1bXBTb3J0a2V5KCksIFRSVUUpOworICAgICAgaWYobm9Db250cyA+IHNpemUvMikgeworICAgICAgICBzdGF0dXMgPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitVQm9vbAorU29ydGVkTGluZXM6OmdldEV4cGFuc2lvbkxpbmUoY29uc3QgTGluZSAmZXhwYW5zaW9uLCBjb25zdCBMaW5lICZwcmV2aW91cywgY29uc3QgTGluZSAmZXhwLCBMaW5lICZleHBhbnNpb25MaW5lKSAKK3sKKyAgaW50IGV4cEluZGV4U2l6ZSA9IDA7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBleHBTdHJlbmd0aCA9IFVDT0xfT0ZGOworICBpbnQzMl90IGNvbXBhcmlzb25SZXN1bHQgPSAwOworICBpbnQzMl90IGkgPSAwLCBrID0gMCwgcHJldksgPSAwOworICBMaW5lIHRyaWFsOworICBVQm9vbCBzZXF1ZW5jZUNvbXBsZXRlZCA9IEZBTFNFOworICBpbnQzMl90IGV4cEluZGV4ZXNbMjU2XTsKKyAgaW50MzJfdCBleHBJbmRleGVzU2l6ZSA9IDA7CisKKyAgaWYoIXNlcXVlbmNlQ29tcGxldGVkKSB7CisgICAgZXhwSW5kZXhTaXplID0gMDsKKyAgICBleHBhbnNpb25MaW5lLmNsZWFyKCk7CisKKyAgICAvLyB3ZSB3aWxsIHN0YXJ0IGZyb20gc3RyZW5ndGggYmV0d2VlbiB0aGUgZXhwYW5zaW9uCisgICAgLy8gYW5kIHRoZSB0YXJnZXQgKHRvU29ydFtpXSBhbmQgdG9Tb3J0W2pdLiBGaXJzdCB3ZQorICAgIC8vIHdpbGwgYWRkIGFzIG1hbnkgcHJpbWFyaWVzIGFzIHBvc3NpYmxlLiBUaGVuIHdlIHdpbGwKKyAgICAvLyB0cnkgdG8gYWRkIHNlY29uZGFyeSBwaWVjZXMgYW5kIHRoZW4gdGVydGlhcnkuIAorICAgIC8vIGZvdW5kIGFuIGV4cGFuc2lvbiAtIHdoYXQgaXMgdGhlIGV4cGFuZGluZyBzZXF1ZW5jZT8KKyAgCisgICAgZXhwU3RyZW5ndGggPSBVQ09MX1BSSU1BUlk7CisgICAgd2hpbGUoIXNlcXVlbmNlQ29tcGxldGVkKSB7CisgICAgICBrID0gMDsKKyAgICAgIHByZXZLID0gMDsKKyAgICAgIHdoaWxlKGsgPCBzaXplKSB7CisgICAgICAgIGlmKGV4cGFuc2lvbkxpbmUubGVuID4gMTUpIHsKKyAgICAgICAgICBzZXF1ZW5jZUNvbXBsZXRlZCA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoayA8IHNpemUgJiYgdG9Tb3J0W2tdLT5zdHJlbmd0aCAhPSBVQ09MX1BSSU1BUlkpIAorICAgICAgICB7CisgICAgICAgICAgaysrOworICAgICAgICB9CisgICAgICAgIC8vIG5vdGhpbmcgZm91bmQKKyAgICAgICAgaWYoayA9PSBzaXplKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gd2UgbmVlZCB0byBza2lwIG92ZXIgcmVvcmRlcmluZyB0aGluZ3MuIElmIHRoZXkgd2VyZSB3b3J0aHksIHRoZXkgd291bGQKKyAgICAgICAgLy8gaGF2ZSBiZWVuIGRldGVjdGVkIGluIHRoZSBwcmV2aW91cyBpdGVyYXRpb24uCisgICAgICAgIC8vaWYoZXhwYW5zaW9uTGluZS5sYXN0Q0MgJiYgdG9Tb3J0W2tdLT5maXJzdENDICYmIGV4cGFuc2lvbkxpbmUubGFzdENDID4gdG9Tb3J0W2tdLT5maXJzdENDKSB7CisgICAgICAgICAgLy9rKys7CisgICAgICAgICAgLy9jb250aW51ZTsKKyAgICAgICAgLy99CisgICAgICAgIHRyaWFsID0gcHJldmlvdXM7CisgICAgICAgIHRyaWFsLmFwcGVuZChleHBhbnNpb25MaW5lKTsKKyAgICAgICAgdHJpYWwuYXBwZW5kKCp0b1NvcnRba10pOyAgICAgICAgCisgICAgICAgIGlmKHRvU29ydFtrXS0+bmFtZVswXSA9PSAweDAwNjcpIHsKKyAgICAgICAgICBpbnQzMl90IHB1dEJyZWFrUG9pbnRIZXJlID0gMDsKKyAgICAgICAgfQorICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gcHJvYmUuY29tcGFyZSh0cmlhbCwgZXhwYW5zaW9uKTsKKyAgICAgICAgaWYoY29tcGFyaXNvblJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgZXhwYW5zaW9uTGluZSA9ICp0b1NvcnRba107CisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvblJlc3VsdCA+IDApIHsKKyAgICAgICAgICBpZihwcmV2SykgeworICAgICAgICAgICAgaWYoZXhwID09ICp0b1NvcnRbcHJldktdKSB7CisgICAgICAgICAgICAgIGV4cGFuc2lvbkxpbmUgPSBleHA7CisgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IHByZXZLOworICAgICAgICAgICAgd2hpbGUoaSA8IGstMSkgeworICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgIGlmKHRvU29ydFtpXS0+c3RyZW5ndGggPiBleHAuc3RyZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB0cmlhbCA9IHByZXZpb3VzOworICAgICAgICAgICAgICB0cmlhbC5hcHBlbmQoZXhwYW5zaW9uTGluZSk7CisgICAgICAgICAgICAgIHRyaWFsLmFwcGVuZCgqdG9Tb3J0W2ldKTsKKyAgICAgICAgICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgZXhwYW5zaW9uKSA+IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gd2UgZ290IGludG8gc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmUgY2ggPiBjaCtkb3QtYmVsb3cKKyAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGNoIGlzIGEgY29udHJhY3Rpb24gYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlCisgICAgICAgICAgICAvLyBpdCBwcm9wZXJseS4gSWYgd2UgaGF2ZSBoaXQgb24gYSBjb250cmFjdGlvbiwgd2UnbGwganVzdCB0cnkKKyAgICAgICAgICAgIC8vIHRvIGNvbnRpbnVlLiBQcm9iYWJseSBuZWVkIG1vcmUgbG9naWMgaGVyZS4KKyAgICAgICAgICAgIGlmKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyh0cmlhbC5uYW1lLCB0cmlhbC5sZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgIGV4cGFuc2lvbkxpbmUuYXBwZW5kKCp0b1NvcnRbaS0xXSk7CisgICAgICAgICAgICAgIGV4cEluZGV4ZXNbZXhwSW5kZXhTaXplKytdID0gaS0xOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXF1ZW5jZUNvbXBsZXRlZCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgLy9icmVhazsKKyAgICAgICAgfQorICAgICAgICBwcmV2SyA9IGs7CisgICAgICAgIGsrKzsKKyAgICAgIH0KKyAgICAgIGlmKCFwcmV2SyB8fCBrID09IHNpemUpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBleHBJbmRleFNpemUgPiAwOworfQorCitpbnQzMl90CitTb3J0ZWRMaW5lczo6Z29vc2VVcChpbnQzMl90IHJlc2V0SW5kZXgsIGludDMyX3QgZXhwYW5zaW9uSW5kZXgsIExpbmUgJmV4cExpbmUsIGludDMyX3QgKmV4cEluZGV4ZXMsIGludDMyX3QgJmV4cEluZGV4U2l6ZSwgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoKSAKK3sKKyAgaW50MzJfdCBpID0gZXhwYW5zaW9uSW5kZXgsIGsgPSByZXNldEluZGV4KzEsIG4gPSAwLCBtID0gMCwgc3RhcnQgPSAwOworICBVQm9vbCBoYXZlQ2hhbmdlcyA9IEZBTFNFOworICBMaW5lIHRyaWFsLCBwcmVmaXgsIHN1ZmZpeDsKKyAgLy8gd2Ugd2lsbCBmaXJzdCB0cnkgZ29vc2luZyB1cCB0aGUgcmVzZXQgaW5kZXgKKyAgLy93aGlsZSh0b1NvcnRba10tPnN0cmVuZ3RoID49IHN0cmVuZ3RoKQorICBmb3IoIDsgdG9Tb3J0W2tdLT5zdHJlbmd0aCA9PSBzdHJlbmd0aDsgaysrKSAKKyAgeworICAgIC8vaWYodG9Tb3J0W2tdLT5zdHJlbmd0aCA+IHN0cmVuZ3RoKSB7CisgICAgICAvL2NvbnRpbnVlOworICAgIC8vfQorICAgIHRyaWFsLnNldFRvQ29uY2F0KHRvU29ydFtrXSwgJmV4cExpbmUpOworICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwsICp0b1NvcnRbaV0pID4gMCkgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJlc2V0SW5kZXggPSBrLTE7CisKKyAgLy8gZ29vc2UgdXAgaW5kaXZpZHVhbCBjaGFyYWN0ZXJzCisgIHByZWZpeCA9ICp0b1NvcnRbcmVzZXRJbmRleF07CisgIGZvcihuID0gMDsgbiA8IGV4cEluZGV4U2l6ZTsgbisrKSB7CisgICAgc3VmZml4LmNsZWFyKCk7CisgICAgZm9yKG0gPSBuKzE7IG0gPCBleHBJbmRleFNpemU7IG0rKykgeworICAgICAgc3VmZml4LmFwcGVuZCgqdG9Tb3J0W2V4cEluZGV4ZXNbbV1dKTsKKyAgICB9CisgICAgayA9IGV4cEluZGV4ZXNbbl0rMTsKKyAgICAvL3doaWxlKHRvU29ydFtrXS0+c3RyZW5ndGggPj0gc3RyZW5ndGgpCisgICAgZm9yKCA7IHRvU29ydFtrXS0+c3RyZW5ndGggPT0gc3RyZW5ndGg7IGsrKykgCisgICAgeworICAgICAgLy9pZih0b1NvcnRba10tPnN0cmVuZ3RoID4gc3RyZW5ndGgpIHsKKyAgICAgICAgLy9jb250aW51ZTsKKyAgICAgIC8vfQorICAgICAgdHJpYWwuc2V0VG9Db25jYXQoJnByZWZpeCwgdG9Tb3J0W2tdKTsKKyAgICAgIHRyaWFsLmFwcGVuZChzdWZmaXgpOworICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgKnRvU29ydFtpXSkgPiAwKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZihrID4gZXhwSW5kZXhlc1tuXSsxKSB7CisgICAgICBoYXZlQ2hhbmdlcyA9IFRSVUU7CisgICAgICBleHBJbmRleGVzW25dID0gay0xOworICAgIH0KKyAgICBwcmVmaXguYXBwZW5kKCp0b1NvcnRbZXhwSW5kZXhlc1tuXV0pOworICB9CisKKyAgLy8gdHJ5IGluc2VydGluZyBpbmdvcmFibGVzCisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBsYXN0U3RyID0gVUNPTF9PRkY7CisgIGsgPSAwOworICB3aGlsZSh0b1NvcnRba10tPnN0cmVuZ3RoRnJvbUVtcHR5ID4gc3RyZW5ndGgpIHsKKyAgICBrKys7CisgIH0KKyAgaWYodG9Tb3J0W2tdLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBzdHJlbmd0aCkgeworICAgIHN0YXJ0ID0gazsKKyAgICBwcmVmaXggPSAqdG9Tb3J0W3Jlc2V0SW5kZXhdOworICAgIG4gPSAwOworICAgIHdoaWxlKG4gPD0gZXhwSW5kZXhTaXplKSB7CisgICAgICBzdWZmaXguY2xlYXIoKTsKKyAgICAgIGZvcihtID0gbjsgbSA8IGV4cEluZGV4U2l6ZTsgbSsrKSB7CisgICAgICAgIHN1ZmZpeC5hcHBlbmQoKnRvU29ydFtleHBJbmRleGVzW21dXSk7CisgICAgICB9CisgICAgICBrID0gc3RhcnQ7CisgICAgICB3aGlsZSh0b1NvcnRba10tPnN0cmVuZ3RoRnJvbUVtcHR5ID09IHN0cmVuZ3RoKSB7CisgICAgICAgIHRyaWFsLnNldFRvQ29uY2F0KCZwcmVmaXgsIHRvU29ydFtrXSk7CisgICAgICAgIHRyaWFsLmFwcGVuZChzdWZmaXgpOworICAgICAgICBsYXN0U3RyID0gcHJvYmUuZ2V0U3RyZW5ndGgodHJpYWwsICp0b1NvcnRbaV0pOworICAgICAgICBpZihsYXN0U3RyID09IFVDT0xfT0ZGKSB7IC8vIHNob3Qgb3ZlciAtIHdlIHdvbid0IGZpbmQgYW55dGhpbmcgaGVyZQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYobGFzdFN0ciA+IHN0cmVuZ3RoKSB7CisgICAgICAgICAgZm9yKG0gPSBleHBJbmRleFNpemU7IG0gPiBuOyBtLS0pIHsKKyAgICAgICAgICAgIGV4cEluZGV4ZXNbbV0gPSBleHBJbmRleGVzW20tMV07CisgICAgICAgICAgfQorICAgICAgICAgIGV4cEluZGV4ZXNbbl0gPSBrOworICAgICAgICAgIGV4cEluZGV4U2l6ZSsrOworICAgICAgICAgIGhhdmVDaGFuZ2VzID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmIDAKKyAgICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgKnRvU29ydFtpXSkgPiAwKSB7CisgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IG9uZSBza2lwcywgdGhhdCBtZWFucyB0aGF0CisgICAgICAgICAgLy8gdGhpcyBwb3NpdGlvbiBkb2Vzbid0IHdvcmsKKyAgICAgICAgICBpZihrID4gc3RhcnQpIHsKKyAgICAgICAgICAgIC8vIGluc2VydCBhbiBpZ25vcmFibGUgb24gcG9zaXRpb24gbgorICAgICAgICAgICAgZm9yKG0gPSBleHBJbmRleFNpemU7IG0gPiBuOyBtLS0pIHsKKyAgICAgICAgICAgICAgZXhwSW5kZXhlc1ttXSA9IGV4cEluZGV4ZXNbbS0xXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cEluZGV4ZXNbbl0gPSBrLTE7CisgICAgICAgICAgICBleHBJbmRleFNpemUrKzsKKyAgICAgICAgICAgIGhhdmVDaGFuZ2VzID0gVFJVRTsKKyAgICAgICAgICAgIGlmKG4gPT0gZXhwSW5kZXhTaXplLTEpIHsgLy8gYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHIgPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgKnRvU29ydFtpXSk7CisgICAgICAgICAgICAgIGludDMyX3QgcHV0QnJlYWtIZXJlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbGFzdFN0ciA9IHByb2JlLmdldFN0cmVuZ3RoKHRyaWFsLCAqdG9Tb3J0W2ldKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGsrKzsKKyAgICAgIH0KKyAgICAgIHByZWZpeC5hcHBlbmQoKnRvU29ydFtleHBJbmRleGVzW25dXSk7CisgICAgICBuKys7CisgICAgfQorICB9CisKKyAgaWYoaGF2ZUNoYW5nZXMpIHsKKyAgICBleHBMaW5lLmNsZWFyKCk7CisgICAgZm9yKG0gPSAwOyBtIDwgZXhwSW5kZXhTaXplOyBtKyspIHsKKyAgICAgIGV4cExpbmUuYXBwZW5kKCp0b1NvcnRbZXhwSW5kZXhlc1ttXV0pOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzZXRJbmRleDsKK30KKworaW50MzJfdCAKK1NvcnRlZExpbmVzOjpkZXRlY3RFeHBhbnNpb25zKCkgCit7CisgIGxvZ2dlci0+bG9nKCJcbioqKiBEZXRlY3RpbmcgZXhwYW5zaW9uc1xuXG4iKTsKKyAgaW50MzJfdCBleENvdW50ID0gMDsKKyAgaW50MzJfdCBpID0gMCwgaiA9IDAsIGsgPSAwLCBwcmV2SyA9IDA7CisgIExpbmUgKnByZXZpb3VzLCB0cmlhbCwgZXhwYW5zaW9uTGluZTsKKyAgVUJvb2wgZm91bmRFeHAgPSBGQUxTRSwgc2VxdWVuY2VDb21wbGV0ZWQgPSBGQUxTRTsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoID0gVUNPTF9PRkY7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBtYXhTdHJlbmd0aCA9IFVDT0xfSURFTlRJQ0FMOworICBVQ29sQXR0cmlidXRlVmFsdWUgZXhwU3RyZW5ndGggPSBVQ09MX09GRjsKKyAgaW50MzJfdCBleHBJbmRleGVzWzI1Nl07CisgIGludDMyX3QgZXhwSW5kZXhTaXplID0gMDsKKyAgbWVtc2V0KGV4cEluZGV4ZXMsIDAsIHNpemVvZihleHBJbmRleGVzKSk7CisKKyAgLy8gZm9yIGVhY2ggZWxlbWVudCwgd2UgbG9vayBiYWNrIHRvIGZpbmQgd2hldGhlciB0aGVyZSBpcyBzdWNoIGEgcSBmb3Igd2hpY2gKKyAgLy8gcSA8biB4IDwgcVVCbi4gVGhlc2UgYXJlIHBvc3NpYmxlIGV4cGFuc2lvbnMuIFdoZW4gZ29pbmcgYmFja3dhcmRzIHdlIHNraXAgCisgIC8vIG92ZXIgYWxyZWFkeSBkZXRlY3RlZCBleHBhbnNpb25zLgorICBpID0gMDsKKyAgLy8gaXQgdHVybnMgb3V0IHRoYXQgbG9va2luZyBhdCBhY2NlbnRzIGFzIHBvc3NpYmxlIGV4cGFuc2lvbnMgaXMKKyAgLy8gcXVpdGUgYSBzdHVwaWQgdGhpbmcgdG8gZG8sIGVzcGVjaWFsbHkgb24gbm9uIElDVSBwbGF0Zm9ybXMuCisgIC8vIFByZXZpb3VzbHkgdGhpcyBsaW5lIHNraXBwZWQgb3ZlciBpZGVudGljYWxzIG9ubHksIGJ1dCAKKyAgLy8gbm93IHdlIGFyZSBnb2luZyB0byBza2lwIGFsbCB0aGUgd2F5IHRvIG5vbi1pZ25vcmFibGVzLgorICB3aGlsZSh0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5ID4gVUNPTF9QUklNQVJZKSB7CisgICAgaSsrOworICB9CisgIGkrKzsKKyAgZm9yKCA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBpZih0b1NvcnRbaV0tPm5hbWVbMF09PTB4MDA2MyAmJiB0b1NvcnRbaV0tPm5hbWVbMV0gPT0gMHg2OCkgLy8gJiYgdG9Tb3J0W2ldLT5uYW1lWzFdID09IDB4MzA4KTAwNDMgMDA0MyAwMjE5CisgICAgeyAKKyAgICAgIGludDMyX3QgcHV0QnJlYWtwb2ludGhlcmUgPSAwOworICAgIH0KKyAgICBmb3VuZEV4cCA9IEZBTFNFOworICAgIHNlcXVlbmNlQ29tcGxldGVkID0gRkFMU0U7CisgICAgc3RyZW5ndGggPSB0b1NvcnRbaV0tPnN0cmVuZ3RoOworICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMICYmIHRvU29ydFtpLTFdLT5pc0V4cGFuc2lvbiA9PSBUUlVFKSB7CisgICAgICB1X3N0cmNweSh0b1NvcnRbaV0tPmV4cGFuc2lvblN0cmluZywgdG9Tb3J0W2ktMV0tPmV4cGFuc2lvblN0cmluZyk7CisgICAgICB0b1NvcnRbaV0tPmV4cExlbiA9IHRvU29ydFtpLTFdLT5leHBMZW47CisgICAgICB0b1NvcnRbaV0tPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgICAgIHRvU29ydFtpXS0+ZXhwSW5kZXggPSB0b1NvcnRbaS0xXS0+ZXhwSW5kZXg7CisgICAgICB0b1NvcnRbaV0tPmV4cFN0cmVuZ3RoID0gVUNPTF9JREVOVElDQUw7CisgICAgICAvL3RvU29ydFtpXS0+ZXhwU3RyZW5ndGggPSB0b1NvcnRbaS0xXS0+ZXhwU3RyZW5ndGg7CisgICAgICBmb3VuZEV4cCA9IFRSVUU7CisgICAgICBzZXF1ZW5jZUNvbXBsZXRlZCA9IFRSVUU7CisgICAgfQorICAgIC8vbG9nZ2VyLT5sb2coIiVpICVpXG4iLCBpLCBqKTsKKyAgICB3aGlsZSghZm91bmRFeHAgJiYgc3RyZW5ndGggPD0gbWF4U3RyZW5ndGgpIHsKKyAgICAgIGogPSBpLTE7CisgICAgICB3aGlsZShqICYmICh0b1NvcnRbal0tPmlzRXhwYW5zaW9uID09IFRSVUUgfHwgdG9Tb3J0W2pdLT5pc1JlbW92ZWQgPT0gVFJVRSkpIHsKKyAgICAgICAgLy9pZih0b1NvcnRbal0tPnN0cmVuZ3RoIDwgc3RyZW5ndGgpIHsKKyAgICAgICAgICAvL3N0cmVuZ3RoID0gdG9Tb3J0W2pdLT5zdHJlbmd0aDsKKyAgICAgICAgLy99CisgICAgICAgIGotLTsKKyAgICAgIH0KKworICAgICAgLy93aGlsZShqICYmIHRvU29ydFtqXS0+c3RyZW5ndGggPiBzdHJlbmd0aCkKKyAgICAgIHdoaWxlKGogJiYgdG9Tb3J0W2pdLT5zdHJlbmd0aCA+IHByb2JlLmdldFN0cmVuZ3RoKCp0b1NvcnRbal0sICp0b1NvcnRbaV0pKQorICAgICAgeworICAgICAgICBqLS07CisgICAgICB9CisgICAgICAvL2lmKHRvU29ydFtqXS0+c3RyZW5ndGggPT0gc3RyZW5ndGgpIHsKKyAgICAgICAgcHJldmlvdXMgPSB0b1NvcnRbal07CisgICAgICAgIGlmKHByZXZpb3VzLT5zdHJlbmd0aEZyb21FbXB0eSA+PSBVQ09MX0lERU5USUNBTCB8fAorICAgICAgICAgIChwcmV2aW91cy0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gVUNPTF9TRUNPTkRBUlkKKyAgICAgICAgICAmJiBzdHJlbmd0aCA9PSBVQ09MX1NFQ09OREFSWQorICAgICAgICAgICYmIHByZXZpb3VzLT5sYXN0Q0MgPiBVQltzdHJlbmd0aF0tPmZpcnN0Q0MpKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLy9jb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvL3RyaWFsLnNldFRvQ29uY2F0KHByZXZpb3VzLCBVQltzdHJlbmd0aF0pOworICAgICAgICB0cmlhbC5zZXRUb0NvbmNhdChwcmV2aW91cywgVUJbcHJvYmUuZ2V0U3RyZW5ndGgoKnRvU29ydFtqXSwgKnRvU29ydFtpXSldKTsKKyAgICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgKnRvU29ydFtpXSkgPiAwKSB7CisgICAgICAgICAgZm91bmRFeHAgPSBUUlVFOworICAgICAgICB9CisgICAgICAvL30KKyAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfUVVBVEVSTkFSWSkgeworICAgICAgICBzdHJlbmd0aCA9IFVDT0xfSURFTlRJQ0FMOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyZW5ndGggPSAoVUNvbEF0dHJpYnV0ZVZhbHVlKShzdHJlbmd0aCArIDEpOworICAgICAgfQorICAgIH0KKyAgICAvLyBjYWxjdWxhdGUgdGhlIGV4cGFuZGluZyBzZXF1ZW5jZQorICAgIGlmKGZvdW5kRXhwICYmICFzZXF1ZW5jZUNvbXBsZXRlZCkgeworICAgICAgZXhwSW5kZXhTaXplID0gMDsKKyAgICAgIGV4cGFuc2lvbkxpbmUuY2xlYXIoKTsKKyAgICAgIGV4Q291bnQrKzsKKyAgICAgIC8vIHdlIHdpbGwgc3RhcnQgZnJvbSBzdHJlbmd0aCBiZXR3ZWVuIHRoZSBleHBhbnNpb24KKyAgICAgIC8vIGFuZCB0aGUgdGFyZ2V0ICh0b1NvcnRbaV0gYW5kIHRvU29ydFtqXS4gRmlyc3Qgd2UKKyAgICAgIC8vIHdpbGwgYWRkIGFzIG1hbnkgcHJpbWFyaWVzIGFzIHBvc3NpYmxlLiBUaGVuIHdlIHdpbGwKKyAgICAgIC8vIHRyeSB0byBhZGQgc2Vjb25kYXJ5IHBpZWNlcyBhbmQgdGhlbiB0ZXJ0aWFyeS4gCisgICAgICAvLyBmb3VuZCBhbiBleHBhbnNpb24gLSB3aGF0IGlzIHRoZSBleHBhbmRpbmcgc2VxdWVuY2U/CisgICAgICAKKyAgICAgIGV4cFN0cmVuZ3RoID0gVUNPTF9QUklNQVJZOworICAgICAgd2hpbGUoIXNlcXVlbmNlQ29tcGxldGVkKSB7CisgICAgICAgIGsgPSAwOworICAgICAgICBwcmV2SyA9IDA7CisgICAgICAgIHdoaWxlKGsgPCBzaXplKSB7CisgICAgICAgICAgaWYoZXhwYW5zaW9uTGluZS5sZW4gPiAxNSkgeworICAgICAgICAgICAgc2VxdWVuY2VDb21wbGV0ZWQgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHdoaWxlKGsgPCBzaXplICYmIHRvU29ydFtrXS0+c3RyZW5ndGggIT0gVUNPTF9QUklNQVJZKSB7CisgICAgICAgICAgICBrKys7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIG5vdGhpbmcgZm91bmQKKyAgICAgICAgICBpZihrID09IHNpemUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNraXAgb3ZlciByZW9yZGVyaW5nIHRoaW5ncy4gSWYgdGhleSB3ZXJlIHdvcnRoeSwgdGhleSB3b3VsZAorICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLgorICAgICAgICAgIC8vaWYoZXhwYW5zaW9uTGluZS5sYXN0Q0MgJiYgdG9Tb3J0W2tdLT5maXJzdENDICYmIGV4cGFuc2lvbkxpbmUubGFzdENDID4gdG9Tb3J0W2tdLT5maXJzdENDKSB7CisgICAgICAgICAgICAvL2srKzsKKyAgICAgICAgICAgIC8vY29udGludWU7CisgICAgICAgICAgLy99CisgICAgICAgICAgdHJpYWwgPSAqcHJldmlvdXM7CisgICAgICAgICAgdHJpYWwuYXBwZW5kKGV4cGFuc2lvbkxpbmUpOworICAgICAgICAgIHRyaWFsLmFwcGVuZCgqdG9Tb3J0W2tdKTsgICAgICAgIAorICAgICAgICAgIGlmKHRvU29ydFtrXS0+bmFtZVswXSA9PSAweDAwNjcpIHsKKyAgICAgICAgICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsLCAqdG9Tb3J0W2ldKSA+IDApIHsKKyAgICAgICAgICAgIGlmKHByZXZLKSB7CisgICAgICAgICAgICAgIC8vIHdlIGdvdCBpbnRvIHNpdHVhdGlvbiB3aGVyZSB3ZSBoYXZlIGNoID4gY2grZG90LWJlbG93CisgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGNoIGlzIGEgY29udHJhY3Rpb24gYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlCisgICAgICAgICAgICAgIC8vIGl0IHByb3Blcmx5LiBJZiB3ZSBoYXZlIGhpdCBvbiBhIGNvbnRyYWN0aW9uLCB3ZSdsbCBqdXN0IHRyeQorICAgICAgICAgICAgICAvLyB0byBjb250aW51ZS4gUHJvYmFibHkgbmVlZCBtb3JlIGxvZ2ljIGhlcmUuCisgICAgICAgICAgICAgIGlmKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyh0cmlhbC5uYW1lLCB0cmlhbC5sZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZXhwYW5zaW9uTGluZS5hcHBlbmQoKnRvU29ydFtwcmV2S10pOworICAgICAgICAgICAgICAgIGV4cEluZGV4ZXNbZXhwSW5kZXhTaXplKytdID0gcHJldks7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBwdXRCcmVha1BvaW50SGVyZSA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlcXVlbmNlQ29tcGxldGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2JyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmV2SyA9IGs7CisgICAgICAgICAgaysrOworICAgICAgICB9CisgICAgICAgIGlmKCFwcmV2SyB8fCBrID09IHNpemUpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gYWZ0ZXIgdGhpcyB3ZSBoYXZlIHByaW1hcmllcyBsaW5lZCB1cC4KKyAgICAgIC8vIHdlIGFyZSBnb2luZyB0byBnb29zZSB1cCB3aXRoIHNlY29uZGFyaWVzIGFuZCAKKyAgICAgIC8vIHRlcnRpYXJpZXMKKyAgICAgIHRyaWFsLnNldFRvQ29uY2F0KHRvU29ydFtqXSwgJmV4cGFuc2lvbkxpbmUpOworICAgICAgZXhwU3RyZW5ndGggPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgKnRvU29ydFtpXSk7CisgICAgICBpZihleHBTdHJlbmd0aCA+IFVDT0xfUFJJTUFSWSkgeworICAgICAgICBpZihleHBTdHJlbmd0aCA9PSBVQ09MX1NFQ09OREFSWSB8fCBleHBTdHJlbmd0aCA9PSBVQ09MX09GRikgeworICAgICAgICAgIGogPSBnb29zZVVwKGosIGksIGV4cGFuc2lvbkxpbmUsIGV4cEluZGV4ZXMsIGV4cEluZGV4U2l6ZSwgVUNPTF9TRUNPTkRBUlkpOworICAgICAgICAgIHRyaWFsLnNldFRvQ29uY2F0KHRvU29ydFtqXSwgJmV4cGFuc2lvbkxpbmUpOworICAgICAgICAgIGV4cFN0cmVuZ3RoID0gcHJvYmUuZ2V0U3RyZW5ndGgodHJpYWwsICp0b1NvcnRbaV0pOworICAgICAgICAgIGlmKGV4cFN0cmVuZ3RoID09IFVDT0xfVEVSVElBUlkpIHsKKyAgICAgICAgICAgIGogPSBnb29zZVVwKGosIGksIGV4cGFuc2lvbkxpbmUsIGV4cEluZGV4ZXMsIGV4cEluZGV4U2l6ZSwgVUNPTF9URVJUSUFSWSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYoZXhwU3RyZW5ndGggPT0gVUNPTF9URVJUSUFSWSkgeworICAgICAgICAgIGogPSBnb29zZVVwKGosIGksIGV4cGFuc2lvbkxpbmUsIGV4cEluZGV4ZXMsIGV4cEluZGV4U2l6ZSwgVUNPTF9URVJUSUFSWSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRyaWFsLnNldFRvQ29uY2F0KHRvU29ydFtqXSwgJmV4cGFuc2lvbkxpbmUpOworICAgICAgZXhwU3RyZW5ndGggPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgKnRvU29ydFtpXSk7CisgICAgICBpZihleHBhbnNpb25MaW5lLmxlbikgeworICAgICAgICBpZihleHBhbnNpb25MaW5lLm5hbWVbMF0gPT0gMHg3MyAmJiBleHBhbnNpb25MaW5lLm5hbWVbMV0gPT0gMHg3YSkgeworICAgICAgICAgIGludDMyX3QgcHV0QnJlYWtwb2ludGhlcmUgPSAwOworICAgICAgICB9CisgICAgICAgIFVCb29sIGlzRXhwYW5zaW9uTGluZUFDb250cmFjdGlvbiA9IChjb250cmFjdGlvbnNUYWJsZS0+Z2V0KFVuaWNvZGVTdHJpbmcoZXhwYW5zaW9uTGluZS5uYW1lLCBleHBhbnNpb25MaW5lLmxlbikpICE9IE5VTEwpOworICAgICAgICAvLyB3ZSBoYXZlIGFuIGV4cGFuc2lvbiBsaW5lIGFuZCBhbiBleHBhbnNpb24uIFRoZXJlIGNvdWxkIGJlIHNvbWUgZXhwYW5zaW9ucyB3aGVyZSAKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBhbnNpb24gbGluZSBhbmQgdGhlIGVuZCBvZiBleHBhbnNpb24gc2VxdWVuY2UgaXMgbGVzcyBvciAKKyAgICAgICAgLy8gZXF1YWwgdGhhbiB0aGUgZXhwYW5zaW9uIHN0cmVuZ3RoLiBUaGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZC4KKyAgICAgICAgaW50MzJfdCBkaWZmTGVuID0gdG9Tb3J0W2ldLT5sZW4gLSBleHBhbnNpb25MaW5lLmxlbjsKKyAgICAgICAgaWYoZGlmZkxlbiA+IDApIHsKKyAgICAgICAgICB0cmlhbC5zZXRUbyhVbmljb2RlU3RyaW5nKHRvU29ydFtpXS0+bmFtZSArIGRpZmZMZW4sIHRvU29ydFtpXS0+bGVuIC0gZGlmZkxlbikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyaWFsID0gKnRvU29ydFtpXTsKKyAgICAgICAgfQorICAgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgczEgPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgZXhwYW5zaW9uTGluZSk7CisgICAgICAgIGlmKHMxID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgczEgPSBwcm9iZS5nZXRTdHJlbmd0aChleHBhbnNpb25MaW5lLCB0cmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoKCFpc0V4cGFuc2lvbkxpbmVBQ29udHJhY3Rpb24gJiYgczEgPj0gZXhwU3RyZW5ndGgpIHx8IChkaWZmTGVuIDw9IDAgJiYgczEgPT0gVUNPTF9JREVOVElDQUwpKSB7CisgICAgICAgICAgY29udHJhY3Rpb25zVGFibGUtPnJlbW92ZShVbmljb2RlU3RyaW5nKHRvU29ydFtpXS0+bmFtZSwgdG9Tb3J0W2ldLT5sZW4pKTsKKyAgICAgICAgICB0b1NvcnRbaV0tPmlzUmVtb3ZlZCA9IFRSVUU7CisgICAgICAgICAgaWYodG9Tb3J0W2ldLT5uZXh0ICYmIHRvU29ydFtpXS0+cHJldmlvdXMpIHsKKyAgICAgICAgICAgIHRvU29ydFtpXS0+cHJldmlvdXMtPm5leHQgPSB0b1NvcnRbaV0tPm5leHQ7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKHRvU29ydFtpXS0+cHJldmlvdXMgJiYgdG9Tb3J0W2ldLT5uZXh0KSB7CisgICAgICAgICAgICB0b1NvcnRbaV0tPm5leHQtPnByZXZpb3VzID0gdG9Tb3J0W2ldLT5wcmV2aW91czsKKyAgICAgICAgICB9CisJICAgICAgZGVidWctPmxvZygiRXhwIC1OOiAiKTsKKwkgICAgICBkZWJ1Zy0+bG9nKHRvU29ydFtpXS0+dG9TdHJpbmcoRkFMU0UpKTsKKwkgICAgICBkZWJ1Zy0+bG9nKCIgLyAiKTsKKwkgICAgICBkZWJ1Zy0+bG9nKGV4cGFuc2lvbkxpbmUudG9TdHJpbmcoRkFMU0UpLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsgICAgICAgICAKKyAgICAgICAgICB1X3N0cm5jYXQodG9Tb3J0W2ldLT5leHBhbnNpb25TdHJpbmcsIGV4cGFuc2lvbkxpbmUubmFtZSwgZXhwYW5zaW9uTGluZS5sZW4pOworICAgICAgICAgIHRvU29ydFtpXS0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgICAgICAgIHRvU29ydFtpXS0+ZXhwU3RyZW5ndGggPSBleHBTdHJlbmd0aDsKKyAgICAgICAgICB0b1NvcnRbaV0tPmV4cExlbiA9IGV4cGFuc2lvbkxpbmUubGVuOworICAgICAgICAgIHRvU29ydFtpXS0+ZXhwYW5zaW9uU3RyaW5nW3RvU29ydFtpXS0+ZXhwTGVuXSA9IDA7CisgICAgICAgICAgdG9Tb3J0W2ldLT5leHBJbmRleCA9IGo7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYodG9Tb3J0W2ldLT5pc0V4cGFuc2lvbiA9PSBUUlVFKSB7CisgICAgICBpZihkZWJ1Zy0+aXNPbigpKSB7CisgICAgICAgIGRlYnVnLT5sb2coIkV4cCArIDogJiIpOworICAgICAgICBkZWJ1Zy0+bG9nKHRvU29ydFtqXS0+dG9TdHJpbmcoRkFMU0UpKTsKKyAgICAgICAgZGVidWctPmxvZyh0b1NvcnRbaV0tPnN0cmVuZ3RoVG9TdHJpbmcodG9Tb3J0W2ldLT5leHBTdHJlbmd0aCwgVFJVRSkpOworICAgICAgICBkZWJ1Zy0+bG9nKHRvU29ydFtpXS0+dG9TdHJpbmcoRkFMU0UpKTsKKyAgICAgICAgZGVidWctPmxvZygiICIpOworICAgICAgICBpZighdG9Tb3J0W2pdLT5zb3J0S2V5KSB7CisgICAgICAgICAgY2FsY3VsYXRlU29ydEtleSgqdG9Tb3J0W2pdKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1Zy0+bG9nKHRvU29ydFtqXS0+ZHVtcFNvcnRrZXkoKSk7CisgICAgICAgIGRlYnVnLT5sb2coIiAuLi4gIik7CisgICAgICAgIGlmKCF0b1NvcnRbaV0tPnNvcnRLZXkpIHsKKyAgICAgICAgICBjYWxjdWxhdGVTb3J0S2V5KCp0b1NvcnRbaV0pOworICAgICAgICB9CisgICAgICAgIGRlYnVnLT5sb2codG9Tb3J0W2ldLT5kdW1wU29ydGtleSgpKTsKKyAgICAgICAgY2FsY3VsYXRlU29ydEtleShleHBhbnNpb25MaW5lKTsKKyAgICAgICAgZGVidWctPmxvZygiLyIpOworICAgICAgICBkZWJ1Zy0+bG9nKGV4cGFuc2lvbkxpbmUuZHVtcFNvcnRrZXkoKSwgVFJVRSk7CisgICAgICB9CisgICAgICAKKyAgICB9CisgIH0KKyAgLy8gYWZ0ZXIgZGV0ZWN0aW5nIGV4cGFuc2lvbnMsIHdlIHdhbnQgdG8gcG9zaXRpb24gdGhlbS4gCisgIC8vIGl0IGlzIGJldHRlciB0byBwb3NpdGlvbiBleHBhbnNpb25zIGFmdGVyIGFsbCBoYXZlIGJlZW4gZGV0ZWN0ZWQsCisgIC8vIHNpbmNlIG90aGVyd2lzZSB3ZSB3aWxsIGNoYW5nZSB0aGUgb3JkZXJpbmcuCisgIGZvcihpID0gc2l6ZS0xOyBpID49IDA7IGktLSkgeworICAgIGlmKHRvU29ydFtpXS0+aXNFeHBhbnNpb24pIHsKKyAgICAgIGlmKHRvU29ydFtpXS0+bmFtZVswXSA9PSAweDJBMykgeworICAgICAgICBpbnQzMl90IHB1dEJyZWFrUG9pbnRIZXJlID0gMDsKKyAgICAgIH0KKyAgICAgIGlmKGkpIHsKKyAgICAgICAgaWYodG9Tb3J0W2ldLT5wcmV2aW91cykgeworICAgICAgICAgIHRvU29ydFtpXS0+cHJldmlvdXMtPm5leHQgPSB0b1NvcnRbaV0tPm5leHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKGkgPCBzaXplLTEpIHsKKyAgICAgICAgaWYodG9Tb3J0W2ldLT5uZXh0KSB7CisgICAgICAgICAgdG9Tb3J0W2ldLT5uZXh0LT5wcmV2aW91cyA9IHRvU29ydFtpXS0+cHJldmlvdXM7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGogPSB0b1NvcnRbaV0tPmV4cEluZGV4OworICAgICAgdG9Tb3J0W2ldLT5uZXh0ID0gdG9Tb3J0W2pdLT5uZXh0OworICAgICAgdG9Tb3J0W2ldLT5wcmV2aW91cyA9IHRvU29ydFtqXTsKKyAgICAgIHRvU29ydFtqXS0+bmV4dCA9IHRvU29ydFtpXTsKKyAgICAgIGlmKHRvU29ydFtpXS0+bmV4dCkgeworICAgICAgICB0b1NvcnRbaV0tPm5leHQtPnByZXZpb3VzID0gdG9Tb3J0W2ldOworICAgICAgfQorICAgICAgdG9Tb3J0W2ldLT5zdHJlbmd0aCA9IHRvU29ydFtpXS0+ZXhwU3RyZW5ndGg7CisgICAgfQorICB9CisgIHJldHVybiBleENvdW50OworfQorCisKK0xpbmUgKgorU29ydGVkTGluZXM6OmdldEZpcnN0KCkgeworICBjdXJyZW50ID0gZmlyc3Q7CisgIHJldHVybiBjdXJyZW50OworfQorCitMaW5lICoKK1NvcnRlZExpbmVzOjpnZXRMYXN0KCkgeworICBjdXJyZW50ID0gbGFzdDsKKyAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKK3ZvaWQgCitTb3J0ZWRMaW5lczo6YWRkKExpbmUgKmxpbmUsIFVCb29sIGxpbmtJbikgeworICBpZihzaXplKysgPT0gY2FwYWNpdHkpIHsKKyAgICAvLyBncm93CisgIH0KKyAgbGluZXNbc2l6ZV0gPSAqbGluZTsKKyAgTGluZSAqdG9BZGQgPSAmbGluZXNbc2l6ZV07CisgIGlmKGxpbmtJbiAmJiBmaXJzdCkgeworICAgIExpbmUgKmN1cnJlbnQgPSBmaXJzdDsKKyAgICB3aGlsZShjdXJyZW50ICE9IE5VTEwgJiYgcHJvYmUuY29tcGFyZXIoJmN1cnJlbnQsICZ0b0FkZCkgPCAwKSB7CisgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKyAgICB9CisgICAgaWYoY3VycmVudCA9PSBOVUxMKSB7CisgICAgICB0b0FkZC0+cHJldmlvdXMgPSBsYXN0OworICAgICAgdG9BZGQtPm5leHQgPSBOVUxMOworICAgICAgaWYobGFzdCAhPSBOVUxMKSB7CisgICAgICAgIGxhc3QtPm5leHQgPSB0b0FkZDsKKyAgICAgIH0KKyAgICAgIGxhc3QgPSB0b0FkZDsKKyAgICAgIGlmKGZpcnN0ID09IE5VTEwpIHsKKyAgICAgICAgZmlyc3QgPSB0b0FkZDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBjdXJyZW50ICE9IE5VTEwKKyAgICAgIHRvQWRkLT5uZXh0ID0gY3VycmVudDsKKyAgICAgIHRvQWRkLT5wcmV2aW91cyA9IGN1cnJlbnQtPnByZXZpb3VzOworICAgICAgaWYoY3VycmVudC0+cHJldmlvdXMpIHsKKyAgICAgICAgY3VycmVudC0+cHJldmlvdXMtPm5leHQgPSB0b0FkZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZpcnN0ID0gdG9BZGQ7CisgICAgICB9CisgICAgICBjdXJyZW50LT5wcmV2aW91cyA9IHRvQWRkOworICAgIH0KKyAgfQorfQorCisKK0xpbmUgKgorU29ydGVkTGluZXM6OmdldE5leHQoKQoreworICBpZihjdXJyZW50ICE9IE5VTEwpIHsKKyAgICBjdXJyZW50PWN1cnJlbnQtPm5leHQ7CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKK0xpbmUgKgorU29ydGVkTGluZXM6OmdldFByZXZpb3VzKCkKK3sKKyAgaWYoY3VycmVudCAhPSBOVUxMKSB7CisgICAgY3VycmVudD1jdXJyZW50LT5wcmV2aW91czsKKyAgfQorICByZXR1cm4gY3VycmVudDsKK30KKworTGluZSAqCitTb3J0ZWRMaW5lczo6b3BlcmF0b3JbXShpbnQzMl90IGluZGV4KQoreworICBpbnQzMl90IGkgPSAwOworICBMaW5lICpjID0gZmlyc3Q7CisgIGZvcihpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICBpZihjICE9IE5VTEwpIHsKKyAgICAgIGMgPSBjLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gYzsKK30KKworVW5pY29kZVN0cmluZworU29ydGVkTGluZXM6OmFycmF5VG9TdHJpbmcoTGluZSoqIHNvcnRlZExpbmVzLCBpbnQzMl90IGxpbmVzU2l6ZSwgVUJvb2wgcHJldHR5LCBVQm9vbCB1c2VMaW5rcywgVUJvb2wgcHJpbnRTb3J0S2V5cykgeworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgaW50MzJfdCBpID0gMDsKKworICBMaW5lICpsaW5lID0gTlVMTDsKKyAgTGluZSAqcHJldmlvdXMgPSBzb3J0ZWRMaW5lc1swXTsKKyAgaWYocHJpbnRTb3J0S2V5cyAmJiAhc29ydGtleXMpIHsKKyAgICBwcmludFNvcnRLZXlzID0gRkFMU0U7CisgIH0KKyAgaWYocHJldmlvdXMtPmlzUmVzZXQpIHsKKyAgICByZXN1bHQuYXBwZW5kKCIgJiAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHByZXZpb3VzLT5uYW1lLCBwcmV2aW91cy0+bGVuKTsKKyAgICBpZihwcmV0dHkpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAgICAgIyAiKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQocHJldmlvdXMtPnN0cmluZ1RvTmFtZShwcmV2aW91cy0+bmFtZSwgcHJldmlvdXMtPmxlbikpOworICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICB9CisgIH0gZWxzZSBpZighcHJldmlvdXMtPmlzUmVtb3ZlZCkgeworICAgIHJlc3VsdC5hcHBlbmQocHJldmlvdXMtPnRvU3RyaW5nKHByZXR0eSkpOworICAgIGlmKHByZXR0eSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICB9CisgIH0KKyAgaSA9IDE7CisgIHdoaWxlKChpIDwgbGluZXNTaXplICYmICF1c2VMaW5rcykgfHwgKHByZXZpb3VzLT5uZXh0ICYmIHVzZUxpbmtzKSkgeworICAgIGlmKHVzZUxpbmtzKSB7CisgICAgICBsaW5lID0gcHJldmlvdXMtPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmUgPSBzb3J0ZWRMaW5lc1tpXTsKKyAgICB9CisgICAgaWYobGluZS0+aXNSZXNldCkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiICYiKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+bmFtZSwgbGluZS0+bGVuKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgICAgICMgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+c3RyaW5nVG9OYW1lKGxpbmUtPm5hbWUsIGxpbmUtPmxlbikpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgICAgfQorICAgIH0gZWxzZSBpZighbGluZS0+aXNSZW1vdmVkKSB7CisgICAgICBpZihpID4gMCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPnN0cmVuZ3RoVG9TdHJpbmcobGluZS0+c3RyZW5ndGgsIHByZXR0eSkpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT50b1N0cmluZyhwcmV0dHkpKTsKKyAgICAgIGlmKHByaW50U29ydEtleXMpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT5kdW1wU29ydGtleSgpKTsKKyAgICAgIH0KKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgICAgfQorICAgIH0KKyAgICBwcmV2aW91cyA9IGxpbmU7CisgICAgaSsrOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1NvcnRlZExpbmVzOjpTb3J0ZWRMaW5lcyhGSUxFICpmaWxlLCBVUHJpbnRlciAqbG9nZ2VyLCBVUHJpbnRlciAqZGVidWcsIFVFcnJvckNvZGUgJnN0YXR1cykgOgordG9Tb3J0KE5VTEwpLAordG9Tb3J0Q2FwYWNpdHkoMCksCitsaW5lcyhOVUxMKSwKK3NpemUoMCksCitjYXBhY2l0eSgwKSwKK2ZpcnN0KE5VTEwpLAorbGFzdChOVUxMKSwKK2xvZ2dlcihsb2dnZXIpLAorZGVidWcoZGVidWcpLAorY29udHJhY3Rpb25zVGFibGUoTlVMTCksCitkdXBsaWNhdG9ycyhOVUxMKSwKK21heEV4cGFuc2lvblByZWZpeFNpemUoMCksCit3b3JkU29ydChGQUxTRSksCitmcmVuY2hTZWNvbmRhcnkoRkFMU0UpLAordXBwZXJGaXJzdChGQUxTRSksCitzb3J0a2V5cyhOVUxMKSwKK3NvcnRrZXlPZmZzZXQoMCkKK3sKKyAgZGVidWctPmxvZygiKioqIGxvYWRpbmcgYSBkdW1wXG4iKTsKKyAgbWVtc2V0KFVCLCAwLCBzaXplb2YoVUIpKTsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgVUNPTF9PRkY7IGkrKykgeworICAgIFVCW2ldID0gJmVtcHR5OworICB9CisKKyAgaW50MzJfdCBuZXdGcmVuY2gsIG5ld1VwcGVyRmlyc3Q7CisgIGZzY2FuZihmaWxlLCAiJWksJWksJWlcbiIsICZzaXplLCAmbmV3RnJlbmNoLCAmbmV3VXBwZXJGaXJzdCk7CisgIGRlYnVnLT5sb2coIlJlYWQgc2l6ZSAlaSwgZnJlbmNoU2Vjb25kYXJ5ICVpIGFuZCB1cHBlckZpcnN0ICVpXG4iLCBzaXplLCBuZXdGcmVuY2gsIG5ld1VwcGVyRmlyc3QpOworICBmcmVuY2hTZWNvbmRhcnkgPSAoVUJvb2wpbmV3RnJlbmNoOworICB1cHBlckZpcnN0ID0gKFVCb29sKW5ld1VwcGVyRmlyc3Q7CisgIGNhcGFjaXR5ID0gc2l6ZTsKKyAgbGluZXMgPSBuZXcgTGluZVtjYXBhY2l0eV07CisgIGkgPSAwOworCisgIGNoYXIgYnVmZlsyNTZdOworCisgIHdoaWxlKGZnZXRzKGJ1ZmYsIDI1NiwgZmlsZSkpIHsKKyAgICBpZihpICUgMjAgPT0gMCkgeworICAgICAgbG9nZ2VyLT5sb2coIlxyTGluZTogJTA0aSIsIGksIGJ1ZmYpOworICAgIH0KKyAgICBsaW5lc1tpXS5pbml0RnJvbVN0cmluZyhidWZmLCAyNTYsIHN0YXR1cyk7CisgICAgaWYoaSkgeworICAgICAgbGluZXNbaV0ucHJldmlvdXMgPSAmbGluZXNbaS0xXTsKKyAgICAgIGxpbmVzW2ktMV0ubmV4dCA9ICZsaW5lc1tpXTsKKyAgICB9CisgICAgaSsrOworICB9CisgIHNpemUgPSBpOworICB0b1NvcnQgPSBuZXcgTGluZSpbc2l6ZV07CisgIHNldFNvcnRpbmdBcnJheSh0b1NvcnQsIGxpbmVzLCBzaXplKTsKKyAgZmlyc3QgPSAmbGluZXNbMF07CisgIGxhc3QgPSAmbGluZXNbc2l6ZS0xXTsKK30KKwordm9pZAorU29ydGVkTGluZXM6OnRvRmlsZShGSUxFICpmaWxlLCBVQm9vbCB1c2VMaW5rcywgVUVycm9yQ29kZSAmc3RhdHVzKSAKK3sKKyAgZnByaW50ZihmaWxlLCAiJWksJWksJWlcbiIsIHNpemUsIGZyZW5jaFNlY29uZGFyeSwgdXBwZXJGaXJzdCk7CisgIGludDMyX3QgaSA9IDE7CisgIExpbmUgKnByZXZpb3VzID0gdG9Tb3J0WzBdOworICBMaW5lICpsaW5lID0gTlVMTDsKKyAgY2hhciBidWZmWzI1Nl07CisgIHByZXZpb3VzLT53cml0ZShidWZmLCAyNTYsIHN0YXR1cyk7CisgIGZwcmludGYoZmlsZSwgIiVzXG4iLCBidWZmKTsKKyAgZmZsdXNoKGZpbGUpOworICB3aGlsZShwcmV2aW91cy0+bmV4dCkgeworICAgIGlmKHVzZUxpbmtzKSB7CisgICAgICBsaW5lID0gcHJldmlvdXMtPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmUgPSB0b1NvcnRbaV07CisgICAgfQorICAgIGxpbmUtPndyaXRlKGJ1ZmYsIDI1Niwgc3RhdHVzKTsKKyAgICBmcHJpbnRmKGZpbGUsICIlc1xuIiwgYnVmZik7CisgICAgaSsrOworICAgIHByZXZpb3VzID0gbGluZTsKKyAgfQorfQorCisKKworVW5pY29kZVN0cmluZyAKK1NvcnRlZExpbmVzOjp0b1N0cmluZ0Zyb21FbXB0eSgpIHsKKyAgVUJvb2wgdXNlTGlua3MgPSBGQUxTRTsKKyAgVUJvb2wgcHJldHR5ID0gRkFMU0U7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpbnQzMl90IGkgPSAwOworCisgIExpbmUgKmxpbmUgPSBOVUxMOworICBMaW5lICpwcmV2aW91cyA9IHRvU29ydFswXTsKKyAgaWYocHJldmlvdXMtPmlzUmVzZXQpIHsKKyAgICByZXN1bHQuYXBwZW5kKCIgJiAiKTsKKyAgICBpZihwcmV0dHkpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgICAgfQorICAgIHJlc3VsdC5hcHBlbmQocHJldmlvdXMtPm5hbWUsIHByZXZpb3VzLT5sZW4pOworICB9IGVsc2UgaWYoIXByZXZpb3VzLT5pc1JlbW92ZWQpIHsKKyAgICByZXN1bHQuYXBwZW5kKHByZXZpb3VzLT50b1N0cmluZyhwcmV0dHkpKTsKKyAgICBpZihwcmV0dHkpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgICAgfQorICB9CisgIGkgPSAxOworICB3aGlsZShpIDwgc2l6ZSB8fCBwcmV2aW91cy0+bmV4dCkgeworICAgIGlmKHVzZUxpbmtzKSB7CisgICAgICBsaW5lID0gcHJldmlvdXMtPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmUgPSB0b1NvcnRbaV07CisgICAgfQorICAgIGlmKGxpbmUtPmlzUmVzZXQpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiAmIik7CisgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPm5hbWUsIGxpbmUtPmxlbik7CisgICAgICBpZihwcmV0dHkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICAgICAjICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPnN0cmluZ1RvTmFtZShsaW5lLT5uYW1lLCBsaW5lLT5sZW4pKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYoIWxpbmUtPmlzUmVtb3ZlZCkgeworICAgICAgaWYoaSA+IDApIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT5zdHJlbmd0aFRvU3RyaW5nKGxpbmUtPnN0cmVuZ3RoRnJvbUVtcHR5LCBwcmV0dHkpKTsKKyAgICAgIH0KKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+dG9TdHJpbmcocHJldHR5KSk7CisgICAgICBpZihwcmV0dHkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgcHJldmlvdXMgPSBsaW5lOworICAgIGkrKzsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitVbmljb2RlU3RyaW5nIAorU29ydGVkTGluZXM6OnRvU3RyaW5nKFVCb29sIHVzZUxpbmtzKSAKK3sKKyAgcmV0dXJuIGFycmF5VG9TdHJpbmcodG9Tb3J0LCBzaXplLCBGQUxTRSwgdXNlTGlua3MsIEZBTFNFKTsKK30KKworCitVbmljb2RlU3RyaW5nIAorU29ydGVkTGluZXM6OnRvUHJldHR5U3RyaW5nKFVCb29sIHVzZUxpbmtzLCBVQm9vbCBwcmludFNvcnRLZXlzKSAKK3sKKyAgcmV0dXJuIGFycmF5VG9TdHJpbmcodG9Tb3J0LCBzaXplLCBUUlVFLCB1c2VMaW5rcywgcHJpbnRTb3J0S2V5cyk7Cit9CisKK1VuaWNvZGVTdHJpbmcgCitTb3J0ZWRMaW5lczo6dG9PdXRwdXQoY29uc3QgY2hhciAqZm9ybWF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgdXNlTGlua3MsIFVCb29sIGluaXRpYWxpemUsIFVCb29sIG1vcmVUb0NvbWUpIHsKKyAgaWYoc3RyY21wKGZvcm1hdCwgIkhUTUwiKSA9PSAwKSB7CisgICAgcmV0dXJuIHRvSFRNTChsb2NhbGUsIHBsYXRmb3JtLCByZWZlcmVuY2UsIHVzZUxpbmtzLCBpbml0aWFsaXplLCBtb3JlVG9Db21lKTsKKyAgfSBlbHNlIGlmKHN0cmNtcChmb3JtYXQsICJYTUwiKSA9PSAwKSB7CisgICAgcmV0dXJuIHRvWE1MKGxvY2FsZSwgcGxhdGZvcm0sIHJlZmVyZW5jZSwgdXNlTGlua3MsIGluaXRpYWxpemUsIG1vcmVUb0NvbWUpOworICB9IGVsc2UgeworICAgIHJldHVybiB0b0J1bmRsZShsb2NhbGUsIHBsYXRmb3JtLCByZWZlcmVuY2UsIHVzZUxpbmtzLCBpbml0aWFsaXplLCBtb3JlVG9Db21lKTsKKyAgfQorfQorCisKK1VuaWNvZGVTdHJpbmcgCitTb3J0ZWRMaW5lczo6dG9IVE1MKGNvbnN0IGNoYXIgKmxvY2FsZSwgCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSkKK3sKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIGludDMyX3QgaSA9IDA7CisgIGlmKGluaXRpYWxpemUpIHsKKyAgICByZXN1bHQuYXBwZW5kKCI8aHRtbD5cbjxoZWFkPlxuPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj5cbjwvaGVhZD5cbiIpOworICAgIHJlc3VsdC5hcHBlbmQoIiMgQ29sbGF0aW9uIGRhdGEgcmVzb3VyY2UgYnVuZGxlIGdlbmVyYXRlZCBmb3IgbG9jYWxlOiAiKTsKKyAgICByZXN1bHQuYXBwZW5kKGxvY2FsZSk7CisgICAgcmVzdWx0LmFwcGVuZCgiPGJyPlxuIyBGb3IgcGxhdGZvcm0gIik7CisgICAgcmVzdWx0LmFwcGVuZChwbGF0Zm9ybSk7CisgICAgcmVzdWx0LmFwcGVuZCgiIHJlZmVyZW5jZSBwbGF0Zm9ybSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHJlZmVyZW5jZSk7CisgICAgcmVzdWx0LmFwcGVuZCgiPGJyPjxicj5cblxuXG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQobG9jYWxlKTsKKyAgICBpZihwbGF0Zm9ybSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiXyIpOworICAgICAgcmVzdWx0LmFwcGVuZChwbGF0Zm9ybSk7CisgICAgfQorICAgIGlmKHJlZmVyZW5jZSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiX3ZzXyIpOworICAgICAgcmVzdWx0LmFwcGVuZChyZWZlcmVuY2UpOworICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKCImbmJzcDt7PGJyPlxuIik7CisKKyAgICByZXN1bHQuYXBwZW5kKCImbmJzcDsmbmJzcDtjb2xsYXRpb25zJm5ic3A7ezxicj5cbiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3N0YW5kYXJkJm5ic3A7ezxicj5cbiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NlcXVlbmNlJm5ic3A7ezxicj5cbiIpOworICB9CisKKyAgaWYoZnJlbmNoU2Vjb25kYXJ5KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiW2JhY2t3YXJkcyAyXTxicj5cbiIpOworICB9CisgIGlmKHVwcGVyRmlyc3QpIHsKKyAgICByZXN1bHQuYXBwZW5kKCJbY2FzZWZpcnN0IHVwcGVyXTxicj5cbiIpOworICB9CisKKyAgTGluZSAqbGluZSA9IHRvU29ydFswXTsKKworICBpID0gMDsKKyAgd2hpbGUoKGkgPCBzaXplICYmICF1c2VMaW5rcykgfHwgKGxpbmUtPm5leHQgJiYgdXNlTGlua3MpKSB7CisgICAgaWYobGluZS0+aXNSZXNldCB8fCAhbGluZS0+aXNSZW1vdmVkKSB7CisgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPnRvSFRNTFN0cmluZygpKTsKKyAgICB9CisgICAgaSsrOworICAgIGlmKHVzZUxpbmtzKSB7CisgICAgICBsaW5lID0gbGluZS0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9IHRvU29ydFtpXTsKKyAgICB9CisgIH0KKyAgaWYoIW1vcmVUb0NvbWUpIHsKKyAgICByZXN1bHQuYXBwZW5kKCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPlxuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTxicj5cbiZuYnNwOyZuYnNwO308YnI+XG59PGJyPlxuIik7CisKKyAgICByZXN1bHQuYXBwZW5kKCI8L2h0bWw+XG4iKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcgCitTb3J0ZWRMaW5lczo6dG9YTUwoY29uc3QgY2hhciAqbG9jYWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGxhdGZvcm0sIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgCisgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKQoreworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgaW50MzJfdCBpID0gMDsKKyAgaWYoaW5pdGlhbGl6ZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIjxodG1sPlxuPGhlYWQ+XG48bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPlxuPC9oZWFkPlxuIik7CisgICAgcmVzdWx0LmFwcGVuZCgiIyBDb2xsYXRpb24gZGF0YSByZXNvdXJjZSBidW5kbGUgZ2VuZXJhdGVkIGZvciBsb2NhbGU6ICIpOworICAgIHJlc3VsdC5hcHBlbmQobG9jYWxlKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8YnI+XG4jIEZvciBwbGF0Zm9ybSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgcmVmZXJlbmNlIHBsYXRmb3JtICIpOworICAgIHJlc3VsdC5hcHBlbmQocmVmZXJlbmNlKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8YnI+PGJyPlxuXG5cbiIpOworCisgICAgcmVzdWx0LmFwcGVuZChsb2NhbGUpOworICAgIGlmKHBsYXRmb3JtKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICB9CisgICAgaWYocmVmZXJlbmNlKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfdnNfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHJlZmVyZW5jZSk7CisgICAgfQorICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwO3s8YnI+XG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwO2NvbGxhdGlvbnMmbmJzcDt7PGJyPlxuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7c3RhbmRhcmQmbmJzcDt7PGJyPlxuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2VxdWVuY2UmbmJzcDt7PGJyPlxuIik7CisgIH0KKworICBpZihmcmVuY2hTZWNvbmRhcnkpIHsKKyAgICByZXN1bHQuYXBwZW5kKCJbYmFja3dhcmRzIDJdPGJyPlxuIik7CisgIH0KKyAgaWYodXBwZXJGaXJzdCkgeworICAgIHJlc3VsdC5hcHBlbmQoIltjYXNlZmlyc3QgdXBwZXJdPGJyPlxuIik7CisgIH0KKworICBMaW5lICpsaW5lID0gdG9Tb3J0WzBdOworCisgIGkgPSAwOworICB3aGlsZSgoaSA8IHNpemUgJiYgIXVzZUxpbmtzKSB8fCAobGluZS0+bmV4dCAmJiB1c2VMaW5rcykpIHsKKyAgICBpZihsaW5lLT5pc1Jlc2V0IHx8ICFsaW5lLT5pc1JlbW92ZWQpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+dG9IVE1MU3RyaW5nKCkpOworICAgIH0KKyAgICBpKys7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBsaW5lLT5uZXh0OworICAgIH0gZWxzZSB7CisgICAgICBsaW5lID0gdG9Tb3J0W2ldOworICAgIH0KKyAgfQorICBpZighbW9yZVRvQ29tZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308YnI+XG4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPlxuJm5ic3A7Jm5ic3A7fTxicj5cbn08YnI+XG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQoIjwvaHRtbD5cbiIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVW5pY29kZVN0cmluZyAKK1NvcnRlZExpbmVzOjp0b0J1bmRsZShjb25zdCBjaGFyICpsb2NhbGUsIAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgdXNlTGlua3MsIFVCb29sIGluaXRpYWxpemUsIFVCb29sIG1vcmVUb0NvbWUpCit7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpbnQzMl90IGkgPSAwOworCisgIGlmKGluaXRpYWxpemUpIHsKKyAgICByZXN1bHQuYXBwZW5kKCIvLyBDb2xsYXRpb24gZGF0YSByZXNvdXJjZSBidW5kbGUgZ2VuZXJhdGVkIGZvciBsb2NhbGU6ICIpOworICAgIHJlc3VsdC5hcHBlbmQobG9jYWxlKTsKKyAgICByZXN1bHQuYXBwZW5kKCJcbi8vIEZvciBwbGF0Zm9ybSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgcmVmZXJlbmNlIHBsYXRmb3JtICIpOworICAgIHJlc3VsdC5hcHBlbmQocmVmZXJlbmNlKTsKKyAgICByZXN1bHQuYXBwZW5kKCJcblxuXG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQobG9jYWxlKTsKKyAgICAvKgorICAgIGlmKHBsYXRmb3JtKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICB9CisgICAgaWYocmVmZXJlbmNlKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfdnNfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHJlZmVyZW5jZSk7CisgICAgfQorICAgICovCisgICAgcmVzdWx0LmFwcGVuZCgiIHtcbiIpOworCisgICAgcmVzdWx0LmFwcGVuZCgiICBjb2xsYXRpb25zIHtcbiAgIHN0YW5kYXJkIHtcbiAgICBTZXF1ZW5jZSB7XG4iKTsKKyAgfQorCisgIGlmKGZyZW5jaFNlY29uZGFyeSkgeworICAgIHJlc3VsdC5hcHBlbmQoIltiYWNrd2FyZHMgMl1cbiIpOworICB9CisgIGlmKHVwcGVyRmlyc3QpIHsKKyAgICByZXN1bHQuYXBwZW5kKCJbY2FzZWZpcnN0IHVwcGVyXVxuIik7CisgIH0KKworICBMaW5lICpsaW5lID0gdG9Tb3J0WzBdOworCisgIGkgPSAwOworICB3aGlsZSgoaSA8IHNpemUgJiYgIXVzZUxpbmtzKSB8fCAobGluZS0+bmV4dCAmJiB1c2VMaW5rcykpIHsKKyAgICBpZihsaW5lLT5pc1Jlc2V0IHx8ICFsaW5lLT5pc1JlbW92ZWQpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+dG9CdW5kbGVTdHJpbmcoKSk7CisgICAgfQorICAgIGkrKzsKKyAgICBpZih1c2VMaW5rcykgeworICAgICAgbGluZSA9IGxpbmUtPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmUgPSB0b1NvcnRbaV07CisgICAgfQorICB9CisKKyAgaWYoIW1vcmVUb0NvbWUpIHsKKyAgICByZXN1bHQuYXBwZW5kKCIgICAgfVxuICAgfVxuICB9XG59XG4iKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50MzJfdCAKK1NvcnRlZExpbmVzOjpnZXRTaXplKCkgY29uc3QgeworICByZXR1cm4gcmVwZXJ0b2lyZS5zaXplKCk7Cit9CisKK3ZvaWQKK1NvcnRlZExpbmVzOjpyZWR1Y2VEaWZmZXJlbmNlKFNvcnRlZExpbmVzJiByZWZlcmVuY2UpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGlmKHVwcGVyRmlyc3QpIHsKKyAgICBzd2FwQ2FzZSgpOworICB9CisgIC8vIGJvdGggc29ydGVkIGxpbmVzIHN0cnVjdHVyZXMgbmVlZCB0byBoYXZlIGVzdGFibGlzaGVkIGxpbmtzIGFuZCBzdHJlbmd0aHMKKyAgLy8gV2Ugd2FsayBkb3duIGJvdGggc3RydWN0dXJlcyBhbmQgbm90ZSBkaWZmZXJlbmNlcy4gVGhlc2UKKyAgLy8gZGlmZmVyZW5jZXMgd2lsbCBtb2RpZnkgdGhpcyBieSByZW1vdm5nIGVsZW1lbnRzLCBzZXR0aW5nIHJlc2V0cworICAvLyBldGMuLi4KKyAgLy8gd2Ugd2lsbCBwcmVmZXIgaW5zZXJ0aW9ucyBmcm9tIHRhaWxvcmluZyB0byByZWZlcmVuY2UsIHRoZW4gZGVsZXRpb25zCisgIC8vIHRoZXJlIGFyZSB0d28gdGFibGVzIHRoYXQga2VlcCBzZWVuIGVsZW1lbnRzLgorICBIYXNodGFibGUgKnNlZW5UaGlzID0gbmV3IEhhc2h0YWJsZSgpOworICBIYXNodGFibGUgKnNlZW5SZWZlcmVuY2UgPSBuZXcgSGFzaHRhYmxlKCk7CisKKworICBVQm9vbCBmb3VuZCA9IEZBTFNFOworICBVQm9vbCBmaW5pc2hlZCA9IEZBTFNFOworICBjb25zdCBpbnQzMl90IGxvb2tGb3J3YXJkID0gMjA7CisgIGludDMyX3QgdGFpbG9yaW5nTW92ZSA9IDA7CisgIC8vaW50MzJfdCByZWZlcmVuY2VTaXplID0gcmVmZXJlbmNlLmdldFNpemUoKTsKKyAgTGluZSAqcmVmTGluZSA9IHJlZmVyZW5jZS5nZXRGaXJzdCgpOworICBMaW5lICpyZWZMYXRlc3RFcXVhbCA9IHJlZkxpbmU7CisgIHJlZkxpbmUgPSByZWZMaW5lLT5uZXh0OworICBMaW5lICpteUxpbmUgPSBnZXRGaXJzdCgpOworICBMaW5lICpteUxhdGVzdEVxdWFsID0gbXlMaW5lOworICBteUxhdGVzdEVxdWFsLT5pc1JlbW92ZWQgPSBUUlVFOworICBteUxpbmUgPSBteUxpbmUtPm5leHQ7CisgIHdoaWxlKG15TGluZSAmJiByZWZMaW5lKSB7CisgICAgZm91bmQgPSBGQUxTRTsKKyAgICB3aGlsZShteUxpbmUgJiYgcmVmTGluZSAmJiBteUxpbmUtPmVxdWFscygqcmVmTGluZSkpIHsKKyAgICAgIG15TGF0ZXN0RXF1YWwgPSBteUxpbmU7CisgICAgICBteUxhdGVzdEVxdWFsLT5pc1JlbW92ZWQgPSBUUlVFOworICAgICAgbXlMaW5lID0gbXlMaW5lLT5uZXh0OworICAgICAgcmVmTGF0ZXN0RXF1YWwgPSByZWZMaW5lOworICAgICAgcmVmTGluZSA9IHJlZkxpbmUtPm5leHQ7CisgICAgICBpZihyZWZMaW5lID09IE5VTEwgJiYgbXlMaW5lID09IE5VTEwpIHsKKyAgICAgICAgZmluaXNoZWQgPSBUUlVFOworICAgICAgfQorICAgIH0KKyAgICBpZihteUxpbmUpIHsKKyAgICAgIG15TGluZS0+Y3VtdWxhdGl2ZVN0cmVuZ3RoID0gbXlMaW5lLT5zdHJlbmd0aDsgIAorICAgIH0KKyAgICBpZihyZWZMaW5lKSB7CisgICAgICByZWZMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPSByZWZMaW5lLT5zdHJlbmd0aDsKKyAgICB9CisgCisgICAgLy8gaGVyZSBpcyB0aGUgZGlmZmVyZW5jZQorICAgIHdoaWxlKCFmb3VuZCAmJiAhZmluaXNoZWQpIHsKKyAgICAgIHRhaWxvcmluZ01vdmUgPSAwOworICAgICAgaWYobXlMaW5lICYmIHJlZkxpbmUpIHsKKyAgICAgICAgaWYobXlMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPiByZWZMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGgpIHsgCisgICAgICAgICAgLy8gdGFpbG9yaW5nIHogPDw8IHgsIFVDQSB6IDwgeQorICAgICAgICAgIHdoaWxlKG15TGluZS0+Y3VtdWxhdGl2ZVN0cmVuZ3RoID4gcmVmTGluZS0+Y3VtdWxhdGl2ZVN0cmVuZ3RoKSB7CisgICAgICAgICAgICBteUxpbmUgPSBteUxpbmUtPm5leHQ7CisgICAgICAgICAgICBpZihteUxpbmUpIHsKKyAgICAgICAgICAgICAgdHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgobXlMaW5lLT5wcmV2aW91cywgbXlMaW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKG15TGluZS0+Y3VtdWxhdGl2ZVN0cmVuZ3RoIDwgcmVmTGluZS0+Y3VtdWxhdGl2ZVN0cmVuZ3RoKSB7ICAKKyAgICAgICAgICAvLyB0YWlsb3JpbmcgeiA8IHgsIFVDQSB6IDw8PCB5CisgICAgICAgICAgd2hpbGUobXlMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPCByZWZMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGgpIHsKKyAgICAgICAgICAgIHNlZW5SZWZlcmVuY2UtPnB1dChVbmljb2RlU3RyaW5nKHJlZkxpbmUtPm5hbWUsIHJlZkxpbmUtPmxlbiksIHJlZkxpbmUsIHN0YXR1cyk7CisgICAgICAgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgICAgICAgIGlmKHJlZkxpbmUpIHsKKyAgICAgICAgICAgICAgdHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgocmVmTGluZS0+cHJldmlvdXMsIHJlZkxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHRoaXMgaXMgdGhlIGludGVyZXN0aW5nIHBvaW50LiBOb3cgd2Ugc2VhcmNoIGZvciBjaGFyYWN0ZXIgbWF0Y2gKKyAgICAgICAgd2hpbGUobXlMaW5lICYmIHJlZkxpbmUgJiYgKCFteUxpbmUtPmVxdWFscygqcmVmTGluZSkgfHwgbXlMaW5lLT5zdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkKKyAgICAgICAgICAmJiB0YWlsb3JpbmdNb3ZlIDwgbG9va0ZvcndhcmQpIHsKKyAgICAgICAgICBpZihzZWVuVGhpcy0+Z2V0KFVuaWNvZGVTdHJpbmcocmVmTGluZS0+bmFtZSwgcmVmTGluZS0+bGVuKSkpIHsKKyAgICAgICAgICAgIC8vIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBzdHVmZiBmcm9tIHRoZSByZWZlcmVuY2UgdGhhdCBpcyBhbHJlYWR5IGFjY291bnRlZAorICAgICAgICAgICAgLy8gZm9yIGluIHRoZSB0YWlsb3JpbmcuCisgICAgICAgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgICAgICAgIGlmKHJlZkxpbmUpIHsKKyAgICAgICAgICAgICAgdHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgocmVmTGluZS0+cHJldmlvdXMsIHJlZkxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBteUxpbmUgPSBteUxpbmUtPm5leHQ7CisgICAgICAgICAgICBpZihteUxpbmUpIHsKKyAgICAgICAgICAgICAgdHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgobXlMaW5lLT5wcmV2aW91cywgbXlMaW5lKTsKKyAgICAgICAgICAgICAgaWYoIXNlZW5SZWZlcmVuY2UtPmdldChVbmljb2RlU3RyaW5nKG15TGluZS0+bmFtZSwgbXlMaW5lLT5sZW4pKSkgeworICAgICAgICAgICAgICAgIHRhaWxvcmluZ01vdmUrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYocmVmTGluZSA9PSBOVUxMKSB7IC8vIHJhbiBvdXQgb2YgcmVmZXJlbmNlCisgICAgICAgIC8vIHRoaXMgaXMgdGhlIHRhaWwgb2YgdGFpbG9yaW5nIC0gdGhlIGxhc3QgaW5zZXJ0aW9uCisgICAgICAgIG15TGluZSAgPSBOVUxMOworICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICB9IGVsc2UgaWYodGFpbG9yaW5nTW92ZSA9PSBsb29rRm9yd2FyZCB8fCBteUxpbmUgPT0gTlVMTCkgeyAvLyBydW4gb3ZlciB0cmVzaG9sZCBvciBvdXQgb2YgdGFpbG9yaW5nCisgICAgICAgIHRhaWxvcmluZ01vdmUgPSAwOworICAgICAgICAvLyB3ZSBkaWRuJ3QgZmluZCBpbnNlcnRpb24gYWZ0ZXIgYWxsCisgICAgICAgIC8vIHdlIHdpbGwgdHJ5IHN1YnN0aXR1dGlvbiBuZXh0CisgICAgICAgIC8vIHJlc2V0IHRoZSB0YWlsb3JpbmcgcG9pbnRlcgorICAgICAgICBteUxpbmUgPSBteUxhdGVzdEVxdWFsLT5uZXh0OworICAgICAgICAvLyBtb3ZlIHRoZSByZWZlcmVuY2UKKyAgICAgICAgcmVmTGluZSA9IHJlZkxpbmUtPm5leHQ7CisgICAgICAgIGlmKHJlZkxpbmUpIHsKKyAgICAgICAgICB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChyZWZMaW5lLT5wcmV2aW91cywgcmVmTGluZSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7IC8vIHdlIGZvdW5kIGFuIGluc2VydGlvbgorICAgICAgICB0YWlsb3JpbmdNb3ZlID0gMDsKKyAgICAgICAgaWYobXlMaW5lLT5zdHJlbmd0aCAhPSByZWZMaW5lLT5zdHJlbmd0aCkgeworICAgICAgICAgIHdoaWxlKG15TGluZSAmJiByZWZMaW5lICYmICpteUxpbmUgPT0gKnJlZkxpbmUgCisgICAgICAgICAgICAmJiAobXlMaW5lLT5zdHJlbmd0aCAhPSByZWZMaW5lLT5zdHJlbmd0aCAKKyAgICAgICAgICAgIHx8IG15TGluZS0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpKSB7CisgICAgICAgICAgICBteUxpbmUgPSBteUxpbmUtPm5leHQ7CisgICAgICAgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoKm15TGluZSAhPSAqcmVmTGluZSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKG15TGluZSAmJiByZWZMaW5lICYmIG15TGluZS0+cHJldmlvdXMtPnN0cmVuZ3RoIDwgbXlMaW5lLT5zdHJlbmd0aCkgeworICAgICAgICAgIG15TGluZSA9IG15TGluZS0+bmV4dDsKKyAgICAgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgICAgICBpZigqbXlMaW5lICE9ICpyZWZMaW5lKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgfQorICAgICAgaWYoZm91bmQpIHsKKyAgICAgICAgaWYobXlMYXRlc3RFcXVhbC0+bmV4dCAhPSBteUxpbmUgfHwgcmVmTGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgTGluZSAqbXlTdGFydCA9IE5VTEw7CisgICAgICAgICAgLy8gdGhpcyBpcyBhIHJlc2V0IGFuZCBhIHNlcXVlbmNlCisgICAgICAgICAgLy8gbXlMYXRlc3RFcXVhbCBwb2ludHMgYXQgdGhlIGxhc3QgcG9pbnQgdGhhdCB3YXMgdGhlIHNhbWUKKyAgICAgICAgICAvLyBUaGlzIHBvaW50IHdpbGwgYmUgYSByZXNldAorICAgICAgICAgIGlmKG15TGluZSAmJiByZWZMaW5lKSB7IC8vIGlmIHRoZXJlIGlzIGFueXRoaW5nIG1vcmUgdG8gZG8gLSBpdCBtaWdodCBiZSB3b3J0aCBzYXZpbmcgaXQKKyAgICAgICAgICAgIG15U3RhcnQgPSBteUxhdGVzdEVxdWFsOworICAgICAgICAgICAgd2hpbGUobXlTdGFydCAhPSBteUxpbmUpIHsKKyAgICAgICAgICAgICAgc2VlblRoaXMtPnB1dChVbmljb2RlU3RyaW5nKG15U3RhcnQtPm5hbWUsIG15U3RhcnQtPmxlbiksIG15U3RhcnQsIHN0YXR1cyk7CisgICAgICAgICAgICAgIG15U3RhcnQgPSBteVN0YXJ0LT5uZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAvLyBUcnkgdG8gd2VlZCBvdXQgc3R1ZmYgdGhhdCBpcyBub3QgYWZmZWN0ZWQsIGxpa2U6CisgICAgICAgICAgLy8gVGFpbG9yaW5nOgorICAgICAgICAgIC8vIDw8PFM8PFx1MDE3RjxcdTAxNjE8PDxcdTAxNjA8dAorICAgICAgICAgIC8vIFVDQToKKyAgICAgICAgICAvLyA8PDxTPDxcdTAxNjE8PDxcdTAxNjA8PFx1MDE3Rjx0CisgICAgICAgICAgLy8gUmVzdWx0OgorICAgICAgICAgIC8vICZTPDxcdTAxN0Y8XHUwMTYxPDw8XHUwMTYwCisgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNlcXVlbmNlIHRoYXQgc3BhbnMgZnJvbSBteUxhdGVzdEVxdWFsIHRvIG15TGluZSAodGhhdCBvbmUgY291bGQgYmUgTlVMTCwgCisgICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBnbyBkb3duIGZyb20gbXlMYXRlc3RFcXVhbC4gCisgICAgICAgICAgLy8gQmFzaWNhbGx5LCBmb3IgZXZlcnkgZWxlbWVudCwgd2Ugd2FudCB0byBzZWUgdGhlIHN0cm9uZ2VzdCBjdW11bGF0aXZlIGRpZmZlcmVuY2UgCisgICAgICAgICAgLy8gZnJvbSB0aGUgcmVzZXQgcG9pbnQuIElmIHRoZSBjdW11bGF0aXZlIGRpZmZlcmVuY2UgaXMgdGhlIHNhbWUgaW4gYm90aCB0aGUgcmVmZXJlbmNlIGFuZAorICAgICAgICAgIC8vIHRhaWxvcmluZywgdGhhdCBlbGVtZW50IGNvdWxkIGJlIHJlbW92ZWQuCisgICAgICAgICAgY2FsY3VsYXRlQ3VtdWxhdGl2ZVN0cmVuZ3RocyhteUxhdGVzdEVxdWFsLCBteUxpbmUpOworICAgICAgICAgIGNhbGN1bGF0ZUN1bXVsYXRpdmVTdHJlbmd0aHMocmVmTGF0ZXN0RXF1YWwsIHJlZkxpbmUpOworICAgICAgICAgIG15U3RhcnQgPSBteUxhdGVzdEVxdWFsOworICAgICAgICAgIGludDMyX3QgcmVtb3ZlZCA9IDA7CisgICAgICAgICAgaW50MzJfdCB0cmF2ZXJzZWQgPSAwOworICAgICAgICAgIHdoaWxlKG15U3RhcnQgJiYgbXlTdGFydCAhPSBteUxpbmUpIHsKKyAgICAgICAgICAgIExpbmUgKnJlZlN0YXJ0ID0gcmVmTGF0ZXN0RXF1YWw7CisgICAgICAgICAgICB3aGlsZShyZWZTdGFydCAmJiByZWZTdGFydCAhPSByZWZMaW5lKSB7CisgICAgICAgICAgICAgIGlmKCpteVN0YXJ0ID09ICpyZWZTdGFydCkgeworICAgICAgICAgICAgICAgIGlmKG15U3RhcnQtPmN1bXVsYXRpdmVTdHJlbmd0aCA9PSByZWZTdGFydC0+Y3VtdWxhdGl2ZVN0cmVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICBteVN0YXJ0LT5pc1JlbW92ZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgcmVtb3ZlZCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZWZTdGFydCA9IHJlZlN0YXJ0LT5uZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXlTdGFydCA9IG15U3RhcnQtPm5leHQ7CisgICAgICAgICAgICB0cmF2ZXJzZWQrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYocmVtb3ZlZCA8IHRyYXZlcnNlZCkgeworICAgICAgICAgICAgbXlMYXRlc3RFcXVhbC0+aXNSZXNldCA9IFRSVUU7CisgICAgICAgICAgICBteUxhdGVzdEVxdWFsLT5pc1JlbW92ZWQgPSBGQUxTRTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBteUxhdGVzdEVxdWFsID0gbXlMaW5lOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYodXBwZXJGaXJzdCkgeworICAgIC8vc3dhcENhc2UoKTsKKyAgfQorCisgIGRlbGV0ZSBzZWVuVGhpczsKKyAgZGVsZXRlIHNlZW5SZWZlcmVuY2U7CisKK30KKwordm9pZAorU29ydGVkTGluZXM6OnRyYW5zZmVyQ3VtdWxhdGl2ZVN0cmVuZ3RoKExpbmUgKnByZXZpb3VzLCBMaW5lICp0aGF0KSB7CisgIGlmKHRoYXQtPnN0cmVuZ3RoID4gcHJldmlvdXMtPmN1bXVsYXRpdmVTdHJlbmd0aCkgeworICAgIHRoYXQtPmN1bXVsYXRpdmVTdHJlbmd0aCA9IHByZXZpb3VzLT5jdW11bGF0aXZlU3RyZW5ndGg7CisgIH0gZWxzZSB7CisgICAgdGhhdC0+Y3VtdWxhdGl2ZVN0cmVuZ3RoID0gdGhhdC0+c3RyZW5ndGg7CisgIH0KK30KKwordm9pZAorU29ydGVkTGluZXM6OmNhbGN1bGF0ZUN1bXVsYXRpdmVTdHJlbmd0aHMoTGluZSAqc3RhcnQsIExpbmUgKmVuZCkgeworICAvLyBzdGFydCBpcyBhIHJlc2V0IC0gZW5kIG1heSBiZSBOVUxMCisgIHN0YXJ0ID0gc3RhcnQtPm5leHQ7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjdW11bGF0aXZlU3RyZW5ndGggPSBVQ09MX09GRjsKKyAgd2hpbGUoc3RhcnQgJiYgc3RhcnQgIT0gZW5kKSB7CisgICAgaWYoc3RhcnQtPnN0cmVuZ3RoIDwgY3VtdWxhdGl2ZVN0cmVuZ3RoKSB7CisgICAgICBjdW11bGF0aXZlU3RyZW5ndGggPSBzdGFydC0+c3RyZW5ndGg7CisgICAgfQorICAgIHN0YXJ0LT5jdW11bGF0aXZlU3RyZW5ndGggPSBjdW11bGF0aXZlU3RyZW5ndGg7CisgICAgc3RhcnQgPSBzdGFydC0+bmV4dDsKKyAgfQorfQorCisKK3ZvaWQgCitTb3J0ZWRMaW5lczo6Z2V0UmVwZXJ0b2lyZShVbmljb2RlU2V0ICZmaWxsSW4pIHsKKyAgZmlsbEluLmNsZWFyKCk7CisgIGZpbGxJbi5hZGRBbGwocmVwZXJ0b2lyZSk7Cit9CisKKwordm9pZAorU29ydGVkTGluZXM6OnJlbW92ZURlY29tcG9zaXRpb25zRnJvbVJlcGVydG9pcmUoKSB7CisgIFVuaWNvZGVTZXRJdGVyYXRvciByZXBlcnRvaXJlSXRlcihyZXBlcnRvaXJlKTsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIFVDaGFyIHN0cmluZ1syNTZdOworICBVQ2hhciBjb21wb3NlZFsyNTZdOworICBpbnQzMl90IGxlbiA9IDAsIGNvbXBMZW4gPSAwOworICBVbmljb2RlU3RyaW5nIGNvbXBTdHJpbmc7CisgIFVuaWNvZGVTZXQgdG9SZW1vdmU7CisKKyAgd2hpbGUocmVwZXJ0b2lyZUl0ZXIubmV4dCgpKSB7CisgICAgbGVuID0gMDsKKyAgICBpZihyZXBlcnRvaXJlSXRlci5pc1N0cmluZygpKSB7IC8vIHByb2Nlc3MgYSBzdHJpbmcKKyAgICAgIGxlbiA9IHJlcGVydG9pcmVJdGVyLmdldFN0cmluZygpLmxlbmd0aCgpOworICAgICAgdV9tZW1jcHkoc3RyaW5nLCByZXBlcnRvaXJlSXRlci5nZXRTdHJpbmcoKS5nZXRCdWZmZXIoKSwgbGVuKTsKKyAgICB9IGVsc2UgeyAvLyBwcm9jZXNzIGNvZGUgcG9pbnQKKyAgICAgIFVCb29sIGlzRXJyb3IgPSBGQUxTRTsKKyAgICAgIFUxNl9BUFBFTkQoc3RyaW5nLCBsZW4sIDI1LCByZXBlcnRvaXJlSXRlci5nZXRDb2RlcG9pbnQoKSwgaXNFcnJvcik7CisgICAgfQorICAgIHN0cmluZ1tsZW5dID0gMDsgLy8gemVybyB0ZXJtaW5hdGUsIGZvciBvdXIgZXZpbCB3YXlzCisgICAgY29tcExlbiA9IHVub3JtX25vcm1hbGl6ZShzdHJpbmcsIGxlbiwgVU5PUk1fTkZDLCAwLCBjb21wb3NlZCwgMjU2LCAmc3RhdHVzKTsKKyAgICBpZihjb21wTGVuICE9IGxlbiB8fCB1X3N0cmNtcChzdHJpbmcsIGNvbXBvc2VkKSAhPSAwKSB7CisgICAgICBjb21wU3RyaW5nLnNldFRvKGNvbXBvc2VkLCBjb21wTGVuKTsKKyAgICAgIGlmKHJlcGVydG9pcmUuY29udGFpbnMoY29tcFN0cmluZykpIHsKKyAgICAgICAgdG9SZW1vdmUuYWRkKFVuaWNvZGVTdHJpbmcoc3RyaW5nLCBsZW4pKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZGVidWctPmxvZygiXG5SZW1vdmluZ1xuIik7CisgIGRlYnVnLT5sb2codG9SZW1vdmUudG9QYXR0ZXJuKGNvbXBTdHJpbmcsIFRSVUUpLCBUUlVFKTsKKyAgcmVwZXJ0b2lyZS5yZW1vdmVBbGwodG9SZW1vdmUpOworfQorCisKK3ZvaWQKK1NvcnRlZExpbmVzOjpzd2FwQ2FzZSgpIAoreworICBpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICB0b1NvcnRbaV0tPnN3YXBDYXNlKCk7CisgIH0KK30KKwordm9pZAorU29ydGVkTGluZXM6OmNhbGN1bGF0ZVNvcnRLZXkoTGluZSAmbGluZSkgCit7CisgIGlmKCFzb3J0a2V5cykgeworICAgIHNvcnRrZXlzID0gbmV3IHVpbnQ4X3Rbc2l6ZSoxMDI0XTsKKyAgICBtZW1zZXQoc29ydGtleXMsIDAsIHNpemUqMTAyNCk7CisgIH0KKyAgbGluZS5zb3J0S2V5ID0gc29ydGtleXMrc29ydGtleU9mZnNldDsKKyAgc29ydGtleU9mZnNldCArPSBwcm9iZS5nZXRTb3J0S2V5KGxpbmUsIHNvcnRrZXlzK3NvcnRrZXlPZmZzZXQsIHNpemUqMjU2LXNvcnRrZXlPZmZzZXQpOworfQorCisKK3ZvaWQgCitTb3J0ZWRMaW5lczo6Y2FsY3VsYXRlU29ydEtleXMoKQoreworICBpZihzb3J0a2V5cykgeworICAgIGRlbGV0ZVtdIHNvcnRrZXlzOworICB9CisgIHNvcnRrZXlPZmZzZXQgPSAwOworICBzb3J0a2V5cyA9IG5ldyB1aW50OF90W3NpemUqMjU2XTsKKyAgbWVtc2V0KHNvcnRrZXlzLCAwLCBzaXplKjI1Nik7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGNhbGN1bGF0ZVNvcnRLZXkoKnRvU29ydFtpXSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL3NvcnRlZGxpbmVzLmggYi9jb2xwcm9iZS9zb3J0ZWRsaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzcwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9zb3J0ZWRsaW5lcy5oCkBAIC0wLDAgKzEsMTIwIEBACisjaWZuZGVmIENPTFBST0JFX1NPUlRFRExJTkVTX0gKKyNkZWZpbmUgQ09MUFJPQkVfU09SVEVETElORVNfSAorCisvLyBjb2xwcm9iZSBpbmNsdWRlcworI2luY2x1ZGUgImNvbHByb2JlLmgiCisjaW5jbHVkZSAibGluZS5oIgorI2luY2x1ZGUgInVwcmludGVyLmgiCisjaW5jbHVkZSAic3RyZW5ndGhwcm9iZS5oIgorCisKKy8vIElDVSBpbmNsdWRlcworI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c2V0aXRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNjcmlwdC5oIgorI2luY2x1ZGUgImhhc2guaCIKKworY2xhc3MgU29ydGVkTGluZXMgeworICBMaW5lIGVtcHR5OworICBMaW5lICpVQltVQ09MX09GRl07CisgIFVuaWNvZGVTZXQgaWdub3JhYmxlc1tVQ09MX09GRl07CisKKyAgTGluZSAqKnRvU29ydDsKKyAgaW50MzJfdCB0b1NvcnRDYXBhY2l0eTsKKyAgTGluZSAqbGluZXM7CisgIGludDMyX3Qgc2l6ZTsKKyAgaW50MzJfdCBjYXBhY2l0eTsKKworICBVbmljb2RlU2V0IHJlcGVydG9pcmU7CisgIFVuaWNvZGVTZXQgZXhjbHVkZUJvdW5kczsKKworICBTdHJlbmd0aFByb2JlIHByb2JlOworCisgIExpbmUgKmZpcnN0OworICBMaW5lICpsYXN0OworICBMaW5lICpjdXJyZW50OworICBTb3J0ZWRMaW5lcygpIHt9OworCisgIFVQcmludGVyICpsb2dnZXI7CisgIFVQcmludGVyICpkZWJ1ZzsKKworICBIYXNodGFibGUgKmNvbnRyYWN0aW9uc1RhYmxlOworICBIYXNodGFibGUgKmR1cGxpY2F0b3JzOyAvLyBlbGVtZW50cyB0aGF0IGR1cGxpY2F0ZSBwcmVjZWRpbmcgY2hhcmFjdGVycworICBpbnQzMl90IG1heEV4cGFuc2lvblByZWZpeFNpemU7CisKKyAgLy8gUHJvcGVydGllcyBvZiB0aGUgc29ydAorICBVQm9vbCB3b3JkU29ydDsKKyAgVUJvb2wgZnJlbmNoU2Vjb25kYXJ5OworICBVQm9vbCB1cHBlckZpcnN0OworCisgIHVpbnQ4X3QgKnNvcnRrZXlzOworICBpbnQzMl90IHNvcnRrZXlPZmZzZXQ7CitwdWJsaWM6CisgIFNvcnRlZExpbmVzKGNvbnN0IFVuaWNvZGVTZXQgJnNldCwgY29uc3QgVW5pY29kZVNldCAmZXhjbHVkZUJvdW5kcywgY29uc3QgU3RyZW5ndGhQcm9iZSAmcHJvYmUsIFVQcmludGVyICpsb2dnZXIsIFVQcmludGVyICpkZWJ1Zyk7CisgIFNvcnRlZExpbmVzKEZJTEUgKmZpbGUsIFVQcmludGVyICpsb2dnZXIsIFVQcmludGVyICpkZWJ1ZywgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgflNvcnRlZExpbmVzKCk7CisgIHZvaWQgYW5hbHlzZShVRXJyb3JDb2RlICZzdGF0dXMpOworCisgIHZvaWQgc29ydChVQm9vbCBzZXRTdHJlbmd0aHMgPSBUUlVFLCBVQm9vbCBsaW5rID0gRkFMU0UpOworICB2b2lkIHNvcnQoTGluZSAqKnNvcnRpbmdBcnJheSwgaW50MzJfdCBzaXplVG9Tb3J0LCBVQm9vbCBzZXRTdHJlbmd0aHMgPSBUUlVFLCBVQm9vbCBsaW5rID0gRkFMU0UpOworCisgIExpbmUgKmdldEZpcnN0KCk7CisgIExpbmUgKmdldExhc3QoKTsKKyAgdm9pZCBhZGQoTGluZSAqbGluZSwgVUJvb2wgbGlua0luID0gRkFMU0UpOworICB2b2lkIGluc2VydChMaW5lICpsaW5lLCBpbnQzMl90IGluZGV4KTsKKyAgTGluZSAqZ2V0TmV4dCgpOworICBMaW5lICpnZXRQcmV2aW91cygpOworICBMaW5lICpvcGVyYXRvcltdKGludDMyX3QgaW5kZXgpOworICBpbnQzMl90IGFkZENvbnRyYWN0aW9uc1RvUmVwZXJ0b2lyZShVRXJyb3JDb2RlICZzdGF0dXMpOworCisgIGludDMyX3QgZ2V0U2l6ZSgpIGNvbnN0OworCisgIGludDMyX3QgZGV0ZWN0RXhwYW5zaW9ucygpOworICAKKyAgVW5pY29kZVN0cmluZyB0b1N0cmluZyhVQm9vbCB1c2VMaW5rcyA9IEZBTFNFKTsKKyAgVW5pY29kZVN0cmluZyB0b1N0cmluZ0Zyb21FbXB0eSgpOworICBVbmljb2RlU3RyaW5nIHRvUHJldHR5U3RyaW5nKFVCb29sIHVzZUxpbmtzLCBVQm9vbCBwcmludFNvcnRLZXlzID0gRkFMU0UpOworICBVbmljb2RlU3RyaW5nIHRvT3V0cHV0KGNvbnN0IGNoYXIgKmZvcm1hdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSk7CisgIFVuaWNvZGVTdHJpbmcgdG9CdW5kbGUoY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSk7CisgIFVuaWNvZGVTdHJpbmcgdG9IVE1MKGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqcGxhdGZvcm0sIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgCisgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKTsKKyAgVW5pY29kZVN0cmluZyB0b1hNTChjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSk7CisgIFVuaWNvZGVTdHJpbmcgYXJyYXlUb1N0cmluZyhMaW5lKiogc29ydGVkTGluZXMsIGludDMyX3QgbGluZXNTaXplLCBVQm9vbCBwcmV0dHksIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBwcmludFNvcnRLZXlzKTsKKyAgdm9pZCBzZXRTb3J0aW5nQXJyYXkoTGluZSAqKnNvcnRpbmdBcnJheSwgTGluZSAqZWxlbWVudHMsIGludDMyX3Qgc2l6ZVRvU29ydCk7CisgIGludDMyX3Qgc2V0U29ydGluZ0FycmF5KExpbmUgKipzb3J0aW5nQXJyYXksIEhhc2h0YWJsZSAqdGFibGUpOworCisgIHZvaWQgcmVkdWNlRGlmZmVyZW5jZShTb3J0ZWRMaW5lcyYgcmVmZXJlbmNlKTsKKyAgdm9pZCBnZXRSZXBlcnRvaXJlKFVuaWNvZGVTZXQgJmZpbGxJbik7CisgIHZvaWQgcmVtb3ZlRGVjb21wb3NpdGlvbnNGcm9tUmVwZXJ0b2lyZSgpOworICB2b2lkIGdldEJvdW5kcyhVRXJyb3JDb2RlICZzdGF0dXMpOworICB2b2lkIGNsYXNzaWZ5UmVwZXJ0b2lyZSgpOworICB2b2lkIHRvRmlsZShGSUxFICpmaWxlLCBVQm9vbCB1c2VMaW5rcywgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgdm9pZCBzd2FwQ2FzZSgpOworICB2b2lkIGNhbGN1bGF0ZVNvcnRLZXlzKCk7CisgIHZvaWQgY2FsY3VsYXRlU29ydEtleShMaW5lICZsaW5lKTsKK3ByaXZhdGU6CisgIHZvaWQgaW5pdCgpOworICB2b2lkIGluaXQoVW5pY29kZVNldCAmcmVwLCBMaW5lICpsaW4pOworICBpbnQzMl90IGRldGVjdENvbnRyYWN0aW9ucyhMaW5lICoqZmlyc3RSZXAsIGludDMyX3QgZmlyc3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgKipzZWNvbmRSZXAsIGludDMyX3Qgc2Vjb25kU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICp0b0FkZFRvLCBpbnQzMl90ICZ0b0FkZFRvU2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAqbGVzc2VyVG9BZGRUbywgaW50MzJfdCAmbGVzc2VyVG9BZGRUb1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjYXBhY2l0eSwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKworICB2b2lkIGNhbGN1bGF0ZUN1bXVsYXRpdmVTdHJlbmd0aHMoTGluZSAqc3RhcnQsIExpbmUgKmVuZCk7CisgIHZvaWQgdHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgoTGluZSAqcHJldmlvdXMsIExpbmUgKnRoYXQpOworICB2b2lkIHVwZGF0ZUJvdW5kcyhVbmljb2RlU2V0ICZzZXQpOworICB2b2lkIGFkZEFsbChMaW5lKiB0b0FkZCwgaW50MzJfdCB0b0FkZFNpemUpOworICB2b2lkIHNldERpc3RhbmNlc0Zyb21FbXB0eShMaW5lKiBhcnJheSwgaW50MzJfdCBhcnJheVNpemUpOworICB2b2lkIG5vdGVDb250cmFjdGlvbihjb25zdCBjaGFyKiBtc2csIExpbmUgKnRvQWRkVG8sIGludDMyX3QgJnRvQWRkVG9TaXplLCBMaW5lICpsZWZ0LCBMaW5lICpyaWdodCwgaW50MzJfdCAmbm9Db250cywgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgaW50MzJfdCBnb29zZVVwKGludDMyX3QgcmVzZXRJbmRleCwgaW50MzJfdCBleHBhbnNpb25JbmRleCwgTGluZSAmZXhwTGluZSwgaW50MzJfdCAqZXhwSW5kZXhlcywgaW50MzJfdCAmZXhwSW5kZXhTaXplLCBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGgpOworICBVQm9vbCBnZXRFeHBhbnNpb25MaW5lKGNvbnN0IExpbmUgJmV4cGFuc2lvbiwgY29uc3QgTGluZSAmcHJldmlvdXMsIGNvbnN0IExpbmUgJmV4cCwgTGluZSAmZXhwYW5zaW9uTGluZSk7CisKKworfTsKKworI2VuZGlmICAvLyAjaWZuZGVmIENPTFBST0JFX1NPUlRFRExJTkVTX0gKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3N0cmVuZ3RocHJvYmUuY3BwIGIvY29scHJvYmUvc3RyZW5ndGhwcm9iZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhOTRiNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3N0cmVuZ3RocHJvYmUuY3BwCkBAIC0wLDAgKzEsNDAyIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlIGxpbmUuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA3LzA3LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworLy8KKy8vICAgY2xhc3MgTGluZQorLy8KKy8vICAgICAgRWFjaCBsaW5lIGZyb20gdGhlIHNvdXJjZSBmaWxlIChjb250YWluaW5nIGEgbmFtZSwgcHJlc3VtYWJseSkgZ2V0cworLy8gICAgICBvbmUgb2YgdGhlc2Ugc3RydWN0cy4KKy8vCisKKyNpbmNsdWRlICJzdHJlbmd0aHByb2JlLmgiCisKK1N0cmVuZ3RoUHJvYmU6OlN0cmVuZ3RoUHJvYmUoQ29tcGFyZUZuIGNvbXBhcmVyLCBHZXRTb3J0S2V5Rm4gZ2V0dGVyLCBVQ2hhciBTRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyIEIwLCBVQ2hhciBCMSwgVUNoYXIgQjIsIFVDaGFyIEIzKSA6CitTRShTRSksCitCMChCMCksIEIxKEIxKSwgQjIoQjIpLCBCMyhCMyksCit1dGlsRmlyc3RQKCZ1dGlsRmlyc3QpLCB1dGlsU2Vjb25kUCgmdXRpbFNlY29uZCksCitmcmVuY2hTZWNvbmRhcnkoRkFMU0UpLAorY29tcGFyZXIoY29tcGFyZXIpLCBza2dldHRlcihnZXR0ZXIpCit7Cit9CisKK2ludAorU3RyZW5ndGhQcm9iZTo6c2V0UHJvYmVDaGFycyhVQ2hhciBCMCwgVUNoYXIgQjEsIFVDaGFyIEIyLCBVQ2hhciBCMykKK3sKKyAgdGhpcy0+QjAgPSBCMDsKKyAgdGhpcy0+QjEgPSBCMTsKKyAgdGhpcy0+QjIgPSBCMjsKKyAgdGhpcy0+CitCMyA9IEIzOworICByZXR1cm4gY2hlY2tTYW5pdHkoKTsKK30KKworaW50CitTdHJlbmd0aFByb2JlOjpjaGVja1Nhbml0eSgpIAoreworICBpbnQgc2FuaXR5UmVzOworICB1dGlsRmlyc3Quc2V0VG8oQjApOworICB1dGlsU2Vjb25kLnNldFRvKEIzKTsKKyAgaWYoKHNhbml0eVJlcyA9IGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApKSA+PSAwKSB7CisgICAgcmV0dXJuIHNhbml0eVJlcyoxMCArIDM7CisgIH0KKyAgdXRpbFNlY29uZC5zZXRUbyhCMik7CisgIGlmKChzYW5pdHlSZXMgPSBjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSkgPj0gMCkgeworICAgIHJldHVybiBzYW5pdHlSZXMqMTAgKyAyOworICB9CisgIHV0aWxTZWNvbmQuc2V0VG8oQjEpOworICBpZigoc2FuaXR5UmVzID0gY29tcGFyZXIoJnV0aWxGaXJzdFAsICZ1dGlsU2Vjb25kUCkpID49IDApIHsKKyAgICByZXR1cm4gc2FuaXR5UmVzKjEwICsgMTsKKyAgfQorICB1dGlsRmlyc3Quc2V0VG8oQjMpOworICB1dGlsU2Vjb25kLnNldFRvKEIyKTsKKyAgaWYoKHNhbml0eVJlcyA9IGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApKSA+PSAwKSB7CisgICAgcmV0dXJuIHNhbml0eVJlcyoxMCArIDU7CisgIH0KKyAgdXRpbFNlY29uZC5zZXRUbyhCMSk7CisgIGlmKChzYW5pdHlSZXMgPSBjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSkgPj0gMCkgeworICAgIHJldHVybiBzYW5pdHlSZXMqMTAgKyA0OworICB9CisgIHV0aWxGaXJzdC5zZXRUbyhCMik7CisgIGlmKChzYW5pdHlSZXMgPSBjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSkgPj0gMCkgeworICAgIHJldHVybiBzYW5pdHlSZXMqMTAgKyA2OworICB9CisgIHV0aWxGaXJzdC5zZXRUbyhCMCk7CisgIGlmKGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKHV0aWxGaXJzdCkgPiBVQ09MX1BSSU1BUlkpIHsKKyAgICByZXR1cm4gMTAwMDsKKyAgfQorICB1dGlsRmlyc3Quc2V0VG8oQjEpOworICBpZihkaXN0YW5jZUZyb21FbXB0eVN0cmluZyh1dGlsRmlyc3QpID4gVUNPTF9QUklNQVJZKSB7CisgICAgcmV0dXJuIDEwMDE7CisgIH0KKyAgdXRpbEZpcnN0LnNldFRvKEIyKTsKKyAgaWYoZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcodXRpbEZpcnN0KSA+IFVDT0xfUFJJTUFSWSkgeworICAgIHJldHVybiAxMDAyOworICB9CisgIHV0aWxGaXJzdC5zZXRUbyhCMyk7CisgIGlmKGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKHV0aWxGaXJzdCkgPiBVQ09MX1BSSU1BUlkpIHsKKyAgICByZXR1cm4gMTAwMzsKKyAgfQorICByZXR1cm4gMDsKK30KKworVUJvb2wgCitTdHJlbmd0aFByb2JlOjpwcm9iZVByZWZpeChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKSB7CisgIHV0aWxGaXJzdC5uYW1lWzBdID0gZmlyc3Q7CisgIHV0aWxGaXJzdC5uYW1lWzFdID0gU0U7CisgIHVfc3RyY3B5KHV0aWxGaXJzdC5uYW1lKzIsIHgubmFtZSk7CisgIHV0aWxGaXJzdC5uYW1lW3gubGVuKzJdID0gMDsKKyAgdXRpbEZpcnN0LmxlbiA9IHgubGVuKzI7CisKKyAgdXRpbFNlY29uZC5uYW1lWzBdID0gc2Vjb25kOworICB1dGlsU2Vjb25kLm5hbWVbMV0gPSBTRTsKKyAgdV9zdHJjcHkodXRpbFNlY29uZC5uYW1lKzIsIHkubmFtZSk7CisgIHV0aWxTZWNvbmQubmFtZVt5LmxlbisyXSA9IDA7CisgIHV0aWxTZWNvbmQubGVuID0geS5sZW4rMjsKKworICBpZihjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSA8IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUJvb2wgCitTdHJlbmd0aFByb2JlOjpwcm9iZVN1ZmZpeChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKSB7CisgIHVfc3RyY3B5KHV0aWxGaXJzdC5uYW1lLCB4Lm5hbWUpOworICB1dGlsRmlyc3QubmFtZVt4Lmxlbl0gPSBTRTsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW4rMV0gPSBmaXJzdDsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW4rMl0gPSAwOworICB1dGlsRmlyc3QubGVuID0geC5sZW4gKyAyOworICB1X3N0cmNweSh1dGlsU2Vjb25kLm5hbWUsIHkubmFtZSk7CisgIHV0aWxTZWNvbmQubmFtZVt5Lmxlbl0gPSBTRTsKKyAgdXRpbFNlY29uZC5uYW1lW3kubGVuKzFdID0gc2Vjb25kOworICB1dGlsU2Vjb25kLm5hbWVbeS5sZW4rMl0gPSAwOworICB1dGlsU2Vjb25kLmxlbiA9IHkubGVuICsgMjsKKworICBpZihjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSA8IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUJvb2wgCitTdHJlbmd0aFByb2JlOjpwcm9iZVByZWZpeE5vU2VwKGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnksIFVDaGFyIGZpcnN0LCBVQ2hhciBzZWNvbmQpIHsKKyAgdXRpbEZpcnN0Lm5hbWVbMF0gPSBmaXJzdDsKKyAgdV9zdHJjcHkodXRpbEZpcnN0Lm5hbWUrMSwgeC5uYW1lKTsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW4rMV0gPSAwOworICB1dGlsRmlyc3QubGVuID0geC5sZW4gKyAxOworCisgIHV0aWxTZWNvbmQubmFtZVswXSA9IHNlY29uZDsKKyAgdV9zdHJjcHkodXRpbFNlY29uZC5uYW1lKzEsIHkubmFtZSk7CisgIHV0aWxTZWNvbmQubmFtZVt5LmxlbisxXSA9IDA7CisgIHV0aWxTZWNvbmQubGVuID0geS5sZW4gKyAxOworCisgIGlmKGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApIDwgMCkgeworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitVQm9vbCAKK1N0cmVuZ3RoUHJvYmU6OnByb2JlU3VmZml4Tm9TZXAoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSwgVUNoYXIgZmlyc3QsIFVDaGFyIHNlY29uZCkgeworICB1X3N0cmNweSh1dGlsRmlyc3QubmFtZSwgeC5uYW1lKTsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW5dID0gZmlyc3Q7CisgIHV0aWxGaXJzdC5uYW1lW3gubGVuKzFdID0gMDsKKyAgdXRpbEZpcnN0LmxlbiA9IHgubGVuICsgMTsKKyAgdV9zdHJjcHkodXRpbFNlY29uZC5uYW1lLCB5Lm5hbWUpOworICB1dGlsU2Vjb25kLm5hbWVbeS5sZW5dID0gc2Vjb25kOworICB1dGlsU2Vjb25kLm5hbWVbeS5sZW4rMV0gPSAwOworICB1dGlsU2Vjb25kLmxlbiA9IHkubGVuICsgMTsKKworICBpZihjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSA8IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUNvbEF0dHJpYnV0ZVZhbHVlIAorU3RyZW5ndGhQcm9iZTo6Z2V0U3RyZW5ndGgoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSkgeworICBjb25zdCBMaW5lICp4cCA9ICZ4OworICBjb25zdCBMaW5lICp5cCA9ICZ5OworCisgIExpbmUgZW1wdHk7CisgIExpbmUgKmVtcHR5UCA9ICZlbXB0eTsKKyAgaWYoY29tcGFyZXIoJmVtcHR5UCwgJnhwKSA9PSAwKSB7CisgICAgcmV0dXJuIGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKHkpOworICB9CisKKyAgaW50MzJfdCByZXN1bHQgPSBjb21wYXJlcigmeHAsICZ5cCk7CisKKyAgaWYocmVzdWx0ID09IDApIHsKKyAgICByZXR1cm4gVUNPTF9JREVOVElDQUw7CisgIH0gZWxzZSBpZihyZXN1bHQgPiAwKSB7CisgICAgcmV0dXJuIFVDT0xfT0ZGOyAvLyBiYWQgc2l0dWF0aW9uCisgIH0gZWxzZSB7IC8vIHdlIG5lZWQgdG8gcHJvYmUgc3RyZW5ndGgKKyAgICBpZihwcm9iZVN1ZmZpeCh4LCB5LCBCMSwgQjApKSB7CisgICAgLy9pZihwcm9iZVByZWZpeCh4LCB5LCBCMiwgQjApKSB7IC8vIHN3YW1wcyBzZWNvbmRhcnkgZGlmZmVyZW5jZQorICAgICAgcmV0dXJuIFVDT0xfUFJJTUFSWTsKKyAgICB9IGVsc2UgaWYocHJvYmVQcmVmaXgoeCwgeSwgQjMsIEIwKSkgeyAvLyBzd2FtcHMgdGVydGlhcnkgZGlmZmVyZW5jZQorICAgICAgcmV0dXJuIFVDT0xfU0VDT05EQVJZOworICAgIH0gZWxzZSBpZihwcm9iZVN1ZmZpeCh4LCB5LCBCMywgQjApKSB7IC8vIHN3YW1wZWQgYnkgdGVydGlhcnkgZGlmZmVyZW5jZQorICAgICAgcmV0dXJuIFVDT0xfVEVSVElBUlk7CisgICAgfSBlbHNlIGlmKCFwcm9iZVByZWZpeCh4LCB5LCBCMywgQjApKSB7CisgICAgICByZXR1cm4gVUNPTF9RVUFURVJOQVJZOworICAgIH0KKyAgICAvKgorICAgIC8vaWYocHJvYmVTdWZmaXgoeCwgeSwgQjEsIEIwKSkgeworICAgIGlmKHByb2JlUHJlZml4KHgsIHksIEIyLCBCMCkpIHsgLy8gc3dhbXBzIHNlY29uZGFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9QUklNQVJZOworICAgIH0gZWxzZSBpZihwcm9iZVByZWZpeCh4LCB5LCBCMywgQjApKSB7IC8vIHN3YW1wcyB0ZXJ0aWFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9TRUNPTkRBUlk7CisgICAgfSBlbHNlIGlmKHByb2JlU3VmZml4KHgsIHksIEIzLCBCMCkpIHsgLy8gc3dhbXBlZCBieSB0ZXJ0aWFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9URVJUSUFSWTsKKyAgICB9IGVsc2UgaWYoIXByb2JlUHJlZml4KHgsIHksIEIzLCBCMCkpIHsKKyAgICAgIHJldHVybiBVQ09MX1FVQVRFUk5BUlk7CisgICAgfQorICAgICovCisgIH0KKyAgcmV0dXJuIFVDT0xfT0ZGOyAvLyBiYWQKK30KKworVUNvbEF0dHJpYnV0ZVZhbHVlIAorU3RyZW5ndGhQcm9iZTo6Z2V0U3RyZW5ndGgoY29uc3QgVW5pY29kZVN0cmluZyAmc3gsIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN5KSB7CisgIExpbmUgeChzeCk7CisgIExpbmUgeShzeSk7CisgIHJldHVybiBnZXRTdHJlbmd0aCh4LCB5KTsKK30KKworaW50MzJfdCAKK1N0cmVuZ3RoUHJvYmU6OmNvbXBhcmUoY29uc3QgVW5pY29kZVN0cmluZyAmc3gsIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN5KSB7CisgIExpbmUgeChzeCk7CisgIExpbmUgeShzeSk7CisgIGNvbnN0IExpbmUgKnhwID0gJng7CisgIGNvbnN0IExpbmUgKnlwID0gJnk7CisgIHJldHVybiBjb21wYXJlcigmeHAsICZ5cCk7Cit9CisKK2ludDMyX3QgCitTdHJlbmd0aFByb2JlOjpjb21wYXJlKGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnkpIHsKKyAgY29uc3QgTGluZSAqeHAgPSAmeDsKKyAgY29uc3QgTGluZSAqeXAgPSAmeTsKKyAgcmV0dXJuIGNvbXBhcmVyKCZ4cCwgJnlwKTsKK30KKworVUNvbEF0dHJpYnV0ZVZhbHVlIAorU3RyZW5ndGhQcm9iZTo6ZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoY29uc3QgTGluZSAmeCkgeworICBpZih4Lm5hbWVbMF0gPT0gMHgzMEQpIHsKKyAgICBpbnQzMl90IHB1dEJyZWFrUG9pbnRIZXJlID0gMDsKKyAgfQorICBMaW5lIGVtcHR5OworICBMaW5lICplbXB0eVAgPSAmZW1wdHk7CisgIHVpbnQ4X3QgYnVmZlsyNTZdOworICBnZXRTb3J0S2V5KGVtcHR5Lm5hbWUsIGVtcHR5LmxlbiwgYnVmZiwgMjU2KTsKKyAgTGluZSBCMExpbmUoQjApOworICBMaW5lICpCMExpbmVQID0gJkIwTGluZTsKKyAgY29uc3QgTGluZSAqeHAgPSAmeDsKKyAgaW50MzJfdCByZXN1bHQgPSBjb21wYXJlcigmZW1wdHlQLCAmeHApOworICBpZihyZXN1bHQgPT0gMCkgeworICAgIHJldHVybiBVQ09MX0lERU5USUNBTDsKKyAgfSBlbHNlIGlmKHJlc3VsdCA+IDApIHsKKyAgICByZXR1cm4gVUNPTF9PRkY7CisgIH0KKyAgcmVzdWx0ID0gY29tcGFyZXIoJkIwTGluZVAsICZ4cCk7CisgIGlmKHJlc3VsdCA8PSAwKSB7CisgICAgcmV0dXJuIFVDT0xfUFJJTUFSWTsKKyAgfQorICBMaW5lIHNleGIwKFNFKTsKKyAgc2V4YjAuYXBwZW5kKHgubmFtZSwgeC5sZW4pOworICBzZXhiMC5hcHBlbmQoQjApOworCisgIExpbmUgc2ViMChTRSk7CisgIHNlYjAuYXBwZW5kKEIwKTsKKyAgdWludDhfdCBzZWIwS1syNTZdOworICB1aW50OF90IHNleGIwS1syNTZdOworICB1aW50OF90IHNlYjJLWzI1Nl07CisgIHVpbnQ4X3Qgc2ViM0tbMjU2XTsKKyAgbWVtc2V0KHNlYjBLLCAwLCAyNTYpOworICBtZW1zZXQoc2V4YjBLLCAwLCAyNTYpOworICBtZW1zZXQoc2ViMkssIDAsIDI1Nik7CisgIG1lbXNldChzZWIzSywgMCwgMjU2KTsKKworICBnZXRTb3J0S2V5KHNlYjAsIHNlYjBLLCAyNTYpOworICBnZXRTb3J0S2V5KHNleGIwLCBzZXhiMEssIDI1Nik7CisKKyAgaWYoY29tcGFyZShzZWIwLCBzZXhiMCkgPD0gMCkgeworICAgIExpbmUgc2ViMihTRSk7CisgICAgc2ViMi5hcHBlbmQoQjIpOworICAgIGdldFNvcnRLZXkoc2ViMiwgc2ViMkssIDI1Nik7CisgICAgcmVzdWx0ID0gY29tcGFyZShzZWIyLCBzZXhiMCk7CisgICAgaWYoKHJlc3VsdCA8PSAwICYmICFmcmVuY2hTZWNvbmRhcnkpIHx8IChyZXN1bHQgPj0gMCAmJiBmcmVuY2hTZWNvbmRhcnkpKSB7IC8vIHN3YW1wcyB0ZXJ0aWFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9TRUNPTkRBUlk7CisgICAgfQorICAgIExpbmUgc2ViMyhTRSk7CisgICAgc2ViMy5hcHBlbmQoQjMpOworICAgIGdldFNvcnRLZXkoc2ViMywgc2ViM0ssIDI1Nik7CisgICAgaWYoY29tcGFyZShzZWIzLCBzZXhiMCkgPCAwKSB7CisgICAgICByZXR1cm4gVUNPTF9URVJUSUFSWTsKKyAgICB9CisgICAgcmV0dXJuIFVDT0xfUVVBVEVSTkFSWTsKKyAgfSBlbHNlIHsKKyAgICAvLyBpZiB0aGlzIHdhcyBVQ0EsIHdlIHdvdWxkIGhhdmUgYSBwcmltYXJ5IGRpZmZlcmVuY2UuCisgICAgLy8gaG93ZXZlciwgdGhpcyBtaWdodCBub3QgYmUgc28sIHNpbmNlIG5vdCBldmVyeWJvZHkgCisgICAgLy8gbWFrZXMgd2VsbCBmb3JtZWQgQ0VzLgorICAgIC8vIGluIGNzX0NaIG9uIGxpbnV4LCBzcGFjZSBpcyB0ZXJ0aWFyeSBpZ25vcmFibGUsIGJ1dAorICAgIC8vIGl0cyBxdWF0ZXJuYXJ5IGxldmVsIHN0cmVuZ3RoIGlzIGxvd2VyIHRoYW4gcXVhZCAKKyAgICAvLyBzdHJlbmd0aHMgZm9yIG5vbi1pZ25vcmFibGVzLiBvaCB3ZWxsLCBtb3JlIHRlc3RpbmcKKyAgICAvLyByZXF1aXJlZAorICAgIC8vIEkgdGhpbmsgdGhhdCB3ZSBjYW4gb25seSBoYXZlIHF1YXRlcm5hcnkgZGlmZmVyZW5jZQorICAgIC8vIGhlcmUgKGluIGFkZGl0aW9uIHRvIHByaW1hcnkgZGlmZmVyZW5jZSkuCisgICAgLy9pZighcHJvYmVQcmVmaXgoeCwgZW1wdHksIEIzLCBCMCkpIHsKKyAgICAgIC8vcmV0dXJuIFVDT0xfUVVBVEVSTkFSWTsKKyAgICAvL30gZWxzZSB7CisgICAgICByZXR1cm4gVUNPTF9QUklNQVJZOworICAgIC8vfQorICB9Cit9CisKK1VDb2xBdHRyaWJ1dGVWYWx1ZSAKK1N0cmVuZ3RoUHJvYmU6OmRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKGNvbnN0IFVuaWNvZGVTdHJpbmcgJngpIHsKKyAgY29uc3QgTGluZSB4cCh4KTsKKyAgcmV0dXJuIGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKHhwKTsKK30KKworCitVQ29sQXR0cmlidXRlVmFsdWUgCitTdHJlbmd0aFByb2JlOjpnZXRQcmVmaXhlZFN0cmVuZ3RoKGNvbnN0IExpbmUgJnByZWZpeCwgY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSkgeworICBjb250cmFjdGlvblV0aWxGaXJzdC5zZXRUb0NvbmNhdCgmcHJlZml4LCAmeCk7CisgIGNvbnRyYWN0aW9uVXRpbFNlY29uZC5zZXRUb0NvbmNhdCgmcHJlZml4LCAmeSk7CisgIHJldHVybiBnZXRTdHJlbmd0aChjb250cmFjdGlvblV0aWxGaXJzdCwgY29udHJhY3Rpb25VdGlsU2Vjb25kKTsKK30KKworCitTdHJlbmd0aFByb2JlOjpTdHJlbmd0aFByb2JlKGNvbnN0IFN0cmVuZ3RoUHJvYmUgJnRoYXQpIHsKKyAgKnRoaXMgPSB0aGF0OworfQorCitTdHJlbmd0aFByb2JlICYKK1N0cmVuZ3RoUHJvYmU6Om9wZXJhdG9yPShjb25zdCBTdHJlbmd0aFByb2JlICZ0aGF0KSB7CisgIGlmKHRoaXMgIT0gJnRoYXQpIHsKKyAgICBCMCA9IHRoYXQuQjA7CisgICAgQjEgPSB0aGF0LkIxOworICAgIEIyID0gdGhhdC5CMjsKKyAgICBCMyA9IHRoYXQuQjM7CisgICAgU0UgPSB0aGF0LlNFOworICAgIGZyZW5jaFNlY29uZGFyeSA9IHRoYXQuZnJlbmNoU2Vjb25kYXJ5OworICAgIGNvbXBhcmVyID0gdGhhdC5jb21wYXJlcjsKKyAgICBza2dldHRlciA9IHRoYXQuc2tnZXR0ZXI7CisKKyAgICB1dGlsRmlyc3RQID0gJnV0aWxGaXJzdDsKKyAgICB1dGlsU2Vjb25kUCA9ICZ1dGlsU2Vjb25kOworICB9CisKKyAgcmV0dXJuICp0aGlzOworfQorCitVQm9vbAorU3RyZW5ndGhQcm9iZTo6aXNGcmVuY2hTZWNvbmRhcnkoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIHV0aWxGaXJzdC5zZXRUbyhCMCk7CisgIHV0aWxGaXJzdC5hcHBlbmQoU0UpOworICB1dGlsRmlyc3QuYXBwZW5kKEIyKTsKKyAgdXRpbFNlY29uZC5zZXRUbyhCMik7CisgIHV0aWxTZWNvbmQuYXBwZW5kKFNFKTsKKyAgdXRpbFNlY29uZC5hcHBlbmQoQjApOworCisgIGludDMyX3QgcmVzdWx0ID0gY29tcGFyZSh1dGlsRmlyc3QsIHV0aWxTZWNvbmQpOworCisgIGlmKHJlc3VsdCA8IDApIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0gZWxzZSBpZihyZXN1bHQgPiAwKSB7CisgICAgZnJlbmNoU2Vjb25kYXJ5ID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBzdGF0dXMgPSBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK1VCb29sCitTdHJlbmd0aFByb2JlOjppc1VwcGVyRmlyc3QoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIFVDaGFyIGkgPSAwOworICBpbnQzMl90IHJlc3VsdCA9IDA7CisgIGludDMyX3QgdXBwZXIgPSAwLCBsb3dlciA9IDAsIGVxdWFsID0gMDsKKyAgZm9yKGkgPSAweDQxOyBpIDwgMHg1QjsgaSsrKSB7CisgICAgdXRpbEZpcnN0LnNldFRvKGkpOworICAgIHV0aWxTZWNvbmQuc2V0VG8oaSsweDIwKTsKKyAgICByZXN1bHQgPSBjb21wYXJlKHV0aWxGaXJzdCwgdXRpbFNlY29uZCk7CisgICAgaWYocmVzdWx0IDwgMCkgeworICAgICAgdXBwZXIrKzsKKyAgICB9IGVsc2UgaWYocmVzdWx0ID4gMCkgeworICAgICAgbG93ZXIrKzsKKyAgICB9IGVsc2UgeworICAgICAgZXF1YWwrKzsKKyAgICB9CisgIH0KKyAgCisgIGlmKGxvd2VyID09IDAgJiYgZXF1YWwgPT0gMCkgeworICAgIHJldHVybiBUUlVFOworICB9CisgIGlmKHVwcGVyID09IDAgJiYgZXF1YWwgPT0gMCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBzdGF0dXMgPSBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgIHJldHVybiBGQUxTRTsKK30KKwpkaWZmIC0tZ2l0IGEvY29scHJvYmUvc3RyZW5ndGhwcm9iZS5oIGIvY29scHJvYmUvc3RyZW5ndGhwcm9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTI1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9zdHJlbmd0aHByb2JlLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSBsaW5lLmgKKyoKKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwNy8wNy8yMDAzICB3ZWl2ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8vCisvLyAgIGNsYXNzIExpbmUKKy8vCisvLyAgICAgIEVhY2ggbGluZSBmcm9tIHRoZSBzb3VyY2UgZmlsZSAoY29udGFpbmluZyBhIG5hbWUsIHByZXN1bWFibHkpIGdldHMKKy8vICAgICAgb25lIG9mIHRoZXNlIHN0cnVjdHMuCisvLworCisjaWZuZGVmIENPTFBST0JFX1NUUkVOR1RIUFJPQkVfSAorI2RlZmluZSBDT0xQUk9CRV9TVFJFTkdUSFBST0JFX0gKKworI2luY2x1ZGUgImNvbHByb2JlLmgiCisjaW5jbHVkZSAibGluZS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c2V0aXRlci5oIgorCitjbGFzcyBTdHJlbmd0aFByb2JlIHsKK3B1YmxpYzoKKyAgVUNoYXIgU0U7CisgIFVDaGFyIEIwOworICBVQ2hhciBCMTsKKyAgVUNoYXIgQjI7CisgIFVDaGFyIEIzOworcHJpdmF0ZToKKyAgTGluZSB1dGlsRmlyc3Q7CisgIExpbmUgdXRpbFNlY29uZDsKKyAgTGluZSAqdXRpbEZpcnN0UDsKKyAgTGluZSAqdXRpbFNlY29uZFA7CisgIExpbmUgY29udHJhY3Rpb25VdGlsRmlyc3Q7CisgIExpbmUgY29udHJhY3Rpb25VdGlsU2Vjb25kOworICBVQm9vbCBwcm9iZVByZWZpeChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKTsKKyAgVUJvb2wgcHJvYmVTdWZmaXgoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSwgVUNoYXIgZmlyc3QsIFVDaGFyIHNlY29uZCk7CisgIFVCb29sIHByb2JlUHJlZml4Tm9TZXAoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSwgVUNoYXIgZmlyc3QsIFVDaGFyIHNlY29uZCk7CisgIFVCb29sIHByb2JlU3VmZml4Tm9TZXAoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSwgVUNoYXIgZmlyc3QsIFVDaGFyIHNlY29uZCk7CisKKyAgVUJvb2wgZnJlbmNoU2Vjb25kYXJ5OworCitwdWJsaWM6CisgIENvbXBhcmVGbiBjb21wYXJlcjsKKyAgR2V0U29ydEtleUZuIHNrZ2V0dGVyOworICAKKyAgU3RyZW5ndGhQcm9iZSgpIHt9OworICBTdHJlbmd0aFByb2JlKENvbXBhcmVGbiBjb21wYXJlciwgR2V0U29ydEtleUZuIGdldHRlciwgVUNoYXIgU0UgPSAweDAwMzAsIFVDaGFyIEIwID0gMHgwMDYxLCBVQ2hhciBCMSA9IDB4MDA2MiwgVUNoYXIgQjIgPSAweDAwRTEsIFVDaGFyIEIzID0gMHgwMDQxKTsgLy8sIFVDaGFyIExCID0gMHgwMDM5LCBVQ2hhciBVQiA9IDB4ZmEyOSk7CisgIGludCBzZXRQcm9iZUNoYXJzKFVDaGFyIEIwLCBVQ2hhciBCMSwgVUNoYXIgQjIsIFVDaGFyIEIzKTsKKyAgaW50IGNoZWNrU2FuaXR5KCk7CisgIFN0cmVuZ3RoUHJvYmUoY29uc3QgU3RyZW5ndGhQcm9iZSAmdGhhdCk7CisgIFN0cmVuZ3RoUHJvYmUgJm9wZXJhdG9yPShjb25zdCBTdHJlbmd0aFByb2JlICZ0aGF0KTsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGdldFN0cmVuZ3RoKGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnkpOworICBVQ29sQXR0cmlidXRlVmFsdWUgZ2V0U3RyZW5ndGgoY29uc3QgVW5pY29kZVN0cmluZyAmeCwgY29uc3QgVW5pY29kZVN0cmluZyAmeSk7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBnZXRQcmVmaXhlZFN0cmVuZ3RoKGNvbnN0IExpbmUgJnByZWZpeCwgY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSk7CisgIGludDMyX3QgY29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nICZ4LCBjb25zdCBVbmljb2RlU3RyaW5nICZ5KTsKKyAgaW50MzJfdCBjb21wYXJlKGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnkpOworICBVQ29sQXR0cmlidXRlVmFsdWUgZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoY29uc3QgTGluZSAmeCk7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBkaXN0YW5jZUZyb21FbXB0eVN0cmluZyhjb25zdCBVbmljb2RlU3RyaW5nICZ4KTsKKyAgVUJvb2wgaXNGcmVuY2hTZWNvbmRhcnkoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgVUJvb2wgaXNVcHBlckZpcnN0KFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIGludCBnZXRTb3J0S2V5KGNvbnN0IExpbmUgJmwsIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwKSB7CisgICAgcmV0dXJuIHNrZ2V0dGVyKGwubmFtZSwgbC5sZW4sIGJ1ZmZlciwgYnVmZkNhcCk7CisgIH07CisKKyAgaW50IGdldFNvcnRLZXkoVUNoYXIgKnN0cmluZywgaW50MzJfdCBzTGVuLCB1aW50OF90ICpidWZmZXIsIGludDMyX3QgYnVmZkNhcCkgeworICAgIHJldHVybiBza2dldHRlcihzdHJpbmcsIHNMZW4sIGJ1ZmZlciwgYnVmZkNhcCk7CisgIH07CisgCit9OworCisKKyNlbmRpZiAvLyNpZm5kZWYgQ09MUFJPQkVfU1RSRU5HVEhQUk9CRV9ICisKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3RhYmxlU3RhcnRlci5wbCBiL2NvbHByb2JlL3RhYmxlU3RhcnRlci5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWI3ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvdGFibGVTdGFydGVyLnBsCkBAIC0wLDAgKzEsMTYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OworCitteSAkbG9jYWxlTWludXNBID0gYGNhdCAvaG9tZS93ZWl2L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL2xvY2FsZS50eHRgOworbXkgQGxvY2FsZXMgPSBzcGxpdCgvXG4vLCAkbG9jYWxlTWludXNBKTsKK215ICRsb2NhbGU7CitteSAkY29tbWFuZDsKKworZm9yZWFjaCAkbG9jYWxlIChAbG9jYWxlcykgeworICBpZigkbG9jYWxlID1+IC9fLyAmJiAhKCRsb2NhbGUgPX4gL14jLykpIHsKKyAgICAkY29tbWFuZCA9ICIvaG9tZS93ZWl2L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL2RvQ29tcGFyaXNvblRhYmxlLnBsICRsb2NhbGUiOworICAgIHByaW50ICIkY29tbWFuZFxuIjsKKyAgICBgJGNvbW1hbmRgOworICB9Cit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuY3BwIGIvY29scHJvYmUvdGFyZ2V0c2V0Z2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RjYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvdGFyZ2V0c2V0Z2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlICJ0YXJnZXRzZXRnZW5lcmF0b3IuaCIKKworVGFyZ2V0U2V0R2VuZXJhdG9yOjpUYXJnZXRTZXRHZW5lcmF0b3IoVW5pY29kZVNldCAmc3RhcnRpbmdTZXQsIENvbXBhcmVGbiBjb21wYXJlcikgOgorIGNvbXBhcmVyKGNvbXBhcmVyKSwKKyBzZXQoc3RhcnRpbmdTZXQpCit7CisgICBhZGRBbGwoc3RhcnRpbmdTZXQpOworfQpkaWZmIC0tZ2l0IGEvY29scHJvYmUvdGFyZ2V0c2V0Z2VuZXJhdG9yLmggYi9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg5NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvdGFyZ2V0c2V0Z2VuZXJhdG9yLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBUQVJHRVRTRVRHRU5FUkFUT1JfSAorI2RlZmluZSBUQVJHRVRTRVRHRU5FUkFUT1JfSAorCisjaW5jbHVkZSAiY29scHJvYmUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorCitjbGFzcyBUYXJnZXRTZXRHZW5lcmF0b3IgOiBwdWJsaWMgVW5pY29kZVNldCB7CitwdWJsaWM6CisgIFRhcmdldFNldEdlbmVyYXRvcihVbmljb2RlU2V0ICZzdGFydGluZ1NldCwgQ29tcGFyZUZuIGNvbXBhcmVyKTsKK3ByaXZhdGU6CisgIENvbXBhcmVGbiBjb21wYXJlcjsKKyAgVW5pY29kZVNldCBzZXQ7Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb2xwcm9iZS90ZW1wbGF0ZSBiL2NvbHByb2JlL3RlbXBsYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWFhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS90ZW1wbGF0ZQpAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+JGxvY2FsZTwvdGl0bGU+Cis8c3R5bGU+CisgICAgICAgICA8IS0tCisgICAgICAgICB0YWJsZSAgICAgICAgeyBib3JkZXItc3BhY2luZzogMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7IAorICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2sgfQordGQsIHRoICAgICAgIHsgd2lkdGg6IDEwJTsgYm9yZGVyLXNwYWNpbmc6IDA7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGNvbG9yOiBibGFjazsgCisgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9CistLT4KKyAgICAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiI+CisKKzxwPjxiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5Db2xsYXRpb246PC9mb250PiAkbG9jYWxlIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jZ2ktYmluL2ljdS9seC9lbi8/Xz0kbG9jYWxlIj5EZW1vPC9hPiwgCisKKzxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1L35jaGVja291dH4vbG9jYWxlL2FsbF9kaWZmX3htbC9jb21wYXJpc29uX2NoYXJ0cy5odG1sIj5Db3ZlciAKK1BhZ2U8L2E+LCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vY3ZzL2ljdS9+Y2hlY2tvdXR+L2xvY2FsZS9hbGxfZGlmZl94bWwvaW5kZXguaHRtbCI+SW5kZXg8L2E+PC9iPjwvcD4KKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0aCBiZ2NvbG9yPSIjQUQ5ODlEIj5DT01NT04gKDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1L35jaGVja291dH4vbG9jYWxlL2NvbW1vbi94bWwvJGxvY2FsZS54bWwiPnhtbDwvYT4pPC90aD4KKyAgICA8dGggYmdjb2xvcj0iIzExOTFGMSI+TElOVVggKDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1L35jaGVja291dH4vbG9jYWxlL2xpbnV4L3htbC8kbG9jYWxlLnhtbCI+eG1sPC9hPik8L3RoPgorICAgIDx0aCBiZ2NvbG9yPSIjOThGQjk4Ij5XSU5ET1dTICg8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vY3ZzL2ljdS9+Y2hlY2tvdXR+L2xvY2FsZS93aW5kb3dzL3htbC8kbG9jYWxlLnhtbCI+eG1sPC9hPik8L3RoPgorICA8L3RyPgorCisgIDx0cj4KKyAgICA8dGQgYmdjb2xvcj0iI0FEOTg5RCI+MS4wLWFscGhhPC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+MS4wPC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPjxzcGFuIHRpdGxlPSIwMDZFIHtMQVRJTiBTTUFMTCBMRVRURVIgTn0iPiZhbXA7bjwvc3Bhbj48YnI+CisgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSI+Jm5ic3A7Jm5ic3A7Jmx0OyZuYnNwO255PC9zcGFuPjxicj4KKworICAgICAgPHNwYW4gdGl0bGU9IjAwNkUgMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9IC8gMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PSZuYnNwO25ueSZuYnNwOy8mbmJzcDtueTwvc3Bhbj48YnI+CisgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDU5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIENBUElUQUwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Jmx0OyZsdDsmbmJzcDtuWTwvc3Bhbj48YnI+CisgICAgPC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisgICAgPHRkIGJnY29sb3I9IiNGRkZGMzMiPjEuMjwvdGQ+CisKKyAgICA8dGQgYmdjb2xvcj0iIzk4RkI5OCI+V2luZG93cyBYUDwvdGQ+CisgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKzwvYm9keT4KZGlmZiAtLWdpdCBhL2NvbHByb2JlL3VuaXF1ZUZpbGVzLnBsIGIvY29scHJvYmUvdW5pcXVlRmlsZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjdkYTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3VuaXF1ZUZpbGVzLnBsCkBAIC0wLDAgKzEsNDkgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OworCitteSAkZmlsZTsKK215ICRzZWNvbmRmaWxlOworbXkgJXNlY29uZGZpbGVsaXN0OworbXkgQHNhbWU7CitteSAlbGlzdDsKK215ICRzYW1lZmlsZTsKKworZm9yZWFjaCAkc2Vjb25kZmlsZSAoQEFSR1YpIHsKKyAgJHNlY29uZGZpbGVsaXN0eyRzZWNvbmRmaWxlfSA9ICIiOworfQorCitmb3JlYWNoICRmaWxlIChzb3J0IGtleXMoJXNlY29uZGZpbGVsaXN0KSkgeworICBpZihleGlzdHMgJHNlY29uZGZpbGVsaXN0eyRmaWxlfSkgeworICAgIGRlbGV0ZSAkc2Vjb25kZmlsZWxpc3R7JGZpbGV9OworICAgIGZvcmVhY2ggJHNlY29uZGZpbGUgKHNvcnQoa2V5cyAlc2Vjb25kZmlsZWxpc3QpKSB7CisgICAgICAjcHJpbnQgImRpZmZpbmc6ICRmaWxlIGFuZCAkc2Vjb25kZmlsZVxuIjsKKyAgICAgIGlmICghYGRpZmYgJGZpbGUgJHNlY29uZGZpbGVgKSB7CisgICAgICAgICNwcmludCAiJGZpbGUgYW5kICRzZWNvbmRmaWxlIGFyZSB0aGUgc2FtZVxuIjsKKyAgICAgICAgcHVzaCBAc2FtZSwgJHNlY29uZGZpbGU7CisgICAgICB9CisgICAgfQorIyAgICBpZiAoJCNzYW1lID4gLTEpIHsKKyAgICAgIHByaW50ICJBZGRpbmcgQHNhbWUgdG8gJGZpbGVcbiI7CisgICAgICAkbGlzdHskZmlsZX0gPSAgW0BzYW1lXSA7CisgICAgICBmb3JlYWNoICRzYW1lZmlsZSAoQHNhbWUpIHsKKyAgICAgICAgZGVsZXRlICRzZWNvbmRmaWxlbGlzdHskc2FtZWZpbGV9OworICAgICAgfQorICAgICAgZGVsZXRlIEBzYW1lWzAuLiQjc2FtZV07CisjICAgIH0KKyAgfQorfQorCisKK215ICRpID0gMDsKK215ICRqID0gMDsKKyBmb3JlYWNoICRmaWxlIChzb3J0KCBrZXlzICVsaXN0KSkgeworICAgI3ByaW50ICIkZmlsZSAtPiAiOyAjQHtsaXN0eyRmaWxlfX1cbiI7CisgICBwcmludCAiPCRmaWxlPiA8JGo+XG4iOworICAgZm9yZWFjaCAkaSAoIDAgLi4gJCN7ICRsaXN0eyRmaWxlfSB9ICkgeworICAgICAjcHJpbnQgIiRsaXN0eyRmaWxlfVskaV0gIjsKKyAgICAgcHJpbnQgIjwkbGlzdHskZmlsZX1bJGldPiA8JGo+XG4gIjsKKyAgIH0KKyAgICRqKys7CisgfQorCmRpZmYgLS1naXQgYS9jb2xwcm9iZS91cHJpbnRlci5jcHAgYi9jb2xwcm9iZS91cHJpbnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5YWI5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3VwcmludGVyLmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnRlci5jcHAKKyoKKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8xOC8yMDAzICB3ZWl2ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICJ1cHJpbnRlci5oIgorCitVUHJpbnRlcjo6VVByaW50ZXIoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICplbmNvZGluZywgVUJvb2wgdHJhbnNsaXRlcmF0ZU5vblByaW50YWJsZSkgeworICBfb24gPSBUUlVFOworICBvdXQgPSB1X2Zpbml0KGZpbGUsIGxvY2FsZSwgZW5jb2RpbmcpOworICBzdHJjcHkoX2xvY2FsZSwgbG9jYWxlKTsKKyAgaWYodHJhbnNsaXRlcmF0ZU5vblByaW50YWJsZSkgeworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIFVUcmFuc2xpdGVyYXRvciAqYW55SGV4ID0gdXRyYW5zX29wZW4oIlteXFx1MDAwZFxcdTAwMGFcXHUwMDA5XFx1MDAyMC1cXHUwMDdmXSBBbnktSGV4L0phdmEiLCBVVFJBTlNfRk9SV0FSRCwgTlVMTCwgMCwgTlVMTCwgJnN0YXR1cyk7CisgICAgdV9mc2V0dHJhbnNsaXRlcmF0b3Iob3V0LCBVX1dSSVRFLCBhbnlIZXgsICZzdGF0dXMpOworICB9Cit9OworCitVUHJpbnRlcjo6VVByaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICplbmNvZGluZywgVVRyYW5zbGl0ZXJhdG9yICp0cmFucywgVUJvb2wgdHJhbnNsaXRlcmF0ZU5vblByaW50YWJsZSkgeworICBfb24gPSBUUlVFOworICBvdXQgPSB1X2ZvcGVuKG5hbWUsICJ3YiIsIGxvY2FsZSwgZW5jb2RpbmcpOworICB1X2ZwdXRjKDB4RkVGRiwgb3V0KTsgLy8gZW1pdCBhIEJPTQorICBzdHJjcHkoX2xvY2FsZSwgbG9jYWxlKTsKKyAgaWYodHJhbnNsaXRlcmF0ZU5vblByaW50YWJsZSkgeworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGlmKHRyYW5zID09IE5VTEwpIHsKKyAgICAgIFVUcmFuc2xpdGVyYXRvciAqYW55SGV4ID0gdXRyYW5zX29wZW4oIlteXFx1MDAwZFxcdTAwMGFcXHUwMDA5XFx1MDAyMC1cXHUwMDdmXSBBbnktSGV4L0phdmEiLCBVVFJBTlNfRk9SV0FSRCwgTlVMTCwgMCwgTlVMTCwgJnN0YXR1cyk7CisgICAgICB1X2ZzZXR0cmFuc2xpdGVyYXRvcihvdXQsIFVfV1JJVEUsIGFueUhleCwgJnN0YXR1cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHVfZnNldHRyYW5zbGl0ZXJhdG9yKG91dCwgVV9XUklURSwgdHJhbnMsICZzdGF0dXMpOworICAgIH0KKyAgfQorfTsKKworVVByaW50ZXI6On5VUHJpbnRlcigpIHsKKyAgdV9mY2xvc2Uob3V0KTsKK30KKwordm9pZCAKK1VQcmludGVyOjpsb2coY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nLCBVQm9vbCBubCkgeworICBpZihfb24pIHsKKyAgICBsb2coKChVbmljb2RlU3RyaW5nKXN0cmluZykuZ2V0VGVybWluYXRlZEJ1ZmZlcigpLCBubCk7CisgIH0KK30KKwordm9pZCAKK1VQcmludGVyOjpsb2coY29uc3QgVUNoYXIgKnN0cmluZywgVUJvb2wgbmwpIHsKKyAgaWYoX29uKSB7CisgICAgdV9mcHJpbnRmKG91dCwgIiVTIiwgc3RyaW5nKTsKKyAgICBpZihubCkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIlxuIik7CisgICAgfQorICAgIHVfZmZsdXNoKG91dCk7CisgIH0KK30KKy8qCit2b2lkIAorVVByaW50ZXI6OmxvZyhjb25zdCBjaGFyICpzdHJpbmcsIFVCb29sIG5sKSB7CisgIGlmKF9vbikgeworICAgIHVfZnByaW50ZihvdXQsICIlcyIsIHN0cmluZyk7CisgICAgaWYobmwpIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJcbiIpOworICAgIH0KKyAgfQorfQorKi8KK3ZvaWQgCitVUHJpbnRlcjo6bG9nKGNvbnN0IExpbmUgKmxpbmUsIFVCb29sIG5sKSB7CisgIGlmKF9vbikgeworICAgIGxvZyhsaW5lLT5uYW1lKTsKKyAgICBpZihsaW5lLT5leHBMZW4pIHsKKyAgICAgIGxvZygiLyIpOworICAgICAgbG9nKGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgfQorICAgIGlmKG5sKSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiXG4iKTsKKyAgICAgIHVfZmZsdXNoKG91dCk7CisgICAgfQorICB9Cit9CisKK3ZvaWQgVVByaW50ZXI6OmxvZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICBVQ2hhciBidWZmZXJbNDAwMF07CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIC8qIHNwcmludGYgaXQganVzdCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgdmFsaWQgKi8KKyAgICB1X3ZzcHJpbnRmKGJ1ZmZlciwgX2xvY2FsZSwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICBpZiggX29uICkgeworICAgICAgICBsb2coYnVmZmVyKTsKKyAgICB9Cit9CisKK3ZvaWQKK1VQcmludGVyOjpvbih2b2lkKSB7CisgIF9vbiA9IFRSVUU7Cit9CisKK3ZvaWQKK1VQcmludGVyOjpvZmYodm9pZCkgeworICBfb24gPSBGQUxTRTsKK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL3VwcmludGVyLmggYi9jb2xwcm9iZS91cHJpbnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNDIxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS91cHJpbnRlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDAzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgdXByaW50ZXIuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDAzLzE4LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBDT0xQUk9CRV9VUFJJTlRFUl9ICisjZGVmaW5lIENPTFBST0JFX1VQUklOVEVSX0gKKworI2luY2x1ZGUgImxpbmUuaCIKKworI2luY2x1ZGUgInVuaWNvZGUvdXN0ZGlvLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKworCitjbGFzcyBVUHJpbnRlciB7CisgIFVGSUxFICpvdXQ7CisgIFVDaGFyIGJ1ZmZlclsyNTZdOworICBVQm9vbCBfb247CisgIGNoYXIgX2xvY2FsZVsyNTZdOworcHVibGljOgorICBVUHJpbnRlcihGSUxFICpmaWxlLCBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBVQm9vbCB0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlPVRSVUUpOworICBVUHJpbnRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBVVHJhbnNsaXRlcmF0b3IgKnRyYW5zLCBVQm9vbCB0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlKTsKKyAgflVQcmludGVyKCk7CisgIHZvaWQgbG9nKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0cmluZywgVUJvb2wgbmwgPSBGQUxTRSk7CisgIHZvaWQgbG9nKGNvbnN0IFVDaGFyICpzdHJpbmcsIFVCb29sIG5sID0gRkFMU0UpOworICAvL3ZvaWQgbG9nKGNvbnN0IGNoYXIgKnN0cmluZywgVUJvb2wgbmwgPSBGQUxTRSk7CisgIHZvaWQgbG9nKGNvbnN0IExpbmUgKmxpbmUsIFVCb29sIG5sID0gRkFMU0UpOworICB2b2lkIGxvZyhjb25zdCBjaGFyICpmbXQsIC4uLik7CisgIHZvaWQgb2ZmKHZvaWQpOworICB2b2lkIG9uKHZvaWQpOworICBVQm9vbCBpc09uKHZvaWQpIHsKKyAgICByZXR1cm4gX29uOworICB9OworfTsKKworCisKKyNlbmRpZiAvLyAjaWZuZGVmIENPTFBST0JFX1VQUklOVEVSX0gKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3dpbkdlbkNvbGxEYXRhLnBsIGIvY29scHJvYmUvd2luR2VuQ29sbERhdGEucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc3NDY0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3dpbkdlbkNvbGxEYXRhLnBsCkBAIC0wLDAgKzEsMzAgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OworCisjbXkgJGxvY2FsZU1pbnVzQSA9IGBsb2NhbGUgLWFgOworbXkgJGxvY2FsZU1pbnVzQSA9IGBjYXQgbG9jYWxlLnR4dGA7CisKK215IEBsb2NhbGVzID0gc3BsaXQoL1xyXG4vLCAkbG9jYWxlTWludXNBKTsKK215ICRsb2NhbGU7CitteSAkY29tbWFuZDsKKworI215ICRjb21tYW5kUGF0aCA9ICJ+L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlLyI7CitteSAkY29tbWFuZFBhdGggPSAiYzovZGV2LzBfaWN1L3NvdXJjZS9leHRyYS9jb2xwcm9iZS9yZWxlYXNlLyI7CisKKworbXkgJHBsYXRmb3JtID0gJEFSR1ZbMF07CisKK21rZGlyICRwbGF0Zm9ybS4ibG9ncyI7Citta2RpciAkcGxhdGZvcm07CisKK2ZvcmVhY2ggJGxvY2FsZSAoQGxvY2FsZXMpIHsKKyAgJF8gPSAkbG9jYWxlOworICBjaG9tcDsKKyAgaWYoIS9eXCMvKSB7ICMgJiYgL1xfLykgeworICAgICRjb21tYW5kID0gJGNvbW1hbmRQYXRoLiJjb2xwcm9iZSAtLXBsYXRmb3JtICRwbGF0Zm9ybSAtLXJlZiAkcGxhdGZvcm0gLS1vdXRwdXQgcmVzYiAkbG9jYWxlID4kcGxhdGZvcm0iLiJsb2dzLyRsb2NhbGUiLiJfbG9nLnR4dCAyPiYxIjsKKyAKKyAgICBwcmludCAiJGNvbW1hbmRcbiI7CisgICAgYCRjb21tYW5kYDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY3VycmVuY3kvLmNsYXNzcGF0aCBiL2N1cnJlbmN5Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkNzQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0ib3V0L2JpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL2N1cnJlbmN5Ly5wcm9qZWN0IGIvY3VycmVuY3kvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4MGFkMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+Y3VycmVuY3ktbnVtZXJpYzwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwMWMzNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNGcmkgSmFuIDIwIDAwOjA5OjUzIEVTVCAyMDEyDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgNCmRpZmYgLS1naXQgYS9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjN2U1OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDM0NyBAQAorI1RodSBKYW4gMTkgMTA6MjA6NDAgRVNUIDIwMTINCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS42DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS42DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbm5vdGF0aW9uPTANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zZWxlY3Rvcl9pbl9tZXRob2RfaW52b2NhdGlvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX3R5cGVfZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9zd2l0Y2g9ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2Jsb2NrX2NvbW1lbnRzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaGVhZGVyPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfbGluZV9jb21tZW50cz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcm9vdF90YWdzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD0xMjANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubmV3X2xpbmVzX2F0X2phdmFkb2NfYm91bmRhcmllcz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbj0yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5lbmFibGluZ190YWc9QGZvcm1hdHRlclw6b24NCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2Fubm90YXRpb25fZGVjbGFyYXRpb25faGVhZGVyPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX3R5cGVfaGVhZGVyPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYmxvY2s9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9sb2NhbF92YXJpYWJsZT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWVtYmVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhY2thZ2U9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3R5cGU9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2F0X2VuZF9vZl9maWxlX2lmX21pc3Npbmc9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luaXRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Nhc2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Zvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfZWxsaXBzaXM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2NvbnN0YW50PWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3N3aXRjaD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNrZXRzX2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuam9pbl9saW5lc19pbl9jb21tZW50cz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZW1wdHlfYXJyYXlfaW5pdGlhbGl6ZXJfb25fb25lX2xpbmU9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MTIwDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2xpbmVfY29tbWVudHNfb25fZmlyc3RfY29sdW1uPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5wdXRfZW1wdHlfc3RhdGVtZW50X29uX25ld19saW5lPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXNwYWNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX291dGVyX2V4cHJlc3Npb25zX3doZW5fbmVzdGVkPXRydWUNCmRpZmYgLS1naXQgYS9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZlZjQwCi0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDEwIEBACisjVGh1IEphbiAxOSAxMDoyMDozOSBFU1QgMjAxMg0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorZm9ybWF0dGVyX3Byb2ZpbGU9X0lDVTRKIFN0YW5kYXJkDQorZm9ybWF0dGVyX3NldHRpbmdzX3ZlcnNpb249MTINCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207DQorb3JnLmVjbGlwc2UuamR0LnVpLmphdmFkb2M9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQ0KK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQ0KK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImdldHRlcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGdldHRlciBtZXRob2QiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZ2V0dGVyY29tbWVudCIgbmFtZVw9ImdldHRlcmNvbW1lbnQiPi8qKlxyXG4gKiBAcmV0dXJuIHRoZSAke2JhcmVfZmllbGRfbmFtZX1cclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJzZXR0ZXJjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBzZXR0ZXIgbWV0aG9kIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLnNldHRlcmNvbW1lbnQiIG5hbWVcPSJzZXR0ZXJjb21tZW50Ij4vKipcclxuICogQHBhcmFtICR7cGFyYW19IHRoZSAke2JhcmVfZmllbGRfbmFtZX0gdG8gc2V0XHJcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iY29uc3RydWN0b3Jjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIGNvbnN0cnVjdG9ycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jb25zdHJ1Y3RvcmNvbW1lbnQiIG5hbWVcPSJjb25zdHJ1Y3RvcmNvbW1lbnQiPi8qKlxyXG4gKiAke3RhZ3N9XHJcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJmYWxzZSIgY29udGV4dFw9ImZpbGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIEphdmEgZmlsZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZmlsZWNvbW1lbnQiIG5hbWVcPSJmaWxlY29tbWVudCI+LypcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogQ29weXJpZ2h0IChDKSAke3llYXJ9LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICpcclxuICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJ0eXBlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgY3JlYXRlZCB0eXBlcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy50eXBlY29tbWVudCIgbmFtZVw9InR5cGVjb21tZW50Ij4vKipcclxuICogQGF1dGhvciAke3VzZXJ9XHJcbiAqXHJcbiAqICR7dGFnc31cclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJmaWVsZGNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGZpZWxkcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5maWVsZGNvbW1lbnQiIG5hbWVcPSJmaWVsZGNvbW1lbnQiPi8qKlxyXG4gKiBcclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJtZXRob2Rjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBub24tb3ZlcnJpZGluZyBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm1ldGhvZGNvbW1lbnQiIG5hbWVcPSJtZXRob2Rjb21tZW50Ij4vKipcclxuICogJHt0YWdzfVxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im92ZXJyaWRlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3Igb3ZlcnJpZGluZyBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm92ZXJyaWRlY29tbWVudCIgbmFtZVw9Im92ZXJyaWRlY29tbWVudCI+LyogKG5vbi1KYXZhZG9jKVxyXG4gKiAke3NlZV90b19vdmVycmlkZGVufVxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImRlbGVnYXRlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZGVsZWdhdGUgbWV0aG9kcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5kZWxlZ2F0ZWNvbW1lbnQiIG5hbWVcPSJkZWxlZ2F0ZWNvbW1lbnQiPi8qKlxyXG4gKiAke3RhZ3N9XHJcbiAqICR7c2VlX3RvX3RhcmdldH1cclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJuZXd0eXBlX2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJOZXdseSBjcmVhdGVkIGZpbGVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm5ld3R5cGUiIG5hbWVcPSJuZXd0eXBlIj4ke2ZpbGVjb21tZW50fVxyXG4ke3BhY2thZ2VfZGVjbGFyYXRpb259XHJcblxyXG4ke3R5cGVjb21tZW50fVxyXG4ke3R5cGVfZGVjbGFyYXRpb259PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjbGFzc2JvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGNsYXNzIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNsYXNzYm9keSIgbmFtZVw9ImNsYXNzYm9keSI+XHJcbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iaW50ZXJmYWNlYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgaW50ZXJmYWNlIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmludGVyZmFjZWJvZHkiIG5hbWVcPSJpbnRlcmZhY2Vib2R5Ij5cclxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJlbnVtYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgZW51bSB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5lbnVtYm9keSIgbmFtZVw9ImVudW1ib2R5Ij5cclxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJhbm5vdGF0aW9uYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgYW5ub3RhdGlvbiB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5hbm5vdGF0aW9uYm9keSIgbmFtZVw9ImFubm90YXRpb25ib2R5Ij5cclxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjYXRjaGJsb2NrX2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBjYXRjaCBibG9ja3MiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY2F0Y2hibG9jayIgbmFtZVw9ImNhdGNoYmxvY2siPi8vICR7dG9kb30gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2tcclxuJHtleGNlcHRpb25fdmFyfS5wcmludFN0YWNrVHJhY2UoKTs8L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im1ldGhvZGJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBtZXRob2Qgc3R1YnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubWV0aG9kYm9keSIgbmFtZVw9Im1ldGhvZGJvZHkiPi8vICR7dG9kb30gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWJcclxuJHtib2R5X3N0YXRlbWVudH08L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNvbnN0cnVjdG9yYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIGNvbnN0cnVjdG9yIHN0dWJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNvbnN0cnVjdG9yYm9keSIgbmFtZVw9ImNvbnN0cnVjdG9yYm9keSI+JHtib2R5X3N0YXRlbWVudH1cclxuLy8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJnZXR0ZXJib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgZ2V0dGVycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5nZXR0ZXJib2R5IiBuYW1lXD0iZ2V0dGVyYm9keSI+cmV0dXJuICR7ZmllbGR9OzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ic2V0dGVyYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIHNldHRlcnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuc2V0dGVyYm9keSIgbmFtZVw9InNldHRlcmJvZHkiPiR7ZmllbGR9IFw9ICR7cGFyYW19OzwvdGVtcGxhdGU+PC90ZW1wbGF0ZXM+DQpkaWZmIC0tZ2l0IGEvY3VycmVuY3kvYnVpbGQueG1sIGIvY3VycmVuY3kvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjE4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJyZW5jeS9idWlsZC54bWwKQEAgLTAsMCArMSw3NiBAQAorPCEtLQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8cHJvamVjdCBuYW1lPSJjdXJyZW5jeS1udW1lcmljIiBkZWZhdWx0PSJidWlsZCIgYmFzZWRpcj0iLiI+CisgICAgPHByb3BlcnR5IG5hbWU9Im91dC5kaXIiIHZhbHVlPSIke2Jhc2VkaXJ9L291dCIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0iJHtiYXNlZGlyfS9zcmMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3Nlcy5kaXIiIHZhbHVlPSIke291dC5kaXJ9L2JpbiIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXMuZGlyIiB2YWx1ZT0iJHtvdXQuZGlyfS9yZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0ieG1sLmRpciIgdmFsdWU9IiR7b3V0LmRpcn0veG1sIi8+CisKKyAgICA8cHJvcGVydHkgbmFtZT0iYmFzZS51cmwiIHZhbHVlPSJodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvZGFtL2Rvd25sb2Fkcy8iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iY3VycmVudC54bWwiIHZhbHVlPSJ0YWJsZV9hMS54bWwiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iaGlzdG9yaWMueG1sIiB2YWx1ZT0idGFibGVfYTMueG1sIi8+CisKKzx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNoZWNrLCByZXNvdXJjZSIgZGVzY3JpcHRpb249IlZlcmlmeSBJQ1UncyBsb2NhbCBkYXRhIGFuZCBnZW5lcmF0ZSBJU08gNDIxNyBhbHBoYS1udW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHJlc291cmNlIi8+CisKKzx0YXJnZXQgbmFtZT0iY2xhc3NlcyIgZGVzY3JpcHRpb249IkJ1aWxkIHRoZSBKYXZhIHRvb2wiPgorICAgIDxta2RpciBkaXI9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CisgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgZGVzdGRpcj0iJHtjbGFzc2VzLmRpcn0iCisgICAgICAgICAgICB0YXJnZXQ9IjEuNiIgZW5jb2Rpbmc9IlVURi04IiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiLz4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9jaGVja0xvY2FsWG1sIj4KKyAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJpc0xvY2FsWG1sIj4KKyAgICAgICAgPGFuZD4KKyAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtiYXNlZGlyfS8ke2N1cnJlbnQueG1sfSIvPgorICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Jhc2VkaXJ9LyR7aGlzdG9yaWMueG1sfSIvPgorICAgICAgICA8L2FuZD4KKyAgICA8L2NvbmRpdGlvbj4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9sb2NhbFhtbCIgZGVwZW5kcz0iX2NoZWNrTG9jYWxYbWwiIGlmPSJpc0xvY2FsWG1sIj4KKyAgICA8ZWNobyBtZXNzYWdlPSJVc2luZyBsb2NhbCBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyIvPgorICAgIDxjb3B5IGZpbGU9IiR7Y3VycmVudC54bWx9IiB0b2Rpcj0iJHt4bWwuZGlyfSIvPgorICAgIDxjb3B5IGZpbGU9IiR7aGlzdG9yaWMueG1sfSIgdG9kaXI9IiR7eG1sLmRpcn0iLz4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9kb3dubG9hZFhtbCIgdW5sZXNzPSJpc0xvY2FsWG1sIj4KKyAgICA8ZWNobyBtZXNzYWdlPSJEb3dubG9hZGluZyBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyIvPgorICAgIDxta2RpciBkaXI9IiR7eG1sLmRpcn0iLz4KKyAgICA8Z2V0IHNyYz0iJHtiYXNlLnVybH0ke2N1cnJlbnQueG1sfSIgZGVzdD0iJHt4bWwuZGlyfSIvPgorICAgIDxnZXQgc3JjPSIke2Jhc2UudXJsfSR7aGlzdG9yaWMueG1sfSIgZGVzdD0iJHt4bWwuZGlyfSIvPgorPC90YXJnZXQ+CisKKzx0YXJnZXQgbmFtZT0ieG1sRGF0YSIgZGVwZW5kcz0iX2xvY2FsWG1sLCBfZG93bmxvYWRYbWwiIGRlc2NyaXB0aW9uPSJQcmVwYXJlIG5lY2Vzc2FyeSBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyI+Cis8L3RhcmdldD4KKworPHRhcmdldCBuYW1lPSJjaGVjayIgZGVwZW5kcz0iY2xhc3NlcywgeG1sRGF0YSIgZGVzY3JpcHRpb249IlZlcmlmeSBpZiBJQ1UncyBsb2NhbCBtYXBwaW5nIGRhdGEgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIFhNTCBkYXRhIj4KKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk1haW4iCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7Y2xhc3Nlcy5kaXJ9IgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICA8YXJnIHZhbHVlPSJjaGVjayIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke3htbC5kaXJ9LyR7Y3VycmVudC54bWx9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7eG1sLmRpcn0vJHtoaXN0b3JpYy54bWx9Ii8+CisgICAgPC9qYXZhPgorPC90YXJnZXQ+CisKKzx0YXJnZXQgbmFtZT0icmVzb3VyY2UiIGRlcGVuZHM9ImNsYXNzZXMiIGRlc2NyaXB0aW9uPSJCdWlsZCBJU08gNDIxNyBhbHBoYS1udW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHJlc291cmNlIj4KKyAgICA8bWtkaXIgZGlyPSIke3Jlcy5kaXJ9Ii8+CisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeS5NYWluIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgPGFyZyB2YWx1ZT0iYnVpbGQiLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtyZXMuZGlyfSIvPgorICAgIDwvamF2YT4KKyAgICA8ZWNobyBtZXNzYWdlPSJJU08gNDIxNyBudW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBpbiAke3Jlcy5kaXJ9Ii8+Cis8L3RhcmdldD4KKworPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkRlbGV0ZSBidWlsZCBvdXRwdXRzIj4KKyAgICA8ZGVsZXRlIGRpcj0iJHtvdXQuZGlyfSIvPgorPC90YXJnZXQ+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jdXJyZW5jeS9yZWFkbWUudHh0IGIvY3VycmVuY3kvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzU1NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvcmVhZG1lLnR4dApAQCAtMCwwICsxLDExMiBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitbT3ZlcnZpZXddCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgdG9vbCB1c2VkIGZvciBtYWludGFpbmluZyBJQ1UncyBJU08gNDIxNyBjdXJyZW5jeQorY29kZSBtYXBwaW5nIGRhdGEuIElDVSB1c2VzIGEgcmVzb3VyY2UgZ2VuZXJhdGVkIGJ5IHRoaXMgdG9vbCBmb3IgbWFwcGluZworSVNPIDQyMTcgY3VycmVuY3kgYWxwaGEgY29kZXMgdG8gbnVtZXJpYyBjb2Rlcy4KKworCitbRmlsZXNdCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kKKworTWFpbi5qYXZhIC0gVGhlIHRvb2wncyBlbnRyeSBwb2ludAorTnVtZXJpY0NvZGVEYXRhLmphdmEgLSBUaGUgbWFwcGluZyBkYXRhIHVzZWQgYnkgSUNVCitDdXJyZW5jeURhdGFQYXJzZXIuamF2YSAtIElTTyA0MjE3IFhNTCBkYXRhIHBhcnNlcgorQ3VycmVuY3lEYXRhRW50cnkuamF2YSAtIElTTyA0MjE3IFhNTCBkYXRhIGVudHJ5CisKKworW0RldGFpbHNdCisKK2NvbS5pYm0uaWN1LmRldi50b29sLk51bWVyaWNDb2RlRGF0YSBoYXMgU3RyaW5nW11bXSBDT0RFX01BUF9EQVRBLgorVGhpcyBhcnJheSByZXByZXNlbnRzIG1hcHBpbmdzIGJldHdlZW4gSVNPIDQyMTcgYWxwaGEgY29kZXMgYW5kCitudW1lcmljIGNvZGVzLiBJQ1UncyByZXNvdXJjZSBidW5kbGUgY3VycmVuY3lOdW1lcmljQ29kZXMgaXMgZ2VuZXJhdGVkCitmcm9tIHRoZSB0YWJsZS4KKworSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5IC0gU0lYIEludGVyYmFuayBDbGVhcmluZyBkaXN0cmlidXRlcworSVNPIDQyMTcgY29kZSBkYXRhIGluIFhNTCBmb3JtYXQuIFRoZXNlIGZpbGVzIGFyZSBmb3VuZCBpbgoraHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2lzb19pbmRleC9pc29fdGFibGVzLmh0bS4gVGhlcmUgYXJlIHR3bworZmlsZXMgdGhhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLgorCisgLSBodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvZGxfaXNvX3RhYmxlX2ExLnhtbAorIC0gaHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2RsX2lzb190YWJsZXNfYTMueG1sCisKK1RhYmxlIEEuMSBjb250YWlucyBjdXJyZW50IGN1cnJlbmNpZXMgYW5kIGZ1bmRzIGFuZCBUYWJsZSBBLjMgY29udGFpbnMKK2hpc3RvcmljIGRlbm9taW5hdGlvbnMuCisKK1RoZSB0b29sIHN1cHBvcnRzIDIgY29tbWFuZHMgLSBjaGVjayAvIHJlc291cmNlLgorCisxKSBjaGVjaworCitUaGlzIGNvbW1hbmQgY29tcGFyZXMgdGhlIGhhcmRjb2RlZCBtYXBwaW5nIGRhdGEgaW4gTnVtZXJpY0NvZGVEYXRhLmphdmEKK3dpdGggdGhlIElTTyA0MjE3IFhNTCBkYXRhIGZpbGVzIHNpZGUgYnkgc2lkZSBhbmQgY2hlY2sgZGlmZmVyZW5jZXMuCisKKzIpIHJlc291cmNlCisKK1RoaXMgY29tbWFuZCB3cml0ZXMgb3V0IHRoZSBoYXJkY29kZWQgbWFwcGluZyBkYXRhIGluIE51bWVyaWNDb2RlRGF0YS5qYXZhCitpbiBJQ1UgcmVzb3VyY2UgYnVuZGxlIHNvdXJjZSBmb3JtYXQgLSBjdXJyZW5jeU51bWVyaWNDb2Rlcy50eHQuCisKKworW1JlbGVhc2UgVGFza3NdCisKK0ZvciBlYWNoIElDVSByZWxlYXNlLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIG1hcHBpbmcgZGF0YSBpcyB1cCB0byBkYXRlLgorCitQcmVyZXF1aXNpdGVzOiBKYXZhIDYrLCBhbnQKKworRmlyc3QsIHJ1biB0aGUgYW50IHRhcmdldCAiY2hlY2siLiBUaGlzIGFudCB0YXJnZXQgZG93bmxvYWQgWE1MIGZpbGVzIGZyb20KK3RoZSBTSVggSW50ZXJiYW5rIENsZWFyaW5nIHNpdGUgYW5kIGludm9rZSB0aGUgdG9vbCBjb21tYW5kICJjaGVjayIuCisKK1doZW4gdGhlIHRhcmdldCBzdWNjZXNzZnVsbHkgZmluaXNoZWQsIHlvdSBzaG91bGQgc2VlIHRoZSBsb2cgbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0M6XGRldnRsc1x0cnVua1xjdXJyZW5jeT5hbnQgY2hlY2sKK0J1aWxkZmlsZTogQzpcZGV2dGxzXHRydW5rXGN1cnJlbmN5XGJ1aWxkLnhtbAorCitjbGFzc2VzOgorCitfY2hlY2tMb2NhbFhtbDoKKworX2xvY2FsWG1sOgorCitfZG93bmxvYWRYbWw6CisgICAgIFtlY2hvXSBEb3dubG9hZGluZyBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcworICAgICAgW2dldF0gR2V0dGluZzogaHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2RsX2lzb190YWJsZV9hMS54bWwKKyAgICAgIFtnZXRdIFRvOiBDOlxkZXZ0bHNcdHJ1bmtcY3VycmVuY3lcb3V0XHhtbFxkbF9pc29fdGFibGVfYTEueG1sCisgICAgICBbZ2V0XSBHZXR0aW5nOiBodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvZGxfaXNvX3RhYmxlc19hMy54bWwKKyAgICAgIFtnZXRdIFRvOiBDOlxkZXZ0bHNcdHJ1bmtcY3VycmVuY3lcb3V0XHhtbFxkbF9pc29fdGFibGVzX2EzLnhtbAorCit4bWxEYXRhOgorCitjaGVjazoKKyAgICAgW2phdmFdIFtPS10gSUNVIGRhdGEgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIHJlZmVyZW5jZSBkYXRhCisKK0JVSUxEIFNVQ0NFU1NGVUwKK1RvdGFsIHRpbWU6IDIgc2Vjb25kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gdGhpcyBjYXNlLCBvdXIgZGF0YSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgbGF0ZXN0IFhNTCBkYXRhIGFuZCB5b3UncmUgZG9uZS4KKworCitJZiB0aGUgZGF0YSBpcyBvdXQgb2Ygc3luYywgeW91IHNob3VsZCBzZWUgbWVzc2FnZSBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2hlY2s6CisgICAgIFtqYXZhXSBNaXNzaW5nIGFscGhhIGNvZGUgaW4gSUNVIG1hcCBbWldSXQorICAgICBbamF2YV0gQ29kZXMgbm90IGZvdW5kIGluIHRoZSByZWZlcmVuY2UgZGF0YTogWlpaCisKK0JVSUxEIEZBSUxFRAorQzpcZGV2dGxzXHRydW5rXGN1cnJlbmN5XGJ1aWxkLnhtbDo1NDogSmF2YSByZXR1cm5lZDogMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gdGhpcyBjYXNlLCB5b3UgaGF2ZSB0byB1cGRhdGUgdGhlIGhhcmRjb2RlZCBkYXRhIGluIE51bWVyaWNDb2RlRGF0YS4KK1lvdSBjYW4gZWl0aGVyIGVkaXQgdGhlIHRhYmxlIGluIE51bWVyaWNDb2RlRGF0YSBtYW51YWxseSwgb3IgcnVuIHRoZSB0b29sCitjb21tYW5kICJwcmludCIgYW5kIGNvcHkgdGhlIG91dHB1dCBhbmQgcGFzdGUgaXQgdG8gdGhlIHRhYmxlLgorCitPbmNlIHlvdSBtYWtlIHN1cmUgImFudCBjaGVjayIgcmV0dXJucyBubyBlcnJvcnMsIHJ1biAiYW50IHJlc291cmNlIi4gVGhpcwordGFyZ2V0IGdlbmVyYXRlIG91dC9yZXMvY3VycmVuY3lOdW1lcmljQ29kZXMudHh0LiBUaGUgZmlsZSBzaG91bGQgZ28gdG8KKzxpY3U0Yz4vc291cmNlL2RhdGEvbWlzYyBkaXJlY3RvcnkuCisKK05vdGU6IFRoZSBkZWZhdWx0IGFudCB0YXJnZXQgZG9lcyBib3RoIG9wZXJhdGlvbi4gQWx0aG91Z2ggaXQgY3JlYXRlcyB0aGUKK0lDVSByZXNvdXJjZSBmaWxlLCB5b3UgZG8gbm90IG5lZWQgdG8gcmVwbGFjZSB0aGUgb25lIGluIElDVTRDIHBhY2thZ2Ugd2l0aAordGhlIG5ld2x5IGdlbmVyYXRlZCBvbmUgaWYgImNoZWNrIiBzdWNjZXNzZnVsbHkgZmluaXNoZWQuCisKZGlmZiAtLWdpdCBhL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFFbnRyeS5qYXZhIGIvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L0N1cnJlbmN5RGF0YUVudHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkZmM0MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFFbnRyeS5qYXZhCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeTsKKworLyoqCisgKiBDdXJyZW5jeSBkYXRhIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFhNTCBkYXRhIGRpc3RyaWJ1dGVkIGJ5IFNJWCBJbnRlcmJhbmsgQ2xlYXJpbmcKKyAqIChUaGUgSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5KS4KKyAqLworcHVibGljIGNsYXNzIEN1cnJlbmN5RGF0YUVudHJ5IHsKKyAgICBwcml2YXRlIFN0cmluZyBlbnRpdHk7CisgICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVuY3k7CisgICAgcHJpdmF0ZSBTdHJpbmcgYWxwaGFiZXRpY0NvZGU7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIG51bWVyaWNDb2RlOworICAgIHByaXZhdGUgSW50ZWdlciBtaW5vclVuaXQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgd2l0aGRyYXdhbERhdGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgcmVtYXJrOworICAgIHByaXZhdGUgYm9vbGVhbiBoaXN0b3JpYzsKKworICAgIHByaXZhdGUgQ3VycmVuY3lEYXRhRW50cnkoU3RyaW5nIGVudGl0eSwgU3RyaW5nIGN1cnJlbmN5LCBTdHJpbmcgYWxwaGFiZXRpY0NvZGUsIEludGVnZXIgbnVtZXJpY0NvZGUsIEludGVnZXIgbWlub3JVbml0LCBTdHJpbmcgd2l0aGRyYXdhbERhdGUsIFN0cmluZyByZW1hcmssIGJvb2xlYW4gaGlzdG9yaWMpIHsKKyAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CisgICAgICAgIHRoaXMuY3VycmVuY3kgPSBjdXJyZW5jeTsKKyAgICAgICAgdGhpcy5hbHBoYWJldGljQ29kZSA9IGFscGhhYmV0aWNDb2RlOworICAgICAgICB0aGlzLm51bWVyaWNDb2RlID0gbnVtZXJpY0NvZGU7CisgICAgICAgIHRoaXMubWlub3JVbml0ID0gbWlub3JVbml0OworICAgICAgICB0aGlzLndpdGhkcmF3YWxEYXRlID0gd2l0aGRyYXdhbERhdGU7CisgICAgICAgIHRoaXMucmVtYXJrID0gcmVtYXJrOworICAgICAgICB0aGlzLmhpc3RvcmljID0gaGlzdG9yaWM7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBlbnRpdHkoKSB7CisgICAgICAgIHJldHVybiBlbnRpdHk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBjdXJyZW5jeSgpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbmN5OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgYWxwaGFiZXRpY0NvZGUoKSB7CisgICAgICAgIHJldHVybiBhbHBoYWJldGljQ29kZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBudW1lcmljQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bWVyaWNDb2RlOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIG1pbm9yVW5pdCgpIHsKKyAgICAgICAgcmV0dXJuIG1pbm9yVW5pdDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHdpdGhkcmF3YWxEYXRlKCkgeworICAgICAgICByZXR1cm4gd2l0aGRyYXdhbERhdGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyByZW1hcmsoKSB7CisgICAgICAgIHJldHVybiByZW1hcms7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGlzdG9yaWMoKSB7CisgICAgICAgIHJldHVybiBoaXN0b3JpYzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyBlbnRpdHlfOworICAgICAgICBwcml2YXRlIFN0cmluZyBjdXJyZW5jeV87CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGFscGhhYmV0aWNDb2RlXzsKKyAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG51bWVyaWNDb2RlXzsKKyAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG1pbm9yVW5pdF87CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgd2l0aGRyYXdhbERhdGVfOworICAgICAgICBwcml2YXRlIFN0cmluZyByZW1hcmtfOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGlzdG9yaWNfID0gZmFsc2U7CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RW50aXR5KFN0cmluZyBlbnRpdHkpIHsKKyAgICAgICAgICAgIGVudGl0eV8gPSBlbnRpdHk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEN1cnJlbmN5KFN0cmluZyBjdXJyZW5jeSkgeworICAgICAgICAgICAgY3VycmVuY3lfID0gY3VycmVuY3k7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEFscGhhYmV0aWNDb2RlKFN0cmluZyBhbHBoYWJldGljQ29kZSkgeworICAgICAgICAgICAgYWxwaGFiZXRpY0NvZGVfID0gYWxwaGFiZXRpY0NvZGU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE51bWVyaWNDb2RlKFN0cmluZyBudW1lcmljQ29kZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBudW1lcmljQ29kZV8gPSBJbnRlZ2VyLnBhcnNlSW50KG51bWVyaWNDb2RlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy8gaWdub3JlCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbm9yVW5pdChTdHJpbmcgbWlub3JVbml0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1pbm9yVW5pdF8gPSBJbnRlZ2VyLnBhcnNlSW50KG1pbm9yVW5pdCk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIGlnbm9yZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRXaXRoZHJhd2FsRGF0ZShTdHJpbmcgd2l0aGRyYXdhbERhdGUpIHsKKyAgICAgICAgICAgIHdpdGhkcmF3YWxEYXRlXyA9IHdpdGhkcmF3YWxEYXRlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRSZW1hcmsoU3RyaW5nIHJlbWFyaykgeworICAgICAgICAgICAgcmVtYXJrXyA9IHJlbWFyazsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0SGlzdG9yaWMoKSB7CisgICAgICAgICAgICBoaXN0b3JpY18gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQ3VycmVuY3lEYXRhRW50cnkgYnVpbGQoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEN1cnJlbmN5RGF0YUVudHJ5KGVudGl0eV8sIGN1cnJlbmN5XywgYWxwaGFiZXRpY0NvZGVfLCBudW1lcmljQ29kZV8sIG1pbm9yVW5pdF8sIHdpdGhkcmF3YWxEYXRlXywgcmVtYXJrXywgaGlzdG9yaWNfKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlc2V0KCkgeworICAgICAgICAgICAgZW50aXR5XyA9IG51bGw7CisgICAgICAgICAgICBjdXJyZW5jeV8gPSBudWxsOworICAgICAgICAgICAgYWxwaGFiZXRpY0NvZGVfID0gbnVsbDsKKyAgICAgICAgICAgIG51bWVyaWNDb2RlXyA9IG51bGw7CisgICAgICAgICAgICBtaW5vclVuaXRfID0gbnVsbDsKKyAgICAgICAgICAgIHdpdGhkcmF3YWxEYXRlXyA9IG51bGw7CisgICAgICAgICAgICByZW1hcmtfID0gbnVsbDsKKyAgICAgICAgICAgIGhpc3RvcmljXyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvQ3VycmVuY3lEYXRhUGFyc2VyLmphdmEgYi9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvQ3VycmVuY3lEYXRhUGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyODI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFQYXJzZXIuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3k7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kuQ3VycmVuY3lEYXRhRW50cnkuQnVpbGRlcjsKKworLyoqCisgKiBQYXJzZXIgZm9yIElTTyA0MjE3IGRhdGEgZmlsZSBpbiBYTUwgZm9ybWF0IGRpc3RyaWJ1dGVkIGJ5IFNJWCBJbnRlcmJhbmsgQ2xlYXJpbmcKKyAqIChUaGUgSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5KS4KKyAqLworcHVibGljIGNsYXNzIEN1cnJlbmN5RGF0YVBhcnNlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IHBhcnNlKEZpbGUgZGF0YUZpbGUsIGJvb2xlYW4gaGlzdG9yaWMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBTQVhQYXJzZXIgcGFyc2VyOworICAgICAgICAgICAgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKKyAgICAgICAgICAgIEhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGhpc3RvcmljKTsKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZShuZXcgRmlsZUlucHV0U3RyZWFtKGRhdGFGaWxlKSwgaGFuZGxlcik7CisgICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyLmdldFBhcnNlZElTT0N1cnJlbmNpZXMoKTsKKyAgICAgICAgfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKKyAgICAgICAgcHJpdmF0ZSBlbnVtIEVsZW1lbnRUeXBlIHsKKyAgICAgICAgICAgIEVOVElUWSgiQ3RyeU5tIiksCisgICAgICAgICAgICBDVVJSRU5DWSgiQ2N5Tm0iKSwKKyAgICAgICAgICAgIEFMUEhBQkVUSUNfQ09ERSgiQ2N5IiksCisgICAgICAgICAgICBOVU1FUklDX0NPREUoIkNjeU5iciIpLAorICAgICAgICAgICAgTUlOT1JfVU5JVCgiQ2N5TW5yVW50cyIpLAorICAgICAgICAgICAgV0lUSERSQVdBTF9EQVRFKCJXdGhkcndsRHQiKSwKKyAgICAgICAgICAgIFJFTUFSSygiUmVtYXJrIiksICAgLy8gb2Jzb2xldGUKKyAgICAgICAgICAgIE9USEVSKCJPdGhlciIpOyAgICAgLy8gcGxhY2UgaG9sZGVyCisKKyAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIGVsZW1OYW1lOworCisgICAgICAgICAgICBFbGVtZW50VHlwZShTdHJpbmcgZWxlbU5hbWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1OYW1lID0gZWxlbU5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudFR5cGUgZm9yTmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudFR5cGUgdHlwZSA6IHZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmVsZW1OYW1lLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIE9USEVSOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IGlzb0N1cnJlbmNpZXMgPSBuZXcgTGlua2VkTGlzdDxDdXJyZW5jeURhdGFFbnRyeT4oKTsKKyAgICAgICAgRWxlbWVudFR5cGUgZWxlbSA9IEVsZW1lbnRUeXBlLk9USEVSOworICAgICAgICBCdWlsZGVyIGN1cnJCbGQgPSBuZXcgQnVpbGRlcigpOworCisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBoaXN0b3JpYzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY3VyckVsZW1OYW1lOworCisgICAgICAgIHB1YmxpYyBIYW5kbGVyKGJvb2xlYW4gaGlzdG9yaWMpIHsKKyAgICAgICAgICAgIHRoaXMuaGlzdG9yaWMgPSBoaXN0b3JpYzsKKyAgICAgICAgICAgIGN1cnJFbGVtTmFtZSA9IGhpc3RvcmljID8gIkhzdHJjQ2N5TnRyeSIgOiAiQ2N5TnRyeSI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQ29sbGVjdGlvbjxDdXJyZW5jeURhdGFFbnRyeT4gZ2V0UGFyc2VkSVNPQ3VycmVuY2llcygpIHsKKyAgICAgICAgICAgIHJldHVybiBpc29DdXJyZW5jaWVzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBpZiAocU5hbWUuZXF1YWxzKGN1cnJFbGVtTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZWxlbSA9IEVsZW1lbnRUeXBlLk9USEVSOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gRWxlbWVudFR5cGUuZm9yTmFtZShxTmFtZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IEVsZW1lbnRUeXBlLk9USEVSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKSB7CisgICAgICAgICAgICAvLyBlbWl0IGEgY3VycmVuY3kgZGF0YQorICAgICAgICAgICAgaWYgKHFOYW1lLmVxdWFscyhjdXJyRWxlbU5hbWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGhpc3RvcmljKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0SGlzdG9yaWMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXNvQ3VycmVuY2llcy5hZGQoY3VyckJsZC5idWlsZCgpKTsKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbGVtID0gRWxlbWVudFR5cGUuT1RIRVI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXJbXSBjaCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW0pIHsKKyAgICAgICAgICAgIGNhc2UgRU5USVRZOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0RW50aXR5KG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENVUlJFTkNZOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0Q3VycmVuY3kobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxQSEFCRVRJQ19DT0RFOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0QWxwaGFiZXRpY0NvZGUobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTlVNRVJJQ19DT0RFOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0TnVtZXJpY0NvZGUobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTUlOT1JfVU5JVDoKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnNldE1pbm9yVW5pdChuZXcgU3RyaW5nKGNoLCBzdGFydCwgbGVuZ3RoKS50cmltKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXSVRIRFJBV0FMX0RBVEU6CisgICAgICAgICAgICAgICAgY3VyckJsZC5zZXRXaXRoZHJhd2FsRGF0ZShuZXcgU3RyaW5nKGNoLCBzdGFydCwgbGVuZ3RoKS50cmltKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSRU1BUks6CisgICAgICAgICAgICAgICAgY3VyckJsZC5zZXRSZW1hcmsobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gTk9PUAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L01haW4uamF2YSBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiYzFiNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9NYWluLmphdmEKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCisvKioKKyAqIFRoZSB0b29sIHVzZWQgZm9yIElTTyA0MjE3IGFscGhhMy1udW1lcmljMyBjb2RlIG1hcHBpbmcgZGF0YSBtYWludGVuYW5jZS4KKyAqIFRoaXMgY29kZSBpcyB1c2VkIGZvciBzeW5jaHJvbml6aW5nIElDVSBhbHBoYTMtbnVtZXJpYzMgbWFwcGluZyBkYXRhIHdpdGgKKyAqIHRoZSBkYXRhIGRpc3RyaWJ1dGVkIGJ5IFNJWCBJbnRlcmJhbmsgQ2xlYXJpbmcuCisgKi8KK3B1YmxpYyBjbGFzcyBNYWluIHsKKyAgICBwcml2YXRlIGVudW0gQ29tbWFuZCB7CisgICAgICAgIENIRUNLLAorICAgICAgICBQUklOVCwKKyAgICAgICAgQlVJTEQsCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNOQU1FID0gImN1cnJlbmN5TnVtZXJpY0NvZGVzIjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmdzKSB7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbW1hbmQgY21kID0gbnVsbDsKKworICAgICAgICAvLyAxc3QgYXJndW1lbnQgbXVzdCBiZSBjb21tYW5kCisgICAgICAgIGlmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoQ29tbWFuZC5DSEVDSy5uYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgeworICAgICAgICAgICAgICAgIGNtZCA9IENvbW1hbmQuQ0hFQ0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKENvbW1hbmQuUFJJTlQubmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgICAgICBjbWQgPSBDb21tYW5kLlBSSU5UOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZShDb21tYW5kLkJVSUxELm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICAgICAgY21kID0gQ29tbWFuZC5CVUlMRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbWQgPT0gbnVsbCkgeworICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0KKyAKKyAgICAgICAgaW50IHN0YXR1cyA9IDA7CisKKyAgICAgICAgaWYgKGNtZCA9PSBDb21tYW5kLkJVSUxEKSB7CisgICAgICAgICAgICBGaWxlIG91dGZpbGUgPSBuZXcgRmlsZShhcmdzWzFdLCBSRVNOQU1FICsgIi50eHQiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0ZmlsZSksICJVVEYtOCIpOworICAgICAgICAgICAgICAgIE51bWVyaWNDb2RlRGF0YS5nZXREZWZhdWx0SW5zdGFuY2UoKS53cml0ZVJlc291cmNlKG9zdywgUkVTTkFNRSk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gMm5kIGFyZ3VtZW50IGlzIGN1cnJlbnQgZGF0YSB4bWwgZmlsZQorICAgICAgICAgICAgLy8gM3JkIGFyZ3VtZW50IGlzIGhpc3RvcmljIGRhdGEgeG1sIGZpbGUKKyAgICAgICAgICAgIEZpbGUgY3VycmVudFhtbCA9IG5ldyBGaWxlKGFyZ3NbMV0pOworICAgICAgICAgICAgRmlsZSBoaXN0b3JpY1htbCA9IG5ldyBGaWxlKGFyZ3NbMl0pOworICAgICAgICAgICAgQ29sbGVjdGlvbjxDdXJyZW5jeURhdGFFbnRyeT4gY3VycmVudERhdGFFbnRyaWVzID0gbnVsbDsKKyAgICAgICAgICAgIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IGhpc3RvcmljRGF0YUVudHJpZXMgPSBudWxsOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhRW50cmllcyA9IEN1cnJlbmN5RGF0YVBhcnNlci5wYXJzZShjdXJyZW50WG1sLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaGlzdG9yaWNEYXRhRW50cmllcyA9IEN1cnJlbmN5RGF0YVBhcnNlci5wYXJzZShoaXN0b3JpY1htbCwgdHJ1ZSk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICAgICAgICAgICBOdW1lcmljQ29kZURhdGEgbnVtQ29kZURhdGEgPSBOdW1lcmljQ29kZURhdGEuY3JlYXRlSW5zdGFuY2UoY3VycmVudERhdGFFbnRyaWVzKTsKKyAgICAgICAgICAgICAgICBudW1Db2RlRGF0YS5tZXJnZShOdW1lcmljQ29kZURhdGEuY3JlYXRlSW5zdGFuY2UoaGlzdG9yaWNEYXRhRW50cmllcykpOworCisgICAgICAgICAgICAgICAgaWYgKGNtZCA9PSBDb21tYW5kLlBSSU5UKSB7CisgICAgICAgICAgICAgICAgICAgIG51bUNvZGVEYXRhLnByaW50QXJyYXkoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY21kID09IENvbW1hbmQuQ0hFQ0spOworICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzT0sgPSBjaGVja0RhdGEobnVtQ29kZURhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNPSykgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbT0tdIElDVSBkYXRhIGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZSByZWZlcmVuY2UgZGF0YSIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN5c3RlbS5leGl0KHN0YXR1cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFVzYWdlKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltVc2FnZV0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIDEpIGphdmEgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kuTWFpbiBjaGVjayA8Y3VycmVudFhNTD4gPGhpc3RvcmljWE1MPiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgVmVyaWZpZXMgdGhlIElDVSBkYXRhICh0YWJsZSBpbiBOdW1lcmljQ29kZURhdGEpIHdpdGggdGhlIHJlZmVyZW5jZSBkYXRhLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgQXJndW1lbnQocyk6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIDxjdXJyZW50WE1MPiAgLSBDdXJyZW50IGN1cnJlbmNpZXMgJiBmdW5kcyBkYXRhIChUYWJsZSBBLjEpIGluIFhNTCBmb3JtYXQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgPGhpc3RvcmljWE1MPiAtIEhpc3RvcmljIGRlbm9taW5hdGlvbnMgZGF0YSAoVGFibGUgQS4zKSBpbiBYTUwgZm9ybWF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAyKSBqYXZhIGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk1haW4gcHJpbnQgPGN1cnJlbnRYTUw+IDxoaXN0b3JpY1hNTD4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFByaW50cyBvdXQgdGhlIGFscGhhLW51bWVyaWMgY29kZSBtYXBwaW5nIGltcG9ydGVkIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRhLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgQXJndW1lbnQocyk6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIDxjdXJyZW50WE1MPiAgLSBDdXJyZW50IGN1cnJlbmNpZXMgJiBmdW5kcyBkYXRhIChUYWJsZSBBLjEpIGluIFhNTCBmb3JtYXQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgPGhpc3RvcmljWE1MPiAtIEhpc3RvcmljIGRlbm9taW5hdGlvbnMgZGF0YSAoVGFibGUgQS4zKSBpbiBYTUwgZm9ybWF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAzKSBqYXZhIGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk1haW4gYnVpbGQgPG91dHR4dD4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFdyaXRlcyBvdXQgdGhlIGFscGhhLW51bWVyaWMgaW4gTnVtZXJpY0NvZGVEYXRhIGludG8gSUNVIHJlc291cmNlIGJ1bmRsZSBzb3VyY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICgudHh0KSBmb3JtYXQuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBBcmd1bWVudChzKToiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgPG91dGRpcj4gICAgICAtIE91dHB1dCBkaXJlY3Rvcnkgb2YgdGhlIElDVSByZXNvdXJjZSBidW5kbGUgc291cmNlICgudHh0KSBmb3JtYXQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTm90ZV0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFJlZmVyZW5jZSBYTUwgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJU08gNDIxNyBtYWludGVuYW5jZSBhZ2VuY3kgYXQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFtodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvaXNvX2luZGV4L2lzb190YWJsZXMuaHRtXS4iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrRGF0YShOdW1lcmljQ29kZURhdGEgcmVmRGF0YSkgeworICAgICAgICBib29sZWFuIGlzT0sgPSB0cnVlOworCisgICAgICAgIFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gaWN1TWFwID0gTnVtZXJpY0NvZGVEYXRhLmdldERlZmF1bHRJbnN0YW5jZSgpLmdldEFscGhhTnVtZXJpY0NvZGVNYXAoKTsKKyAgICAgICAgU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiByZWZNYXAgPSByZWZEYXRhLmdldEFscGhhTnVtZXJpY0NvZGVNYXAoKTsKKworICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU3RyaW5nPiByZWZFbnRyeSA6IHJlZk1hcC5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgcmVmQWxwaGEgPSByZWZFbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgIFN0cmluZyByZWZOdW1lcmljID0gcmVmRW50cnkuZ2V0VmFsdWUoKTsKKworICAgICAgICAgICAgU3RyaW5nIGljdU51bWVyaWMgPSBpY3VNYXAuZ2V0KHJlZkFscGhhKTsKKyAgICAgICAgICAgIGlmIChpY3VOdW1lcmljID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1pc3NpbmcgYWxwaGEgY29kZSBpbiBJQ1UgbWFwIFsiICsgcmVmQWxwaGEgKyAiXSIpOworICAgICAgICAgICAgICAgIGlzT0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWljdU51bWVyaWMuZXF1YWxzKHJlZk51bWVyaWMpKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW1lcmljIGNvZGUgbWlzbWF0Y2ggWyIgKyByZWZBbHBoYSArICJdIElDVT0iICsgaWN1TnVtZXJpYyArICIgLSBSZWZlcmVuY2U9IiArIHJlZk51bWVyaWMpOworICAgICAgICAgICAgICAgIGlzT0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFNldDxTdHJpbmc+IGljdUtleVNldCA9IGljdU1hcC5rZXlTZXQoKTsKKyAgICAgICAgU2V0PFN0cmluZz4gcmVmS2V5U2V0ID0gcmVmTWFwLmtleVNldCgpOworICAgICAgICBpZiAoIXJlZktleVNldC5jb250YWluc0FsbChpY3VLZXlTZXQpKSB7CisgICAgICAgICAgICBpc09LID0gZmFsc2U7CisgICAgICAgICAgICBTZXQ8U3RyaW5nPiB0bXAgPSBuZXcgVHJlZVNldDxTdHJpbmc+KGljdUtleVNldCk7CisgICAgICAgICAgICB0bXAucmVtb3ZlQWxsKHJlZktleVNldCk7CisKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGFscGhhIDogdG1wKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGgoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoYWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvZGVzIG5vdCBmb3VuZCBpbiB0aGUgcmVmZXJlbmNlIGRhdGE6ICIgKyBidWYpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlzT0s7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L051bWVyaWNDb2RlRGF0YS5qYXZhIGIvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L051bWVyaWNDb2RlRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTlkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvTnVtZXJpY0NvZGVEYXRhLmphdmEKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkTWFwOworaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKKworLyoqCisgKiBDb250YWluZXIgb2YgSVNPIDQyMTcgYWxwaGEzIC0gbnVtZXJpYzMgY29kZSBtYXBwaW5nIGRhdGEKKyAqLworcHVibGljIGNsYXNzIE51bWVyaWNDb2RlRGF0YSB7CisgICAgcHJpdmF0ZSBTb3J0ZWRNYXA8U3RyaW5nLCBTdHJpbmc+IF9jb2RlTWFwOworCisgICAgcHJpdmF0ZSBOdW1lcmljQ29kZURhdGEoU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiBjb2RlTWFwKSB7CisgICAgICAgIF9jb2RlTWFwID0gY29kZU1hcDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE51bWVyaWNDb2RlRGF0YSBnZXREZWZhdWx0SW5zdGFuY2UoKSB7CisgICAgICAgIFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgICAgIGZvciAoU3RyaW5nW10gZGF0YUVudHJ5IDogQ09ERV9NQVBfREFUQSkgeworICAgICAgICAgICAgbWFwLnB1dChkYXRhRW50cnlbMF0sIGRhdGFFbnRyeVsxXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmljQ29kZURhdGEobWFwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE51bWVyaWNDb2RlRGF0YSBjcmVhdGVJbnN0YW5jZShDb2xsZWN0aW9uPEN1cnJlbmN5RGF0YUVudHJ5PiBkYXRhRW50cmllcykgeworICAgICAgICBTb3J0ZWRNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICBmb3IgKEN1cnJlbmN5RGF0YUVudHJ5IGRhdGFFbnRyeSA6IGRhdGFFbnRyaWVzKSB7CisgICAgICAgICAgICBTdHJpbmcgYWxwaGFDb2RlID0gZGF0YUVudHJ5LmFscGhhYmV0aWNDb2RlKCk7CisgICAgICAgICAgICBJbnRlZ2VyIG51bUNvZGUgPSBkYXRhRW50cnkubnVtZXJpY0NvZGUoKTsKKyAgICAgICAgICAgIGlmIChhbHBoYUNvZGUgPT0gbnVsbCB8fCBudW1Db2RlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hcC5wdXQoYWxwaGFDb2RlLCBTdHJpbmcuZm9ybWF0KCIlMDNkIiwgbnVtQ29kZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgTnVtZXJpY0NvZGVEYXRhKG1hcCk7CisgICAgfQorCisgICAgcHVibGljIE51bWVyaWNDb2RlRGF0YSBtZXJnZShOdW1lcmljQ29kZURhdGEgYW5vdGhlckRhdGEpIHsKKyAgICAgICAgU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiBjb2RlTWFwID0gYW5vdGhlckRhdGEuZ2V0QWxwaGFOdW1lcmljQ29kZU1hcCgpOworICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU3RyaW5nPiBjb2RlTWFwRW50cnkgOiBjb2RlTWFwLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBhbHBoYUNvZGUgPSBjb2RlTWFwRW50cnkuZ2V0S2V5KCk7CisgICAgICAgICAgICBTdHJpbmcgbnVtQ29kZSA9IGNvZGVNYXBFbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCFfY29kZU1hcC5jb250YWluc0tleShhbHBoYUNvZGUpKSB7CisgICAgICAgICAgICAgICAgX2NvZGVNYXAucHV0KGFscGhhQ29kZSwgbnVtQ29kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0cmluZyBleGlzdGluZ1ZhbHVlID0gX2NvZGVNYXAuZ2V0KGFscGhhQ29kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1ZhbHVlLmVxdWFscyhudW1Db2RlKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRHVwbGljYXRlZCBkZWZpbml0aW9uIGZvciAiICsgYWxwaGFDb2RlICsgIjogdmFsdWU9IiArIGV4aXN0aW5nVmFsdWUgKyAiL2Fub3RoZXIgdmFsdWU9IiArIG51bUNvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiBnZXRBbHBoYU51bWVyaWNDb2RlTWFwKCkgeworICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU29ydGVkTWFwKF9jb2RlTWFwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwcmludEFycmF5KCkgeworICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IGdldEFscGhhTnVtZXJpY0NvZGVNYXAoKS5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAge1wiIiArIGVudHJ5LmdldEtleSgpICsgIlwiLCBcIiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIlwifSwiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlUmVzb3VyY2UoT3V0cHV0U3RyZWFtV3JpdGVyIG9zdywgU3RyaW5nIHJlc05hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpOworCisgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG9zdywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSGVhZGVyCisgICAgICAgIHB3LnByaW50bG4oIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHB3LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiLy8gQ29weXJpZ2h0IChDKSAlMSR0WSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyIsIGNhbCkpOworICAgICAgICBwdy5wcmludGxuKCIvLyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4iKTsKKyAgICAgICAgcHcucHJpbnRsbigiLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcHcucHJpbnRsbigiLy8gQnVpbGQgdG9vbDogY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kuTnVtZXJpY0NvZGVEYXRhIik7CisgICAgICAgIHB3LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiLy8gQnVpbGQgZGF0ZTogJTEkdEZUJTEkdFRaIiwgY2FsKSk7CisgICAgICAgIHB3LnByaW50bG4oIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHB3LnByaW50bG4oIi8vID4+ICEhISA+PiAgIFRISVMgSVMgQSBNQUNISU5FLUdFTkVSQVRFRCBGSUxFICAgPDwgISEhIDw8Iik7CisgICAgICAgIHB3LnByaW50bG4oIi8vID4+ICEhISA+Pj4gICAgICAgICAgICBETyBOT1QgRURJVCAgICAgICAgICAgICA8PDwgISEhIDw8Iik7CisgICAgICAgIHB3LnByaW50bG4oIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHB3LnByaW50bG4oIiIpOworCisgICAgICAgIC8vIFJlc291cmNlIHJvb3QKKyAgICAgICAgcHcucHJpbnRsbihyZXNOYW1lICsgIjp0YWJsZShub2ZhbGxiYWNrKXsiKTsKKworICAgICAgICAvLyBNYXAgZGF0YQorICAgICAgICBwdy5wcmludGxuKCIgICAgY29kZU1hcHsiKTsKKworICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU3RyaW5nPiBtYXBFbnRyeSA6IF9jb2RlTWFwLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBhbHBoYUNvZGUgPSBtYXBFbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgIGludCBudW1lcmljQ29kZVZhbCA9IEludGVnZXIucGFyc2VJbnQobWFwRW50cnkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBwdy5wcmludGxuKFN0cmluZy5mb3JtYXQoIiAgICAgICAgJTEkczppbnR7JTIkZH0iLCBhbHBoYUNvZGUsIG51bWVyaWNDb2RlVmFsKSk7CisgICAgICAgIH0KKworICAgICAgICBwdy5wcmludGxuKCIgICAgfSIpOworCisgICAgICAgIHB3LnByaW50bG4oIn0iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIENPREVfTUFQX0RBVEEgPSB7CisgICAgICAgIHsiQURQIiwgIjAyMCJ9LAorICAgICAgICB7IkFFRCIsICI3ODQifSwKKyAgICAgICAgeyJBRkEiLCAiMDA0In0sCisgICAgICAgIHsiQUZOIiwgIjk3MSJ9LAorICAgICAgICB7IkFMTCIsICIwMDgifSwKKyAgICAgICAgeyJBTUQiLCAiMDUxIn0sCisgICAgICAgIHsiQU5HIiwgIjUzMiJ9LAorICAgICAgICB7IkFPQSIsICI5NzMifSwKKyAgICAgICAgeyJBT04iLCAiMDI0In0sCisgICAgICAgIHsiQU9SIiwgIjk4MiJ9LAorICAgICAgICB7IkFSQSIsICIwMzIifSwKKyAgICAgICAgeyJBUlAiLCAiMDMyIn0sCisgICAgICAgIHsiQVJTIiwgIjAzMiJ9LAorICAgICAgICB7IkFUUyIsICIwNDAifSwKKyAgICAgICAgeyJBVUQiLCAiMDM2In0sCisgICAgICAgIHsiQVdHIiwgIjUzMyJ9LAorICAgICAgICB7IkFZTSIsICI5NDUifSwKKyAgICAgICAgeyJBWk0iLCAiMDMxIn0sCisgICAgICAgIHsiQVpOIiwgIjk0NCJ9LAorICAgICAgICB7IkJBRCIsICIwNzAifSwKKyAgICAgICAgeyJCQU0iLCAiOTc3In0sCisgICAgICAgIHsiQkJEIiwgIjA1MiJ9LAorICAgICAgICB7IkJEVCIsICIwNTAifSwKKyAgICAgICAgeyJCRUMiLCAiOTkzIn0sCisgICAgICAgIHsiQkVGIiwgIjA1NiJ9LAorICAgICAgICB7IkJFTCIsICI5OTIifSwKKyAgICAgICAgeyJCR0wiLCAiMTAwIn0sCisgICAgICAgIHsiQkdOIiwgIjk3NSJ9LAorICAgICAgICB7IkJIRCIsICIwNDgifSwKKyAgICAgICAgeyJCSUYiLCAiMTA4In0sCisgICAgICAgIHsiQk1EIiwgIjA2MCJ9LAorICAgICAgICB7IkJORCIsICIwOTYifSwKKyAgICAgICAgeyJCT0IiLCAiMDY4In0sCisgICAgICAgIHsiQk9WIiwgIjk4NCJ9LAorICAgICAgICB7IkJSQyIsICIwNzYifSwKKyAgICAgICAgeyJCUkUiLCAiMDc2In0sCisgICAgICAgIHsiQlJMIiwgIjk4NiJ9LAorICAgICAgICB7IkJSTiIsICIwNzYifSwKKyAgICAgICAgeyJCUlIiLCAiOTg3In0sCisgICAgICAgIHsiQlNEIiwgIjA0NCJ9LAorICAgICAgICB7IkJUTiIsICIwNjQifSwKKyAgICAgICAgeyJCV1AiLCAiMDcyIn0sCisgICAgICAgIHsiQllCIiwgIjExMiJ9LAorICAgICAgICB7IkJZUiIsICI5NzQifSwKKyAgICAgICAgeyJCWkQiLCAiMDg0In0sCisgICAgICAgIHsiQ0FEIiwgIjEyNCJ9LAorICAgICAgICB7IkNERiIsICI5NzYifSwKKyAgICAgICAgeyJDSEMiLCAiOTQ4In0sCisgICAgICAgIHsiQ0hFIiwgIjk0NyJ9LAorICAgICAgICB7IkNIRiIsICI3NTYifSwKKyAgICAgICAgeyJDSFciLCAiOTQ4In0sCisgICAgICAgIHsiQ0xGIiwgIjk5MCJ9LAorICAgICAgICB7IkNMUCIsICIxNTIifSwKKyAgICAgICAgeyJDTlkiLCAiMTU2In0sCisgICAgICAgIHsiQ09QIiwgIjE3MCJ9LAorICAgICAgICB7IkNPVSIsICI5NzAifSwKKyAgICAgICAgeyJDUkMiLCAiMTg4In0sCisgICAgICAgIHsiQ1NEIiwgIjg5MSJ9LAorICAgICAgICB7IkNTSyIsICIyMDAifSwKKyAgICAgICAgeyJDVUMiLCAiOTMxIn0sCisgICAgICAgIHsiQ1VQIiwgIjE5MiJ9LAorICAgICAgICB7IkNWRSIsICIxMzIifSwKKyAgICAgICAgeyJDWVAiLCAiMTk2In0sCisgICAgICAgIHsiQ1pLIiwgIjIwMyJ9LAorICAgICAgICB7IkRETSIsICIyNzgifSwKKyAgICAgICAgeyJERU0iLCAiMjc2In0sCisgICAgICAgIHsiREpGIiwgIjI2MiJ9LAorICAgICAgICB7IkRLSyIsICIyMDgifSwKKyAgICAgICAgeyJET1AiLCAiMjE0In0sCisgICAgICAgIHsiRFpEIiwgIjAxMiJ9LAorICAgICAgICB7IkVDUyIsICIyMTgifSwKKyAgICAgICAgeyJFQ1YiLCAiOTgzIn0sCisgICAgICAgIHsiRUVLIiwgIjIzMyJ9LAorICAgICAgICB7IkVHUCIsICI4MTgifSwKKyAgICAgICAgeyJFUk4iLCAiMjMyIn0sCisgICAgICAgIHsiRVNBIiwgIjk5NiJ9LAorICAgICAgICB7IkVTQiIsICI5OTUifSwKKyAgICAgICAgeyJFU1AiLCAiNzI0In0sCisgICAgICAgIHsiRVRCIiwgIjIzMCJ9LAorICAgICAgICB7IkVVUiIsICI5NzgifSwKKyAgICAgICAgeyJGSU0iLCAiMjQ2In0sCisgICAgICAgIHsiRkpEIiwgIjI0MiJ9LAorICAgICAgICB7IkZLUCIsICIyMzgifSwKKyAgICAgICAgeyJGUkYiLCAiMjUwIn0sCisgICAgICAgIHsiR0JQIiwgIjgyNiJ9LAorICAgICAgICB7IkdFSyIsICIyNjgifSwKKyAgICAgICAgeyJHRUwiLCAiOTgxIn0sCisgICAgICAgIHsiR0hDIiwgIjI4OCJ9LAorICAgICAgICB7IkdIUCIsICI5MzkifSwKKyAgICAgICAgeyJHSFMiLCAiOTM2In0sCisgICAgICAgIHsiR0lQIiwgIjI5MiJ9LAorICAgICAgICB7IkdNRCIsICIyNzAifSwKKyAgICAgICAgeyJHTkYiLCAiMzI0In0sCisgICAgICAgIHsiR1FFIiwgIjIyNiJ9LAorICAgICAgICB7IkdSRCIsICIzMDAifSwKKyAgICAgICAgeyJHVFEiLCAiMzIwIn0sCisgICAgICAgIHsiR1dQIiwgIjYyNCJ9LAorICAgICAgICB7IkdZRCIsICIzMjgifSwKKyAgICAgICAgeyJIS0QiLCAiMzQ0In0sCisgICAgICAgIHsiSE5MIiwgIjM0MCJ9LAorICAgICAgICB7IkhSRCIsICIxOTEifSwKKyAgICAgICAgeyJIUksiLCAiMTkxIn0sCisgICAgICAgIHsiSFRHIiwgIjMzMiJ9LAorICAgICAgICB7IkhVRiIsICIzNDgifSwKKyAgICAgICAgeyJJRFIiLCAiMzYwIn0sCisgICAgICAgIHsiSUVQIiwgIjM3MiJ9LAorICAgICAgICB7IklMUyIsICIzNzYifSwKKyAgICAgICAgeyJJTlIiLCAiMzU2In0sCisgICAgICAgIHsiSVFEIiwgIjM2OCJ9LAorICAgICAgICB7IklSUiIsICIzNjQifSwKKyAgICAgICAgeyJJU0siLCAiMzUyIn0sCisgICAgICAgIHsiSVRMIiwgIjM4MCJ9LAorICAgICAgICB7IkpNRCIsICIzODgifSwKKyAgICAgICAgeyJKT0QiLCAiNDAwIn0sCisgICAgICAgIHsiSlBZIiwgIjM5MiJ9LAorICAgICAgICB7IktFUyIsICI0MDQifSwKKyAgICAgICAgeyJLR1MiLCAiNDE3In0sCisgICAgICAgIHsiS0hSIiwgIjExNiJ9LAorICAgICAgICB7IktNRiIsICIxNzQifSwKKyAgICAgICAgeyJLUFciLCAiNDA4In0sCisgICAgICAgIHsiS1JXIiwgIjQxMCJ9LAorICAgICAgICB7IktXRCIsICI0MTQifSwKKyAgICAgICAgeyJLWUQiLCAiMTM2In0sCisgICAgICAgIHsiS1pUIiwgIjM5OCJ9LAorICAgICAgICB7IkxBSyIsICI0MTgifSwKKyAgICAgICAgeyJMQlAiLCAiNDIyIn0sCisgICAgICAgIHsiTEtSIiwgIjE0NCJ9LAorICAgICAgICB7IkxSRCIsICI0MzAifSwKKyAgICAgICAgeyJMU0wiLCAiNDI2In0sCisgICAgICAgIHsiTFRMIiwgIjQ0MCJ9LAorICAgICAgICB7IkxUVCIsICI0NDAifSwKKyAgICAgICAgeyJMVUMiLCAiOTg5In0sCisgICAgICAgIHsiTFVGIiwgIjQ0MiJ9LAorICAgICAgICB7IkxVTCIsICI5ODgifSwKKyAgICAgICAgeyJMVkwiLCAiNDI4In0sCisgICAgICAgIHsiTFZSIiwgIjQyOCJ9LAorICAgICAgICB7IkxZRCIsICI0MzQifSwKKyAgICAgICAgeyJNQUQiLCAiNTA0In0sCisgICAgICAgIHsiTURMIiwgIjQ5OCJ9LAorICAgICAgICB7Ik1HQSIsICI5NjkifSwKKyAgICAgICAgeyJNR0YiLCAiNDUwIn0sCisgICAgICAgIHsiTUtEIiwgIjgwNyJ9LAorICAgICAgICB7Ik1MRiIsICI0NjYifSwKKyAgICAgICAgeyJNTUsiLCAiMTA0In0sCisgICAgICAgIHsiTU5UIiwgIjQ5NiJ9LAorICAgICAgICB7Ik1PUCIsICI0NDYifSwKKyAgICAgICAgeyJNUk8iLCAiNDc4In0sCisgICAgICAgIHsiTVRMIiwgIjQ3MCJ9LAorICAgICAgICB7Ik1VUiIsICI0ODAifSwKKyAgICAgICAgeyJNVlIiLCAiNDYyIn0sCisgICAgICAgIHsiTVdLIiwgIjQ1NCJ9LAorICAgICAgICB7Ik1YTiIsICI0ODQifSwKKyAgICAgICAgeyJNWFYiLCAiOTc5In0sCisgICAgICAgIHsiTVlSIiwgIjQ1OCJ9LAorICAgICAgICB7Ik1aTSIsICI1MDgifSwKKyAgICAgICAgeyJNWk4iLCAiOTQzIn0sCisgICAgICAgIHsiTkFEIiwgIjUxNiJ9LAorICAgICAgICB7Ik5HTiIsICI1NjYifSwKKyAgICAgICAgeyJOSU8iLCAiNTU4In0sCisgICAgICAgIHsiTkxHIiwgIjUyOCJ9LAorICAgICAgICB7Ik5PSyIsICI1NzgifSwKKyAgICAgICAgeyJOUFIiLCAiNTI0In0sCisgICAgICAgIHsiTlpEIiwgIjU1NCJ9LAorICAgICAgICB7Ik9NUiIsICI1MTIifSwKKyAgICAgICAgeyJQQUIiLCAiNTkwIn0sCisgICAgICAgIHsiUEVJIiwgIjYwNCJ9LAorICAgICAgICB7IlBFTiIsICI2MDQifSwKKyAgICAgICAgeyJQRVMiLCAiNjA0In0sCisgICAgICAgIHsiUEdLIiwgIjU5OCJ9LAorICAgICAgICB7IlBIUCIsICI2MDgifSwKKyAgICAgICAgeyJQS1IiLCAiNTg2In0sCisgICAgICAgIHsiUExOIiwgIjk4NSJ9LAorICAgICAgICB7IlBMWiIsICI2MTYifSwKKyAgICAgICAgeyJQVEUiLCAiNjIwIn0sCisgICAgICAgIHsiUFlHIiwgIjYwMCJ9LAorICAgICAgICB7IlFBUiIsICI2MzQifSwKKyAgICAgICAgeyJST0wiLCAiNjQyIn0sCisgICAgICAgIHsiUk9OIiwgIjk0NiJ9LAorICAgICAgICB7IlJTRCIsICI5NDEifSwKKyAgICAgICAgeyJSVUIiLCAiNjQzIn0sCisgICAgICAgIHsiUlVSIiwgIjgxMCJ9LAorICAgICAgICB7IlJXRiIsICI2NDYifSwKKyAgICAgICAgeyJTQVIiLCAiNjgyIn0sCisgICAgICAgIHsiU0JEIiwgIjA5MCJ9LAorICAgICAgICB7IlNDUiIsICI2OTAifSwKKyAgICAgICAgeyJTREQiLCAiNzM2In0sCisgICAgICAgIHsiU0RHIiwgIjkzOCJ9LAorICAgICAgICB7IlNFSyIsICI3NTIifSwKKyAgICAgICAgeyJTR0QiLCAiNzAyIn0sCisgICAgICAgIHsiU0hQIiwgIjY1NCJ9LAorICAgICAgICB7IlNJVCIsICI3MDUifSwKKyAgICAgICAgeyJTS0siLCAiNzAzIn0sCisgICAgICAgIHsiU0xMIiwgIjY5NCJ9LAorICAgICAgICB7IlNPUyIsICI3MDYifSwKKyAgICAgICAgeyJTUkQiLCAiOTY4In0sCisgICAgICAgIHsiU1JHIiwgIjc0MCJ9LAorICAgICAgICB7IlNTUCIsICI3MjgifSwKKyAgICAgICAgeyJTVEQiLCAiNjc4In0sCisgICAgICAgIHsiU1ZDIiwgIjIyMiJ9LAorICAgICAgICB7IlNZUCIsICI3NjAifSwKKyAgICAgICAgeyJTWkwiLCAiNzQ4In0sCisgICAgICAgIHsiVEhCIiwgIjc2NCJ9LAorICAgICAgICB7IlRKUiIsICI3NjIifSwKKyAgICAgICAgeyJUSlMiLCAiOTcyIn0sCisgICAgICAgIHsiVE1NIiwgIjc5NSJ9LAorICAgICAgICB7IlRNVCIsICI5MzQifSwKKyAgICAgICAgeyJUTkQiLCAiNzg4In0sCisgICAgICAgIHsiVE9QIiwgIjc3NiJ9LAorICAgICAgICB7IlRQRSIsICI2MjYifSwKKyAgICAgICAgeyJUUkwiLCAiNzkyIn0sCisgICAgICAgIHsiVFJZIiwgIjk0OSJ9LAorICAgICAgICB7IlRURCIsICI3ODAifSwKKyAgICAgICAgeyJUV0QiLCAiOTAxIn0sCisgICAgICAgIHsiVFpTIiwgIjgzNCJ9LAorICAgICAgICB7IlVBSCIsICI5ODAifSwKKyAgICAgICAgeyJVQUsiLCAiODA0In0sCisgICAgICAgIHsiVUdYIiwgIjgwMCJ9LAorICAgICAgICB7IlVTRCIsICI4NDAifSwKKyAgICAgICAgeyJVU04iLCAiOTk3In0sCisgICAgICAgIHsiVVNTIiwgIjk5OCJ9LAorICAgICAgICB7IlVZSSIsICI5NDAifSwKKyAgICAgICAgeyJVWVUiLCAiODU4In0sCisgICAgICAgIHsiVVpTIiwgIjg2MCJ9LAorICAgICAgICB7IlZFQiIsICI4NjIifSwKKyAgICAgICAgeyJWRUYiLCAiOTM3In0sCisgICAgICAgIHsiVk5EIiwgIjcwNCJ9LAorICAgICAgICB7IlZVViIsICI1NDgifSwKKyAgICAgICAgeyJXU1QiLCAiODgyIn0sCisgICAgICAgIHsiWEFGIiwgIjk1MCJ9LAorICAgICAgICB7IlhBRyIsICI5NjEifSwKKyAgICAgICAgeyJYQVUiLCAiOTU5In0sCisgICAgICAgIHsiWEJBIiwgIjk1NSJ9LAorICAgICAgICB7IlhCQiIsICI5NTYifSwKKyAgICAgICAgeyJYQkMiLCAiOTU3In0sCisgICAgICAgIHsiWEJEIiwgIjk1OCJ9LAorICAgICAgICB7IlhDRCIsICI5NTEifSwKKyAgICAgICAgeyJYRFIiLCAiOTYwIn0sCisgICAgICAgIHsiWEVVIiwgIjk1NCJ9LAorICAgICAgICB7IlhPRiIsICI5NTIifSwKKyAgICAgICAgeyJYUEQiLCAiOTY0In0sCisgICAgICAgIHsiWFBGIiwgIjk1MyJ9LAorICAgICAgICB7IlhQVCIsICI5NjIifSwKKyAgICAgICAgeyJYU1UiLCAiOTk0In0sCisgICAgICAgIHsiWFRTIiwgIjk2MyJ9LAorICAgICAgICB7IlhVQSIsICI5NjUifSwKKyAgICAgICAgeyJYWFgiLCAiOTk5In0sCisgICAgICAgIHsiWUREIiwgIjcyMCJ9LAorICAgICAgICB7IllFUiIsICI4ODYifSwKKyAgICAgICAgeyJZVU0iLCAiODkxIn0sCisgICAgICAgIHsiWVVOIiwgIjg5MCJ9LAorICAgICAgICB7IlpBTCIsICI5OTEifSwKKyAgICAgICAgeyJaQVIiLCAiNzEwIn0sCisgICAgICAgIHsiWk1LIiwgIjg5NCJ9LAorICAgICAgICB7IlpNVyIsICI5NjcifSwKKyAgICAgICAgeyJaUk4iLCAiMTgwIn0sCisgICAgICAgIHsiWlJaIiwgIjE4MCJ9LAorICAgICAgICB7IlpXRCIsICI3MTYifSwKKyAgICAgICAgeyJaV0wiLCAiOTMyIn0sCisgICAgICAgIHsiWldOIiwgIjk0MiJ9LAorICAgICAgICB7IlpXUiIsICI5MzUifSwKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvbXVsdGkvTWFrZWZpbGUgYi9tdWx0aS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTdkYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitjbGVhbjoKKwktcm0gLXJmIC4vdG1wCmRpZmYgLS1naXQgYS9tdWx0aS9jL01ha2VmaWxlIGIvbXVsdGkvYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWJlOWYwCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9NYWtlZmlsZQpAQCAtMCwwICsxLDEwNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBtdWx0aWN1L2MgbWFrZWZpbGUKKworYWxsOgorCUBlY2hvIFRvIGJ1aWxkIGFsbCBJQ1VzOiAgJChNQUtFKSBhbGwtaWN1cworCUBlY2hvICJVc2luZyB0aGUgLWsgb3B0aW9uIG1heSBiZSBhIGdvb2QgaWRlYSBpZiBzb21lIGFyZSBub3QgYnVpbGRpbmcgcHJvcGVybHkuIgorCUBlY2hvIElDVVZFUlM6ICQoSUNVVkVSUykKKworaW5mbzoKKworI0lDVUNPTkY9c2ggLi9jb25maWd1cmUKK0lDVUNPTkY9JChNVUxUSUNVX1JPT1QpL2Mvc3VwZXJjb25mLnNoCitET1Q9JChzaGVsbCBwd2QpCitNVUxUSUNVX1JPT1Q9JChET1QpLy4uCitpbmNsdWRlICQoTVVMVElDVV9ST09UKS9jb21tb24vTWFrZWZpbGUtbXVsdGkuaW5jCistaW5jbHVkZSBNYWtlZmlsZS5sb2NhbAorCitJQ1VWRVJTOj0kKHNoZWxsIGNkICQoSUNVUyk7IGxzIGljdTRjKi50Z3ogfCBjdXQgLWQtIC1mMiB8IHNvcnQgfCB1bmlxIHwgZmdyZXAgLXYgLWYgJChNVUxUSUNVX1JPT1QpL2Mvb2xkLWljdS50eHQpCitJQ1U0SlZFUlM6PSQoc2hlbGwgY2QgJChJQ1VTKTsgbHMgaWN1NGoqLmphciB8IGN1dCAtZC0gLWYyIHwgY3V0IC1kLiAtZjEgfCAgc29ydCB8IHVuaXEgfCBmZ3JlcCAtdiAtZiAkKE1VTFRJQ1VfUk9PVCkvai9vbGQtaWN1NGoudHh0KQorCitCTEQ9JChDX0JMRCkKK0lOUz0kKENfSU5TKQorU1JDPSQoQ19TUkMpCisKK0FMTElDVVM9JChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX0JMRCkpICQoSUNVVkVSUzolPSQoQkxEKS9yJS8kKFNfQkxEKSkKK1JJQ1VTPSQoSUNVVkVSUzolPSQoSU5TKS9yJS8kKFNfSU5TKSkKK0lJQ1VTPSQoSUNVVkVSUzolPSQoSU5TKS8lLyQoU19JTlMpKSAkKFJJQ1VTKQorCisKK0FQUkVDSU9VUz0kKElDVVZFUlM6JT0kKEJMRCkvJS8kKFNfU1JDKSkgJChJQ1VWRVJTOiU9JChCTEQpL3IlLyQoU19TUkMpKSAkKElDVVZFUlM6JT0kKEJMRCkvJS8kKFNfQkxEKSkgJChJQ1VWRVJTOiU9JChJTlMpLyUvJChTX0lOUykpICQoSUNVVkVSUzolPSQoQkxEKS9yJS8kKFNfQkxEKSkgJChJQ1VWRVJTOiU9JChJTlMpL3IlLyQoU19JTlMpKQorCisuUFJFQ0lPVVM6ICQoQVBSRUNJT1VTKQorCit0ZWhwcmVjaW91czoKKwllY2hvICQoQVBSRUNJT1VTKQorCiskKE1fVE1QKSAkKEJMRCkgJChJTlMpOgorCW1rZGlyICQoTV9UTVApCisJbWtkaXIgJChCTEQpICQoU1JDKSAgJChJTlMpCisKKyQoSU5TKS8lLyQoU19JTlMpOiAkKEJMRCkvJS8kKFNfQkxEKQorCUBpZiBbIC1mICQoQkxEKS8kKi9idWlsZC5lcnIgXTsgdGhlbiBlY2hvICcjIyMnIEVycm9yIGZvciAkKiBzdG9yZWQgaW4gJChCTEQpLyQqL2J1aWxkLmVyciAtIHJlbW92ZSBpZiB5b3Ugd2FudCBtZSB0byByZXRyeTsgZmFsc2U7ICBmaQorCSggbWFrZSAkKE1BS0VfT1BUUykgLUMgJChCTEQpLyQqL2ljdS9zb3VyY2UgMj4mMSBhbGwgaW5zdGFsbCB8IHRlZSAkKEJMRCkvJCovYnVpbGQubG9nICkgfHwgKCBtdiAkKEJMRCkvJCovYnVpbGQubG9nICQoQkxEKS8kKi9idWlsZC5lcnIgOyBmYWxzZSApCisJdG91Y2ggLWMgJEAKKworJChJTlMpL3IlLyQoU19JTlMpOiAkKEJMRCkvciUvJChTX0JMRCkKKwlAaWYgWyAtZiAkKEJMRCkvciQqL2J1aWxkLmVyciBdOyB0aGVuIGVjaG8gJyMjIycgRXJyb3IgZm9yICQqIHN0b3JlZCBpbiAkKEJMRCkvciQqL2J1aWxkLmVyciAtIHJlbW92ZSBpZiB5b3Ugd2FudCBtZSB0byByZXRyeTsgZmFsc2U7ICBmaQorCSggbWFrZSAkKE1BS0VfT1BUUykgLUMgJChCTEQpL3IkKi9pY3Uvc291cmNlIDI+JjEgYWxsIGluc3RhbGwgfCB0ZWUgJChCTEQpL3IkKi9idWlsZC5sb2cgKSB8fCAoIG12ICQoQkxEKS9yJCovYnVpbGQubG9nICQoQkxEKS9yJCovYnVpbGQuZXJyIDsgZmFsc2UgKQorCXRvdWNoIC1jICRACisKKyQoQkxEKS9yJS8kKFNfU1JDKTogJChJQ1VTKS9pY3U0Yy0lLXNyYy50Z3oKKwktbXYgJChCTEQpL3IkKiAkKEJMRCkvciQqLm9sZAorCS0oIHJtIC1yZiAuLyQoQkxEKS9yJCoub2xkJiApCisJbWtkaXIgLXAgJChCTEQpL3IkKgorCSggY2QgJChCTEQpL3IkKiA7IGd1bnppcCAtZCA8ICReIHwgdGFyIHhmcCAtICkKKwkoWyAtZiAkKERPVCkvcGF0Y2gvJCogXSAmJiBwYXRjaCAtZCAkKEJMRCkvciQqIC1wMSA8ICQoRE9UKS9wYXRjaC8kKikgfHwgdHJ1ZQorCXRvdWNoIC1jICRACisKKyQoQkxEKS8lLyQoU19TUkMpOiAkKElDVVMpL2ljdTRjLSUtc3JjLnRnegorCS1tdiAkKEJMRCkvJCogJChCTEQpLyQqLm9sZAorCS0oIHJtIC1yZiAuLyQoQkxEKS8kKi5vbGQmICkKKwlta2RpciAtcCAkKEJMRCkvJCoKKwkoIGNkICQoQkxEKS8kKiA7IGd1bnppcCAtZCA8ICReIHwgdGFyIHhmcCAtICkKKwkoWyAtZiAkKERPVCkvcGF0Y2gvJCogXSAmJiBwYXRjaCAtZCAkKEJMRCkvJCogLXAxIDwgJChET1QpL3BhdGNoLyQqKSB8fCB0cnVlCisJdG91Y2ggLWMgJEAKKworCiskKEJMRCkvciUvJChTX0JMRCk6ICQoQkxEKS9yJS8kKFNfU1JDKQorCS1ta2RpciAtcCAkKElOUykKKwktY2htb2QgYStyeCAkKEJMRCkvciQqL2ljdS9zb3VyY2UvY29uZmlndXJlICQoQkxEKS9yJCovaWN1L3NvdXJjZS9ydW5Db25maWd1cmVJQ1UKKwkoIGNkICQoQkxEKS9yJCovaWN1L3NvdXJjZSA7IGVudiBDUFBGTEFHUz0iJChYVFJBX1JJQ1VfQ1BQRkxBR1MpIiBgJChJQ1VDT05GKSAiJChCTEQpL3IkKi9pY3Uvc291cmNlIiAiJCoiYCAtLWVuYWJsZS1yZW5hbWluZyAtLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxlYXNlIC0tZGlzYWJsZS1kZWJ1ZyAtLXByZWZpeD0kKElOUykvciQqICkKKwl0b3VjaCAtYyAkQAorCiskKEJMRCkvJS8kKFNfQkxEKTogJChCTEQpLyUvJChTX1NSQykKKwktbWtkaXIgLXAgJChJTlMpCisJLWNobW9kIGErcnggJChCTEQpLyQqL2ljdS9zb3VyY2UvY29uZmlndXJlICQoQkxEKS8kKi9pY3Uvc291cmNlL3J1bkNvbmZpZ3VyZUlDVQorCSggY2QgJChCTEQpLyQqL2ljdS9zb3VyY2UgOyBlbnYgQ1BQRkxBR1M9IiQoWFRSQV9JQ1VfQ1BQRkxBR1MpIiBgJChJQ1VDT05GKSAiJChCTEQpLyQqL2ljdS9zb3VyY2UiICIkKiJgIC0tZGlzYWJsZS1yZW5hbWluZyAtLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxlYXNlIC0tZGlzYWJsZS1kZWJ1ZyAtLXByZWZpeD0kKElOUykvJCogKQorCXRvdWNoIC1jICRACisKKworJChJTlMpLyUvYmluLyQoVEFSR0VUKTogJChJTlMpLyUvJChTX0lOUykgJChTUkNTKQorIyAJRG9uJ3QgZGVsZXRlIHRoZSBidWlsdCB2ZXJzaW9uLgorIwktcm0gLXJmIC4vJChCTEQpLyQqL3RtcAorCW1rZGlyIC4vJChCTEQpLyQqL3RtcAorCUBmb3IgZmlsZSBpbiAkKE9CSkVDVFMpOyBcCisJZG8gXAorCQl3aGF0PWBiYXNlbmFtZSAkJGZpbGUgLm9gIDsgXAorCQllY2hvIGNvbXBpbGluZyAkKi8kJHdoYXQgOyBcCisJCWVjaG8gJChDWFgpIC1jIC1vIC4vJChCTEQpLyQqL3RtcC8kJHdoYXQubyAkJHdoYXQuY3BwIC1JICQoSU5TKS8kKi9pbmNsdWRlIC1JICQoQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsIDsgXAorCQkkKENYWCkgLWMgLW8gLi8kKEJMRCkvJCovdG1wLyQkd2hhdC5vICQkd2hhdC5jcHAgLUkgJChJTlMpLyQqL2luY2x1ZGUgLUkgJChCTEQpLyQqL2ljdS9zb3VyY2UvdG9vbHMvdG9vbHV0aWwgOyBcCisJZG9uZQorCSQoQ1hYKSAtbyAkQCAkKE9CSkVDVFM6JS5vPS4vJChCTEQpLyQqL3RtcC8lLm8pICAtbGljdWRhdGEgLWxpY3V1YyAtbGljdXR1IC1saWN1aTE4biAtTCQoSU5TKS8kKi9saWIgCisKK2ZvbzoKKwllY2hvICQoQUxMSUNVUykKKworYWxsaWN1czogJChCTEQpICQoQUxMSUNVUykKKworCithbGwtaWN1czogaWljdXMKKworaWljdXM6ICQoQkxEKSAkKElJQ1VTKQorCityaWN1czogJChSSUNVUykKZGlmZiAtLWdpdCBhL211bHRpL2MvTWFrZWZpbGUtYy5pbmMgYi9tdWx0aS9jL01ha2VmaWxlLWMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNGVkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9jL01ha2VmaWxlLWMuaW5jCkBAIC0wLDAgKzEsNTAgQEAKKyMgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitpbmNsdWRlICQoTVVMVElDVV9ST09UKS9jb21tb24vTWFrZWZpbGUtbXVsdGkuaW5jCisKK0NfR09PRDo9JChzaGVsbCBbIC1kICQoQ19JTlMpIF0gJiYgKGNkICQoQ19JTlMpIDsgbHMgLWQgKi8kKFNfSU5TKSAyPi9kZXYvbnVsbCB8IGN1dCAtZC8gLWYxKSkKK0NfUkVMOj0kKHNoZWxsIFsgLWQgJChDX0lOUykgXSAmJiAoY2QgJChDX0lOUykgOyBscyAtZCByKi8kKFNfSU5TKSAyPi9kZXYvbnVsbCB8IGN1dCAtZC8gLWYxKSkKKworQ19DTEVBTl9UQVJHRVQ9JChDX0dPT0Q6JT0kKENfSU5TKS8lL2Jpbi8kKFRBUkdFVCkpCisKK1NPVVJDRVM9JChDX1NPVVJDRVMpICQoQ1hYX1NPVVJDRVMpCitDX09CSkVDVFM9JChDX1NPVVJDRVM6JS5jPSUubykKK0NYWF9PQkpFQ1RTPSQoQ1hYX1NPVVJDRVM6JS5jcHA9JS5vKQorT0JKRUNUUz0kKENfT0JKRUNUUykgJChDWFhfT0JKRUNUUykKKyNERUJVR09QVD0tZworCisjIGxpc3Qgb2YgSUNVcyB0byBiZSBidWlsdAkKK0lDVV9UQVJCQUxMUz0kKHNoZWxsIGNkICQoSUNVUykgOyBscyBpY3U0Yy0qLXNyYy50Z3opCisjIGxpc3Qgb2YgdmVyc2lvbnMgKCBmb3JtICIzXzggIDRfMCIgZXRjLiApCitJQ1VfVEFSQkFMTFNfVkVSUz0kKElDVV9UQVJCQUxMUzppY3U0Yy0lLXNyYy50Z3o9JSkKKworCiskKENfSU5TKS8lL2Jpbi8kKFRBUkdFVCk6CSQoU09VUkNFUykgJChIRUFERVJTKQorCS1ybSAtcmYgJChDX0lOUykvJCovdG1wCisJbWtkaXIgJChDX0lOUykvJCovdG1wCitpZm5lcSAoLCQoQ1hYX09CSkVDVFMpKQorCUBmb3IgZmlsZSBpbiAkKENYWF9PQkpFQ1RTKTsgXAorCWRvIFwKKwkJd2hhdD1gYmFzZW5hbWUgJCRmaWxlIC5vYCA7IFwKKwkJZWNobyB0b29scz0kKENfQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsIDsgXAorCQllY2hvIGNvbXBpbGluZyAnKEMrKyknICQqLyQkd2hhdCA7IFwKKwkJZWNobyBgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1jeHhgIGAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWN4eGZsYWdzYCAkKERFQlVHT1BUKSAgLWMgLW8gJChDX0lOUykvJCovdG1wLyQkd2hhdC5vICQkd2hhdC5jcHAgLUkgJChDX0lOUykvJCovaW5jbHVkZSAtSSAkKENfQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsIDsgXAorCQlgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1jeHhgIGAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWN4eGZsYWdzYCAkKERFQlVHT1BUKSAgLWMgLW8gJChDX0lOUykvJCovdG1wLyQkd2hhdC5vICQkd2hhdC5jcHAgLUkgJChDX0lOUykvJCovaW5jbHVkZSAtSSAkKENfQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsICB8fCBcCisJCSQoQ1hYKSAkKERFQlVHT1BUKSAtYyAtbyAkKENfSU5TKS8kKi90bXAvJCR3aGF0Lm8gJCR7d2hhdH0uY3BwIC1JICQoQ19JTlMpLyQqL2luY2x1ZGUgLUkgJChDX0JMRCkvJCovaWN1L3NvdXJjZS90b29scy90b29sdXRpbCA7IFwKKwlkb25lCitlbmRpZgoraWZuZXEgKCwkKENfT0JKRUNUUykpCisJQGZvciBmaWxlIGluICQoQ19PQkpFQ1RTKTsgXAorCWRvIFwKKwkJd2hhdD1gYmFzZW5hbWUgJCRmaWxlIC5vYCA7IFwKKwkJZWNobyBjb21waWxpbmcgJyhDICApJyAkKi8kJHdoYXQgOyBcCisJCSQoQ0MpICQoREVCVUdPUFQpIC1jIC1vICQoQ19JTlMpLyQqL3RtcC8kJHdoYXQubyAkJHt3aGF0fS5jIC1JICQoQ19JTlMpLyQqL2luY2x1ZGUgLUkgJChDX0JMRCkvJCovaWN1L3NvdXJjZS90b29scy90b29sdXRpbCA7IFwKKwlkb25lCitlbmRpZgorCUBlY2hvIGxpbmtpbmcgJCovJCR3aGF0CisJQGVjaG8gYCQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0tY3h4YCBgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1sZGZsYWdzIGAgICQoREVCVUdPUFQpIC1vICRAICQoT0JKRUNUUzolLm89JChDX0lOUykvJCovdG1wLyUubykgIC1saWN1ZGF0YSAtbGljdXVjIC1saWN1dHUgLWxpY3VpMThuIC1saWN1aW8gLUwkKENfSU5TKS8kKi9saWIKKwlAYCQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0tY3h4YCAtV2wsLS12ZXJib3NlIGAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWxkZmxhZ3MgYCAgJChERUJVR09QVCkgLW8gJEAgJChPQkpFQ1RTOiUubz0kKENfSU5TKS8kKi90bXAvJS5vKSAgLWxpY3VkYXRhIC1saWN1dWMgLWxpY3V0dSAtbGljdWkxOG4gLWxpY3VpbyAtTCQoQ19JTlMpLyQqL2xpYiB8fCBcCisJICQoQ1hYKSAkKERFQlVHT1BUKSAtbyAkQCAkKE9CSkVDVFM6JS5vPSQoQ19JTlMpLyQqL3RtcC8lLm8pICAtbGljdWRhdGEgLWxpY3V1YyAtbGljdXR1IC1saWN1aTE4biAtbGljdWlvIC1MJChDX0lOUykvJCovbGliIAorCisKZGlmZiAtLWdpdCBhL211bHRpL2Mvb2xkLWljdS50eHQgYi9tdWx0aS9jL29sZC1pY3UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjdlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9jL29sZC1pY3UudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgYSBsaXN0IG9mIElDVTRDcyB0b28gb2xkIHRvIGJ1aWxkIHdpdGggdGhlIGN1cnJlbnQgcGF0Y2hzZXQuCmRpZmYgLS1naXQgYS9tdWx0aS9jL3BhdGNoLzNfMCBiL211bHRpL2MvcGF0Y2gvM18wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzM4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9jL3BhdGNoLzNfMApAQCAtMCwwICsxLDEyNzc1IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitPbmx5IGluIDNfMC9pY3Uvc291cmNlOiBiaW4KK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmRlZnMuaAorZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luIDNfMC9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4KKy0tLSAzXzAub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4JMjAwOC0xMC0yMCAxNDo1Nzo1Mi4wMDAwMDAwMDAgLTA3MDAKKysrKyAzXzAvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luCTIwMDgtMTAtMjAgMTU6NTc6MjguMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNiArMTUsOCBAQAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKyBHRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisgR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobworK0dFTl9ERVBTLmNjPQllY2hvCisgCisgIyMgQ29tbWFuZHMgdG8gY29tcGlsZQorIENPTVBJTEUuYz0JJChDQykgJChERUZTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWZuby1jb21tb24gLWMKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmNhY2hlCitPbmx5IGluIDNfMC5vcmlnL2ljdS9zb3VyY2U6IGNvbmZpZy5sb2cKK2RpZmYgLXJ1IDNfMC5vcmlnL2ljdS9zb3VyY2UvY29uZmlndXJlIDNfMC9pY3Uvc291cmNlL2NvbmZpZ3VyZQorLS0tIDNfMC5vcmlnL2ljdS9zb3VyY2UvY29uZmlndXJlCTIwMDgtMTAtMjAgMTQ6NTg6MTAuMDAwMDAwMDAwIC0wNzAwCisrKysgM18wL2ljdS9zb3VyY2UvY29uZmlndXJlCTIwMDgtMTAtMjAgMTU6NTQ6NDYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw2NSArMSw4MjIgQEAKKyAjISAvYmluL3NoCistCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIAorLSMgQ29weXJpZ2h0IChDKSAxOTkyLCA5MywgOTQsIDk1LCA5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4KKyAjCisrIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKysgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKworKworKyMgUEFUSCBuZWVkcyBDUgorKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKythc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKythc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKythc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKythc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCisrYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisrCisrYXNfbmw9JworKycKKytleHBvcnQgYXNfbmwKKysjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKytpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisrICBhc19lY2hvX249J3ByaW50ZiAlcycKKytlbHNlCisrICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKysgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKysgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworKyAgZWxzZQorKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorKyAgICAgIGFyZz0kMTsKKysgICAgICBjYXNlICRhcmcgaW4KKysgICAgICAqIiRhc19ubCIqKQorKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKysJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKysgICAgICBlc2FjOworKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKysgICAgJworKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKysgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKysgIGZpCisrICBleHBvcnQgYXNfZWNob19ib2R5CisrICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCisrZmkKKysKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgUEFUSF9TRVBBUkFUT1I9OgorKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgfQorK2ZpCisrCisrIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc191bnNldD11bnNldAorK2Vsc2UKKysgIGFzX3Vuc2V0PWZhbHNlCisrZmkKKysKKysKKysjIElGUworKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisrIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisrIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisrIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorK0lGUz0iICIiCSRhc19ubCIKKysKKysjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorK2Nhc2UgJDAgaW4KKysgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKysgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICAgICA7OworK2VzYWMKKysjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisrIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorKyAgYXNfbXlzZWxmPSQwCisrZmkKKytpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKytmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICisrZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytkb25lCisrUFMxPSckICcKKytQUzI9Jz4gJworK1BTND0nKyAnCisrCisrIyBOTFMgbnVpc2FuY2VzLgorK0xDX0FMTD1DCisrZXhwb3J0IExDX0FMTAorK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UKKysKKysjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisrICBhc19iYXNlbmFtZT1iYXNlbmFtZQorK2Vsc2UKKysgIGFzX2Jhc2VuYW1lPWZhbHNlCisrZmkKKysKKysKKysjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCisrYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisrJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyskYXNfZWNobyBYLyIkMCIgfAorKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrCisrIyBDRFBBVEguCisrJGFzX3Vuc2V0IENEUEFUSAorKworKworK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKysgIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisrZWxzZQorKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworK2ZpCisrCisrICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmCSAoZXZhbCAiOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT1cJExJTkVOTworKyAgYXNfbGluZW5vXzI9XCRMSU5FTk8KKysgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysiKSAyPiAvZGV2L251bGw7IHRoZW4KKysgIDoKKytlbHNlCisrICBhc19jYW5kaWRhdGVfc2hlbGxzPQorKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgY2FzZSAkYXNfZGlyIGluCisrCSAvKikKKysJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9IiRhc19jYW5kaWRhdGVfc2hlbGxzICRhc19kaXIvJGFzX2Jhc2UiCisrCSAgIGRvbmU7OworKyAgICAgICBlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKysgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworKwkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorKwkgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisrCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrX0FTRU9GCisrfTsgdGhlbgorKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAorKwkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKysJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrKGFzX2Z1bmNfcmV0dXJuICgpIHsKKysgIChleGl0ICQxKQorK30KKythc19mdW5jX3N1Y2Nlc3MgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMAorK30KKythc19mdW5jX2ZhaWx1cmUgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMQorK30KKythc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKysgIHJldHVybiAwCisrfQorK2FzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworKyAgcmV0dXJuIDEKKyt9CisrCisrZXhpdGNvZGU9MAorK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9ICIkMSIgKTsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorK2ZpCisrCisrdGVzdCAkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT0kTElORU5PCisrICBhc19saW5lbm9fMj0kTElORU5PCisrICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworK19BU0VPRgorK307IHRoZW4KKysgIGJyZWFrCisrZmkKKysKKytmaQorKworKyAgICAgIGRvbmUKKysKKysgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgorKyAgZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYKKysJZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysJZG9uZQorKwlleHBvcnQgQ09ORklHX1NIRUxMCisrCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKytmaQorKworKworKyAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KKysgIGVjaG8gVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCB0aGUKKysgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCisrICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorKyAgICAgIGVjaG8gc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLgorKyAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisrCisrZmkKKysKKytmaQorKworKworKworKyhldmFsICJhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgeworKyAgZWNobyBObyBzaGVsbCBmb3VuZCB0aGF0IHN1cHBvcnRzIHNoZWxsIGZ1bmN0aW9ucy4KKysgIGVjaG8gUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCisrICBlY2hvIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuCisrICBlY2hvIFRoaXMgY2FuIGhlbHAgdXMgaW1wcm92ZSBmdXR1cmUgYXV0b2NvbmYgdmVyc2lvbnMuCisrICBlY2hvIENvbmZpZ3VyYXRpb24gd2lsbCBub3cgcHJvY2VlZCB3aXRob3V0IHNoZWxsIGZ1bmN0aW9ucy4KKyt9CisrCisrCisrCisrICBhc19saW5lbm9fMT0kTElORU5PCisrICBhc19saW5lbm9fMj0kTElORU5PCisrICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgeworKworKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworKyAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorKyAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCisrICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorKyAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcworKyAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorKyAgIyBjYXNlIGF0IGxpbmUgZW5kLgorKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisrICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKysgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisrICBzZWQgLW4gJworKyAgICBwCisrICAgIC9bJF1MSU5FTk8vPQorKyAgJyA8JGFzX215c2VsZiB8CisrICAgIHNlZCAnCisrICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKysgICAgICB0IGxpbmVubworKyAgICAgIGIKKysgICAgICA6bGluZW5vCisrICAgICAgTgorKyAgICAgIDpsb29wCisrICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisrICAgICAgdCBsb29wCisrICAgICAgcy8tXG4uKi8vCisrICAgICcgPiRhc19tZS5saW5lbm8gJiYKKysgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCisrICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisrICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorKyAgLiAiLi8kYXNfbWUubGluZW5vIgorKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisrICBleGl0CisrfQorKworKworK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfZGlybmFtZT1kaXJuYW1lCisrZWxzZQorKyAgYXNfZGlybmFtZT1mYWxzZQorK2ZpCisrCisrRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKytjYXNlIGBlY2hvIC1uIHhgIGluCisrLW4qKQorKyAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKysgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorKyAgKikgICBFQ0hPX0M9J1xjJzs7CisrICBlc2FjOzsKKysqKQorKyAgRUNIT19OPSctbic7OworK2VzYWMKKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorK2Vsc2UKKysgIHJtIC1mIGNvbmYkJC5kaXIKKysgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKytmaQorK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKysgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgICBhc19sbl9zPSdsbiAtcycKKysgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKysgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisrICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisrICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgICBhc19sbl9zPSdjcCAtcCcKKysgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICAgIGFzX2xuX3M9bG4KKysgIGVsc2UKKysgICAgYXNfbG5fcz0nY3AgLXAnCisrICBmaQorK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wJworK2ZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKysKKytpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19ta2Rpcl9wPToKKytlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorKyAgYXNfbWtkaXJfcD1mYWxzZQorK2ZpCisgCistIyBEZWZhdWx0czoKKy1hY19oZWxwPQorK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysJdGVzdCAtZCAiJDEvLiI7CisrICAgICAgZWxzZQorKwljYXNlICQxIGluCisrCS0qKXNldCAiLi8kMSI7OworKwllc2FjOworKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisrICAgICdcJycgc2gKKysgICcKKytmaQorK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisrCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisrCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKysKKysKKysKKytleGVjIDc8JjAgPC9kZXYvbnVsbCA2PiYxCisrCisrIyBOYW1lIG9mIHRoZSBob3N0LgorKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisrIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCisrYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisrCisrIworKyMgSW5pdGlhbGl6YXRpb25zLgorKyMKKyBhY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCistIyBBbnkgYWRkaXRpb25zIGZyb20gY29uZmlndXJlLmluOgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS1zdHJpY3QgICAgICAgICBjb21waWxlIHdpdGggc3RyaWN0IGNvbXBpbGVyIG9wdGlvbnMgW2RlZmF1bHQ9bm9dIgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXNoYXJlZCAgICAgICAgIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtc3RhdGljICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXJlbGVhc2UgICAgICAgIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXJlbmFtaW5nICAgICAgIGFkZCBhIHZlcnNpb24gc3VmZml4IHRvIHN5bWJvbHMgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtcnBhdGggICAgICAgICAgdXNlIHJwYXRoIHdoZW4gbGlua2luZyBbZGVmYXVsdCBpcyBvbmx5IGlmIG5lY2Vzc2FyeV0iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXRocmVhZHMgICAgICAgIGJ1aWxkIElDVSB3aXRoIHRocmVhZCBzYWZldHkgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS13aXRoLWlvc3RyZWFtPXZlcnNpb24gc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBpb3N0cmVhbSB0byB1c2UgKG5vbmUsIG9sZCwgc3RkLCBhdXRvKSBbZGVmYXVsdD1hdXRvXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBbZGVmYXVsdD15ZXNdIgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS1pY3VpbyAgICAgICAgICBidWlsZCBJQ1UncyBpY3VpbyBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLWxheW91dCAgICAgICAgIGJ1aWxkIElDVSdzIGxheW91dCBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0td2l0aC1kYXRhLXBhY2thZ2luZz10eXBlIHNwZWNpZnkgaG93IHRvIHBhY2thZ2UgSUNVIGRhdGEgKGZpbGVzLCBhcmNoaXZlLCBsaWJyYXJ5LCBhdXRvKSBbZGVmYXVsdD1hdXRvXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS13aXRoLWxpYnJhcnktc3VmZml4PXN1ZmZpeCAgICB0YWcgYSBzdWZmaXggdG8gdGhlIGxpYnJhcnkgbmFtZXMgW2RlZmF1bHQ9XSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtdGVzdHMgICAgICAgICAgYnVpbGQgSUNVIHRlc3RzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXNhbXBsZXMgICAgICAgIGJ1aWxkIElDVSBzYW1wbGVzIFtkZWZhdWx0PXllc10gIAorLUFkZGl0aW9uYWxseSwgdGhlIHZhcmlhYmxlIEZPUkNFX0xJQlMgbWF5IGJlIHNldCBiZWZvcmUgY2FsbGluZyBjb25maWd1cmUuIElmIHNldCwgaXQgd2lsbCBSRVBMQUNFIGFueSBhdXRvbWF0aWMgbGlzdCBvZiBsaWJyYXJpZXMuIgorK2FjX2NsZWFuX2ZpbGVzPQorK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KKytMSUJPQkpTPQorK2Nyb3NzX2NvbXBpbGluZz1ubworK3N1YmRpcnM9CisrTUZMQUdTPQorK01BS0VGTEFHUz0KKytTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorKworKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorK1BBQ0tBR0VfTkFNRT0KKytQQUNLQUdFX1RBUk5BTUU9CisrUEFDS0FHRV9WRVJTSU9OPQorK1BBQ0tBR0VfU1RSSU5HPQorK1BBQ0tBR0VfQlVHUkVQT1JUPQorKworK2FjX3VuaXF1ZV9maWxlPSJjb21tb24vdW5pY29kZS91dHlwZXMuaCIKKysjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCisrYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisrIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisrIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNlbmRpZgorKyNpZmRlZiBTVERDX0hFQURFUlMKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisrI2Vsc2UKKysjIGlmZGVmIEhBVkVfU1RETElCX0gKKysjICBpbmNsdWRlIDxzdGRsaWIuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfU1RSSU5HX0gKKysjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKysjICBpbmNsdWRlIDxtZW1vcnkuaD4KKysjIGVuZGlmCisrIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1NURElOVF9ICisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9VTklTVERfSAorKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmIgorKworK2FjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworK0xJQk9CSlMKKytBSVhfU0hMSUIKKytsZF9ycGF0aF9zdWYKKytwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50CisrcGxhdGZvcm1fbWFrZV9mcmFnbWVudF9uYW1lCisrcGxhdGZvcm0KKytJQ1VEQVRBX0NIQVIKKytTQU1QTEVTX1RSVUUKKytURVNUU19UUlVFCisrSUNVTElCU1VGRklYQ05BTUUKKytVX0hBVkVfTElCX1NVRkZJWAorK0lDVUxJQlNVRkZJWAorK0RBVEFfUEFDS0FHSU5HX01PREUKKytEQVRBX1BBQ0tBR0lOR19DUFBGTEFHUworK3RoZXBrZ2ljdWRhdGFkaXIKKytwa2dpY3VkYXRhZGlyCisrdGhlbGliZGlyCisrdGhlZGF0YWRpcgorK3RoZXN5c2NvbmZkaXIKKytMQVlPVVRfVFJVRQorK0lDVUlPX1RSVUUKKytFWFRSQVNfVFJVRQorK1VfU0laRU9GX1dDSEFSX1QKKytVX0hBVkVfV0NTQ1BZCisrVV9IQVZFX1dDSEFSX0gKKytIQVZFX1VJTlQ2NF9UCisrSEFWRV9JTlQ2NF9UCisrSEFWRV9VSU5UMzJfVAorK0hBVkVfSU5UMzJfVAorK0hBVkVfVUlOVDE2X1QKKytIQVZFX0lOVDE2X1QKKytIQVZFX1VJTlQ4X1QKKytIQVZFX0lOVDhfVAorK1VfVElNRVpPTkUKKytVX0hBVkVfVElNRVpPTkUKKytVX1RaTkFNRQorK1VfVFpTRVQKKytVX0hBVkVfUE9QRU4KKytVX0hBVkVfUExBQ0VNRU5UX05FVworK1VfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT04KKytVX0hBVkVfTkFNRVNQQUNFCisrVV9OTF9MQU5HSU5GT19DT0RFU0VUCisrVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQKKytVX0hBVkVfTkxfTEFOR0lORk8KKytVX0lTX0JJR19FTkRJQU4KKytVX0lPU1RSRUFNX1NPVVJDRQorK0NYWENQUAorK1VfSEFWRV9JTlRUWVBFU19ICisrRUdSRVAKKytHUkVQCisrQ1BQCisrR0VOQ0NPREVfQVNTRU1CTFkKKytIQVZFX01NQVAKKytJQ1VfVVNFX1RIUkVBRFMKKytUSFJFQURTX1RSVUUKKytVX0lOTElORQorK0VOQUJMRV9SUEFUSAorK1VfRU5BQkxFX1RSQUNJTkcKKytVX0RJU0FCTEVfUkVOQU1JTkcKKytBUgorK1JBTkxJQgorK0VOQUJMRV9SRUxFQVNFCisrRU5BQkxFX0RFQlVHCisrRU5BQkxFX1NUQVRJQworK0VOQUJMRV9TSEFSRUQKKytMSUJfTQorK0NPTVBJTEVfTElOS19FTlZWQVIKKytBUkZMQUdTCisraG9zdF9vcworK2hvc3RfdmVuZG9yCisraG9zdF9jcHUKKytob3N0CisrYnVpbGRfb3MKKytidWlsZF92ZW5kb3IKKytidWlsZF9jcHUKKytidWlsZAorK0RPWFlHRU4KKytVX01BS0UKKytTVFJJUAorK0lOU1RBTExfREFUQQorK0lOU1RBTExfU0NSSVBUCisrSU5TVEFMTF9QUk9HUkFNCisrYWNfY3RfQ1hYCisrQ1hYRkxBR1MKKytDWFgKKytPQkpFWFQKKytFWEVFWFQKKythY19jdF9DQworK0xERkxBR1MKKytDRkxBR1MKKytDQworK0NQUEZMQUdTCisrVU5JQ09ERV9WRVJTSU9OCisrTElCX1ZFUlNJT05fTUFKT1IKKytMSUJfVkVSU0lPTgorK1ZFUlNJT04KKytQQUNLQUdFCisrdGFyZ2V0X2FsaWFzCisraG9zdF9hbGlhcworK2J1aWxkX2FsaWFzCisrTElCUworK0VDSE9fVAorK0VDSE9fTgorK0VDSE9fQworK0RFRlMKKyttYW5kaXIKKytsb2NhbGVkaXIKKytsaWJkaXIKKytwc2RpcgorK3BkZmRpcgorK2R2aWRpcgorK2h0bWxkaXIKKytpbmZvZGlyCisrZG9jZGlyCisrb2xkaW5jbHVkZWRpcgorK2luY2x1ZGVkaXIKKytsb2NhbHN0YXRlZGlyCisrc2hhcmVkc3RhdGVkaXIKKytzeXNjb25mZGlyCisrZGF0YWRpcgorK2RhdGFyb290ZGlyCisrbGliZXhlY2RpcgorK3NiaW5kaXIKKytiaW5kaXIKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCisrcHJlZml4CisrZXhlY19wcmVmaXgKKytQQUNLQUdFX0JVR1JFUE9SVAorK1BBQ0tBR0VfU1RSSU5HCisrUEFDS0FHRV9WRVJTSU9OCisrUEFDS0FHRV9UQVJOQU1FCisrUEFDS0FHRV9OQU1FCisrUEFUSF9TRVBBUkFUT1IKKytTSEVMTCcKKythY19zdWJzdF9maWxlcz0nJworK2FjX3VzZXJfb3B0cz0nCisrZW5hYmxlX29wdGlvbl9jaGVja2luZworK2VuYWJsZV9zdHJpY3QKKytlbmFibGVfNjRiaXRfbGlicworK2VuYWJsZV9zaGFyZWQKKytlbmFibGVfc3RhdGljCisrZW5hYmxlX2RlYnVnCisrZW5hYmxlX3JlbGVhc2UKKytlbmFibGVfcmVuYW1pbmcKKytlbmFibGVfdHJhY2luZworK2VuYWJsZV9ycGF0aAorK2VuYWJsZV90aHJlYWRzCisrd2l0aF9pb3N0cmVhbQorK2VuYWJsZV9leHRyYXMKKytlbmFibGVfbGF5b3V0Cisrd2l0aF9kYXRhX3BhY2thZ2luZworK2VuYWJsZV9tYXBwZWQKKyt3aXRoX2xpYnJhcnlfc3VmZml4CisrZW5hYmxlX3Rlc3RzCisrZW5hYmxlX3NhbXBsZXMKKysnCisrICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKKytob3N0X2FsaWFzCisrdGFyZ2V0X2FsaWFzCisrQ0MKKytDRkxBR1MKKytMREZMQUdTCisrTElCUworK0NQUEZMQUdTCisrQ1hYCisrQ1hYRkxBR1MKKytDQ0MKKytDUFAKKytDWFhDUFAnCisrCisgCisgIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorK2FjX2luaXRfaGVscD0KKythY19pbml0X3ZlcnNpb249ZmFsc2UKKythY191bnJlY29nbml6ZWRfb3B0cz0KKythY191bnJlY29nbml6ZWRfc2VwPQorICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisgIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorLWJ1aWxkPU5PTkUKKy1jYWNoZV9maWxlPS4vY29uZmlnLmNhY2hlCisrY2FjaGVfZmlsZT0vZGV2L251bGwKKyBleGVjX3ByZWZpeD1OT05FCistaG9zdD1OT05FCisgbm9fY3JlYXRlPQorLW5vbm9wdD1OT05FCisgbm9fcmVjdXJzaW9uPQorIHByZWZpeD1OT05FCisgcHJvZ3JhbV9wcmVmaXg9Tk9ORQorQEAgLTY4LDk0ICs4MjUsMTMzIEBACisgc2lsZW50PQorIHNpdGU9Cisgc3JjZGlyPQorLXRhcmdldD1OT05FCisgdmVyYm9zZT0KKyB4X2luY2x1ZGVzPU5PTkUKKyB4X2xpYnJhcmllcz1OT05FCisrCisrIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisrIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisrIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKysjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisrIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKysjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCisgYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKKyBsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworLWRhdGFkaXI9JyR7cHJlZml4fS9zaGFyZScKKytkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9JworIHN5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCisgc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCisgbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKKy1saWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKKyBpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKKyBvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCistaW5mb2Rpcj0nJHtwcmVmaXh9L2luZm8nCistbWFuZGlyPScke3ByZWZpeH0vbWFuJworLQorLSMgSW5pdGlhbGl6ZSBzb21lIG90aGVyIHZhcmlhYmxlcy4KKy1zdWJkaXJzPQorLU1GTEFHUz0gTUFLRUZMQUdTPQorLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CistIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgorLWFjX21heF9oZXJlX2xpbmVzPTEyCisrZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfScKKytpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworK2h0bWxkaXI9JyR7ZG9jZGlyfScKKytkdmlkaXI9JyR7ZG9jZGlyfScKKytwZGZkaXI9JyR7ZG9jZGlyfScKKytwc2Rpcj0nJHtkb2NkaXJ9JworK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworIAorIGFjX3ByZXY9CisrYWNfZGFzaGRhc2g9CisgZm9yIGFjX29wdGlvbgorIGRvCistCisgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorLSAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKysgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgICBhY19wcmV2PQorICAgICBjb250aW51ZQorICAgZmkKKyAKKy0gIGNhc2UgIiRhY19vcHRpb24iIGluCistICAtKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRpb24iIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKy0gICopIGFjX29wdGFyZz0gOzsKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworKyAgKikJYWNfb3B0YXJnPXllcyA7OworICAgZXNhYworIAorICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKyAKKy0gIGNhc2UgIiRhY19vcHRpb24iIGluCisrICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKysgIC0tKQorKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKyAKKyAgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgIGFjX3ByZXY9YmluZGlyIDs7CisgICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorLSAgICBiaW5kaXI9IiRhY19vcHRhcmciIDs7CisrICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorLSAgICBhY19wcmV2PWJ1aWxkIDs7CisrICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorLSAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsKKysgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworIAorICAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorLSAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKyAKKy0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorKyAgLS1jb25maWctY2FjaGUgfCAtQykKKysgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKysKKysgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorICAgICBhY19wcmV2PWRhdGFkaXIgOzsKKy0gIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorLSAgfCAtLWRhPSopCistICAgIGRhdGFkaXI9IiRhY19vcHRhcmciIDs7CisrICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisrICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKysgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKysgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCistICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSpkaXNhYmxlLS8vJ2AKKysgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKy0gICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19mZWF0dXJlOiBpbnZhbGlkIGZlYXR1cmUgbmFtZSIgMT4mMjsgZXhpdCAxOyB9CistICAgIGZpCistICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCistICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PW5vIiA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrImVuYWJsZV8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKysJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisrICAgIGVzYWMKKysgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKysKKysgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisrICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisrICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKysgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisrICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisrICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworIAorICAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmVuYWJsZS0vLycgLWUgJ3MvPS4qLy8nYAorKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorLSAgICBmaQorLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorLSAgICAgICo9KikgOzsKKy0gICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysiZW5hYmxlXyRhY191c2Vyb3B0IgorKyIqKSA7OworKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisrCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgICBlc2FjCistICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PSckYWNfb3B0YXJnJyIgOzsKKysgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKyAKKyAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKK0BAIC0xNjQsMTE2ICs5NjAsNzcgQEAKKyAgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorLSAgICBleGVjX3ByZWZpeD0iJGFjX29wdGFyZyIgOzsKKysgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworIAorICAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgIHdpdGhfZ2FzPXllcyA7OworIAorLSAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUpCistICAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorLSAgICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCistICAgIGNhdCA8PCBFT0YKKy1Vc2FnZTogY29uZmlndXJlIFtvcHRpb25zXSBbaG9zdF0KKy1PcHRpb25zOiBbZGVmYXVsdHMgaW4gYnJhY2tldHMgYWZ0ZXIgZGVzY3JpcHRpb25zXQorLUNvbmZpZ3VyYXRpb246CistICAtLWNhY2hlLWZpbGU9RklMRSAgICAgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRQorLSAgLS1oZWxwICAgICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBtZXNzYWdlCistICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworLSAgLS1xdWlldCwgLS1zaWxlbnQgICAgICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCistICAtLXZlcnNpb24gICAgICAgICAgICAgICBwcmludCB0aGUgdmVyc2lvbiBvZiBhdXRvY29uZiB0aGF0IGNyZWF0ZWQgY29uZmlndXJlCistRGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOgorLSAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCistICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorLSAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtzYW1lIGFzIHByZWZpeF0KKy0gIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2Jpbl0KKy0gIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvc2Jpbl0KKy0gIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2xpYmV4ZWNdCistICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCistICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYL3NoYXJlXQorLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvZXRjXQorLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBpbiBESVIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQorLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIGluIERJUiBbUFJFRklYL3Zhcl0KKy0gIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBpbiBESVIgW0VQUkVGSVgvbGliXQorLSAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0KKy0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIGluIERJUiBbL3Vzci9pbmNsdWRlXQorLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL2luZm9dCistICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9tYW5dCistICAtLXNyY2Rpcj1ESVIgICAgICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciAuLl0KKy0gIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistRU9GCistICAgIGNhdCA8PCBFT0YKKy1Ib3N0IHR5cGU6CistICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQorLSAgLS1ob3N0PUhPU1QgICAgICAgICAgICAgY29uZmlndXJlIGZvciBIT1NUIFtndWVzc2VkXQorLSAgLS10YXJnZXQ9VEFSR0VUICAgICAgICAgY29uZmlndXJlIGZvciBUQVJHRVQgW1RBUkdFVD1IT1NUXQorLUZlYXR1cmVzIGFuZCBwYWNrYWdlczoKKy0gIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKy0gIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKy0gIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorLSAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorLSAgLS14LWluY2x1ZGVzPURJUiAgICAgICAgWCBpbmNsdWRlIGZpbGVzIGFyZSBpbiBESVIKKy0gIC0teC1saWJyYXJpZXM9RElSICAgICAgIFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSCistRU9GCistICAgIGlmIHRlc3QgLW4gIiRhY19oZWxwIjsgdGhlbgorLSAgICAgIGVjaG8gIi0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25pemVkOiRhY19oZWxwIgorLSAgICBmaQorLSAgICBleGl0IDAgOzsKKysgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisrICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisrICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCisrICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKysgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKysgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisgCisgICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKy0gICAgYWNfcHJldj1ob3N0IDs7CisrICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKy0gICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKysgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisrCisrICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKysgICAgYWNfcHJldj1odG1sZGlyIDs7CisrICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKysgIHwgLS1odD0qKQorKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKy0gICAgaW5jbHVkZWRpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCistICAgIGluZm9kaXI9IiRhY19vcHRhcmciIDs7CisrICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworIAorICAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKy0gICAgbGliZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworIAorICAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorLSAgICBsaWJleGVjZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKysgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKysgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisrICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCistICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCistICB8IC0tbG9jYWxzIHwgLS1sb2NhbCB8IC0tbG9jYSB8IC0tbG9jIHwgLS1sbykKKysgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisgICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCistICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKy0gIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKy0gICAgbG9jYWxzdGF0ZWRpcj0iJGFjX29wdGFyZyIgOzsKKysgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCistICAgIG1hbmRpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgIHdpdGhfZnA9bm8gOzsKKyAKKyAgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCistICB8IC0tbm8tY3IgfCAtLW5vLWMpCisrICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICAgbm9fY3JlYXRlPXllcyA7OworIAorICAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCitAQCAtMjg3LDI2ICsxMDQ0LDI2IEBACisgICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCistICAgIG9sZGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CisrICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKy0gICAgcHJlZml4PSIkYWNfb3B0YXJnIiA7OworKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworIAorICAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKy0gICAgcHJvZ3JhbV9wcmVmaXg9IiRhY19vcHRhcmciIDs7CisrICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKyAKKyAgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCistICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisgCisgICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCitAQCAtMzIzLDcgKzEwODAsMTcgQEAKKyAgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCistICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9IiRhY19vcHRhcmciIDs7CisrICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworKworKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKysgICAgYWNfcHJldj1wZGZkaXIgOzsKKysgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisrICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorKyAgICBhY19wcmV2PXBzZGlyIDs7CisrICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKysgICAgcHNkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorQEAgLTMzMyw3ICsxMTAwLDcgQEAKKyAgICAgYWNfcHJldj1zYmluZGlyIDs7CisgICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICAgfCAtLXNiaT0qIHwgLS1zYj0qKQorLSAgICBzYmluZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCitAQCAtMzQ0LDU4ICsxMTExLDY5IEBACisgICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgICB8IC0tc2hhPSogfCAtLXNoPSopCistICAgIHNoYXJlZHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgICBhY19wcmV2PXNpdGUgOzsKKyAgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCistICAgIHNpdGU9IiRhY19vcHRhcmciIDs7CisrICAgIHNpdGU9JGFjX29wdGFyZyA7OworIAorICAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCistICAgIHNyY2Rpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCistICAgIHN5c2NvbmZkaXI9IiRhY19vcHRhcmciIDs7CisrICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKy0gICAgYWNfcHJldj10YXJnZXQgOzsKKysgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKy0gICAgdGFyZ2V0PSIkYWNfb3B0YXJnIiA7OworKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworIAorICAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICAgdmVyYm9zZT15ZXMgOzsKKyAKKy0gIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzKQorLSAgICBlY2hvICJjb25maWd1cmUgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKKy0gICAgZXhpdCAwIDs7CisrICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworIAorICAgLXdpdGgtKiB8IC0td2l0aC0qKQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aC0vLycgLWUgJ3MvPS4qLy8nYAorKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCistICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorLSAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKy0gICAgZmkKKy0gICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKy0gICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKy0gICAgICAqPSopIDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrIndpdGhfJGFjX3VzZXJvcHQiCisrIiopIDs7CisrICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisrCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgICBlc2FjCistICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT0nJGFjX29wdGFyZyciIDs7CisrICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworIAorICAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aG91dC0vLydgCisrICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLWEtekEtWjAtOV9dLy9nJ2AiOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorLSAgICBmaQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysid2l0aF8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKysJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisrICAgIGVzYWMKKysgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CisgCisgICAtLXgpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KK0BAIC00MDYsMTY3ICsxMTg0LDczNSBAQAorICAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCistICAgIHhfaW5jbHVkZXM9IiRhY19vcHRhcmciIDs7CisrICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworIAorICAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKy0gICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CisrICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKyAKKy0gIC0qKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19vcHRpb246IGludmFsaWQgb3B0aW9uOyB1c2UgLS1oZWxwIHRvIHNob3cgdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorKyAgLSopIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KKytUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgIDs7CisgCisrICAqPSopCisrICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKysgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorKyAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisrICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisrCisgICAqKQorLSAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfb3B0aW9ufCBzZWQgJ3MvWy1hLXowLTkuXS8vZydgIjsgdGhlbgorLSAgICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogJGFjX29wdGlvbjogaW52YWxpZCBob3N0IHR5cGUiIDE+JjIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAieCRub25vcHQiICE9IHhOT05FOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gb25seSBjb25maWd1cmUgZm9yIG9uZSBob3N0IGFuZCBvbmUgdGFyZ2V0IGF0IGEgdGltZSIgMT4mMjsgZXhpdCAxOyB9CistICAgIGZpCistICAgIG5vbm9wdD0iJGFjX29wdGlvbiIKKysgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKysgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgIDs7CisgCisgICBlc2FjCisgZG9uZQorIAorIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorLSAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvIC0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYCIgMT4mMjsgZXhpdCAxOyB9CisrICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIGZpCisgCistdHJhcCAncm0gLWZyIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlICRhY19jbGVhbl9maWxlczsgZXhpdCAxJyAxIDIgMTUKKy0KKy0jIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKy0jIDAgc3RhbmRhcmQgaW5wdXQKKy0jIDEgZmlsZSBjcmVhdGlvbgorLSMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCistIyAzIHNvbWUgc3lzdGVtcyBtYXkgb3BlbiBpdCB0byAvZGV2L3R0eQorLSMgNCB1c2VkIG9uIHRoZSBLdWJvdGEgVGl0YW4KKy0jIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCistIyA1IGNvbXBpbGVyIG1lc3NhZ2VzIHNhdmVkIGluIGNvbmZpZy5sb2cKKy1pZiB0ZXN0ICIkc2lsZW50IiA9IHllczsgdGhlbgorLSAgZXhlYyA2Pi9kZXYvbnVsbAorLWVsc2UKKy0gIGV4ZWMgNj4mMQorK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKysgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKysgICAgbm8pIDs7CisrICAgIGZhdGFsKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworKyAgZXNhYworIGZpCistZXhlYyA1Pi4vY29uZmlnLmxvZworLQorLWVjaG8gIlwKKy1UaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorLXJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCistIiAxPiY1CisgCistIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCistIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCistYWNfY29uZmlndXJlX2FyZ3M9CistZm9yIGFjX2FyZworKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisrCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisrCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorIGRvCistICBjYXNlICIkYWNfYXJnIiBpbgorLSAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKy0gIHwgLS1uby1jciB8IC0tbm8tYykgOzsKKy0gIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorLSAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7CistICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP10qKQorLSAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7CistICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY19hcmciIDs7CisrICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisrICBjYXNlICRhY192YWwgaW4KKysgICAgKi8gKQorKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgICBlc2FjCisrICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisrICBjYXNlICRhY192YWwgaW4KKysgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKysgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworKyAgZXNhYworKyAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZG9uZQorIAorLSMgTkxTIG51aXNhbmNlcy4KKy0jIE9ubHkgc2V0IHRoZXNlIHRvIEMgaWYgYWxyZWFkeSBzZXQuICBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5CistIyBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCistIyBGaXhpbmcgTENfTUVTU0FHRVMgcHJldmVudHMgU29sYXJpcyBzaCBmcm9tIHRyYW5zbGF0aW5nIHZhciB2YWx1ZXMgaW4gYHNldCchCistIyBOb24tQyBMQ19DVFlQRSB2YWx1ZXMgYnJlYWsgdGhlIGN0eXBlIGNoZWNrLgorLWlmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQorLWlmIHRlc3QgIiR7TENfQUxMK3NldH0iID0gc2V0OyB0aGVuIExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBmaQorLWlmIHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgPSBzZXQ7IHRoZW4gTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyBmaQorLWlmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQorKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKysjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKysjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCisrYnVpbGQ9JGJ1aWxkX2FsaWFzCisraG9zdD0kaG9zdF9hbGlhcworK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisrCisrIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisrICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisrICBmaQorK2ZpCisrCisrYWNfdG9vbF9wcmVmaXg9CisrdGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorKworK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKysKKysKKythY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKythY19sc19kaT1gbHMgLWRpIC5gICYmCisrYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrdGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAorLSMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCistcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCistIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCistZWNobyA+IGNvbmZkZWZzLmgKKy0KKy0jIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CistIyBjb25maWd1cmUgaXMgaW4sIHdoaWNoIHdlIGNhbiBsb29rIGZvciB0byBmaW5kIG91dCBpZiBzcmNkaXIgaXMgY29ycmVjdC4KKy1hY191bmlxdWVfZmlsZT1jb21tb24vdW5pY29kZS91dHlwZXMuaAorIAorICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KKyBpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKy0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorLSAgYWNfcHJvZz0kMAorLSAgYWNfY29uZmRpcj1gZWNobyAkYWNfcHJvZ3xzZWQgJ3MlL1teL11bXi9dKiQlJSdgCistICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uCisrICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisrICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKyAgIHNyY2Rpcj0kYWNfY29uZmRpcgorLSAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisrICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICAgICBzcmNkaXI9Li4KKyAgIGZpCisgZWxzZQorICAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworIGZpCistaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCistICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgc291cmNlcyBpbiAkYWNfY29uZmRpciBvciAuLiIgMT4mMjsgZXhpdCAxOyB9CistICBlbHNlCistICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9CistICBmaQorLWZpCistc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgCistCistIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KKy1pZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCistICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKy0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCistICBlbHNlCistICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKy0gIGZpCistZmkKKy1mb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKy0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCistICAgIGVjaG8gImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIKKy0gICAgLiAiJGFjX3NpdGVfZmlsZSIKKy0gIGZpCisraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKysgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKKythY19hYnNfY29uZmRpcj1gKAorKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKwlwd2QpYAorKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCisraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorKyAgc3JjZGlyPS4KKytmaQorKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisrIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisrIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCisrY2FzZSAkc3JjZGlyIGluCisrKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7CisrZXNhYworK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorIGRvbmUKKyAKKy1pZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKy0gIGVjaG8gImxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCistICAuICRjYWNoZV9maWxlCistZWxzZQorLSAgZWNobyAiY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCistICA+ICRjYWNoZV9maWxlCisrIworKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKysjCisraWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKysgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorKyAgY2F0IDw8X0FDRU9GCisrXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKysKKytVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKysKKytUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCisrVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKysKKytEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKysKKytDb25maWd1cmF0aW9uOgorKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKysgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKysgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisrICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKysgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKysgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisrICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisrCisrSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisrCisrQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisrXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKKythbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisrCisrRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisrCisrRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKysgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisrICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisrICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKysgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisrICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisrICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKysgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKysgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisrICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisrICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKysgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisrICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9QQUNLQUdFXQorKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKytfQUNFT0YKKysKKysgIGNhdCA8PFxfQUNFT0YKKysKKytTeXN0ZW0gdHlwZXM6CisrICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCisrX0FDRU9GCisgZmkKKyAKKy1hY19leHQ9YworLSMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy1hY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCistCistYWNfZXhlZXh0PQorLWFjX29iamV4dD1vCistaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KKy0gICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1LgorLSAgaWYgKGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsMykgfCBzZWQgcy8tbi94bi8gfCBncmVwIHhuID4vZGV2L251bGw7IHRoZW4KKy0gICAgYWNfbj0gYWNfYz0nCistJyBhY190PScJJworLSAgZWxzZQorLSAgICBhY19uPS1uIGFjX2M9IGFjX3Q9CisraWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKysKKysgIGNhdCA8PFxfQUNFT0YKKysKKytPcHRpb25hbCBGZWF0dXJlczoKKysgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKysgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKysgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKysgIC0tZW5hYmxlLXN0cmljdCAgICAgICAgIGNvbXBpbGUgd2l0aCBzdHJpY3QgY29tcGlsZXIgb3B0aW9ucyBkZWZhdWx0PW5vCisrICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCisrICAtLWVuYWJsZS1zaGFyZWQgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCisrICAtLWVuYWJsZS1zdGF0aWMgICAgICAgICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIGRlZmF1bHQ9bm8KKysgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBkZWZhdWx0PW5vCisrICAtLWVuYWJsZS1yZWxlYXNlICAgICAgICBidWlsZCByZWxlYXNlIGxpYnJhcmllcyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtcmVuYW1pbmcgICAgICAgYWRkIGEgdmVyc2lvbiBzdWZmaXggdG8gc3ltYm9scyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgZGVmYXVsdD15ZXMKKysgIC0tZW5hYmxlLXJwYXRoICAgICAgICAgIHVzZSBycGF0aCB3aGVuIGxpbmtpbmcgZGVmYXVsdCBpcyBvbmx5IGlmIG5lY2Vzc2FyeQorKyAgLS1lbmFibGUtdGhyZWFkcyAgICAgICAgYnVpbGQgSUNVIHdpdGggdGhyZWFkIHNhZmV0eSBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtaWN1aW8gICAgICAgICAgYnVpbGQgSUNVJ3MgaWN1aW8gbGlicmFyeSBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtbGF5b3V0ICAgICAgICAgYnVpbGQgSUNVJ3MgbGF5b3V0IGxpYnJhcnkgZGVmYXVsdD15ZXMKKysKKysgIC0tZW5hYmxlLXRlc3RzICAgICAgICAgIGJ1aWxkIElDVSB0ZXN0cyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtc2FtcGxlcyAgICAgICAgYnVpbGQgSUNVIHNhbXBsZXMgZGVmYXVsdD15ZXMKKytBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLgorKworK09wdGlvbmFsIFBhY2thZ2VzOgorKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisrICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisrICAtLXdpdGgtaW9zdHJlYW09dmVyc2lvbiBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIGlvc3RyZWFtIHRvIHVzZSAobm9uZSwgb2xkLCBzdGQsIGF1dG8pIGRlZmF1bHQ9YXV0bworKyAgLS13aXRoLWRhdGEtcGFja2FnaW5nPXR5cGUgc3BlY2lmeSBob3cgdG8gcGFja2FnZSBJQ1UgZGF0YSAoZmlsZXMsIGFyY2hpdmUsIGxpYnJhcnksIGF1dG8pIGRlZmF1bHQ9YXV0bworKyAgLS13aXRoLWxpYnJhcnktc3VmZml4PXN1ZmZpeCAgICB0YWcgYSBzdWZmaXggdG8gdGhlIGxpYnJhcnkgbmFtZXMgZGVmYXVsdD0KKysKKytTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKysgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorKyAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisrICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisrICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisrICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisrICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKysgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisrICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKysgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisrICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCisrCisrVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKKytpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisrCisrX0FDRU9GCisrYWNfc3RhdHVzPSQ/CisrZmkKKysKKytpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisrICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKysgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKysgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKysgICAgICBjb250aW51ZQorKyAgICBhY19idWlsZGRpcj0uCisrCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKysgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisrICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKysgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorKyAgICBlbHNlCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKysgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisrICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKysgIGRvbmUKKytmaQorKworK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKysgIGNhdCA8PFxfQUNFT0YKKytjb25maWd1cmUKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjMKKysKKytDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKytfQUNFT0YKKysgIGV4aXQKKytmaQorK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCisrcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKysKKytJdCB3YXMgY3JlYXRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworKworKyAgJCAkMCAkQAorKworK19BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworK3sKKytjYXQgPDxfQVNVTkFNRQorKyMjIC0tLS0tLS0tLSAjIworKyMjIFBsYXRmb3JtLiAjIworKyMjIC0tLS0tLS0tLSAjIworKworK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisrdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrCisrL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisrCisrL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKworK19BU1VOQU1FCisrCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrfSA+JjUKKysKKytjYXQgPiY1IDw8X0FDRU9GCisrCisrCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBDb3JlIHRlc3RzLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrCisrX0FDRU9GCisrCisrCisrIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKysjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKysjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKysjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisrIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCisrYWNfY29uZmlndXJlX2FyZ3M9CisrYWNfY29uZmlndXJlX2FyZ3MwPQorK2FjX2NvbmZpZ3VyZV9hcmdzMT0KKythY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorK2ZvciBhY19wYXNzIGluIDEgMgorK2RvCisrICBmb3IgYWNfYXJnCisrICBkbworKyAgICBjYXNlICRhY19hcmcgaW4KKysgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKysgICAgICBjb250aW51ZSA7OworKyAgICAqXCcqKQorKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgY2FzZSAkYWNfcGFzcyBpbgorKyAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworKyAgICAyKQorKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisrICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKysgICAgICBlbHNlCisrCWNhc2UgJGFjX2FyZyBpbgorKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKysJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisrCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisrCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKysJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKytkb25lCisrJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9CisrJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9CisrCisrIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisrIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisrIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisrIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgorK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKysgIHsKKysgICAgZWNobworKworKyAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgIGVjaG8KKysgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKysoCisrICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisrICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICBjYXNlICRhY192YWwgaW4gIygKKysgICAgKiR7YXNfbmx9KikKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisrICAgICAgZXNhYworKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKysgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrICAoc2V0KSAyPiYxIHwKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisrICAgICAgc2VkIC1uIFwKKysJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorKyAgICAgIDs7ICMoCisrICAgICopCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKysgICAgICA7OworKyAgICBlc2FjIHwKKysgICAgc29ydAorKykKKysgICAgZWNobworKworKyAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgIGVjaG8KKysgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworKyAgICBkbworKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysgICAgICBlc2FjCisrICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICBkb25lIHwgc29ydAorKyAgICBlY2hvCisrCisrICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKysgICAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgICAgZWNobworKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisrICAgICAgZG8KKysJZXZhbCBhY192YWw9XCQkYWNfdmFyCisrCWNhc2UgJGFjX3ZhbCBpbgorKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrCWVzYWMKKysJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICAgIGRvbmUgfCBzb3J0CisrICAgICAgZWNobworKyAgICBmaQorKworKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKysgICAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBjb25mZGVmcy5oLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgICAgZWNobworKyAgICAgIGNhdCBjb25mZGVmcy5oCisrICAgICAgZWNobworKyAgICBmaQorKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKysgIH0gPiY1CisrICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKysgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorKyAgICBleGl0ICRleGl0X3N0YXR1cworKycgMAorK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisrZG9uZQorK2FjX3NpZ25hbD0wCisrCisrIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KKytybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorKworKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKKytfQUNFT0YKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKytfQUNFT0YKKysKKysKKysjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKysjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorK2FjX3NpdGVfZmlsZTE9Tk9ORQorK2FjX3NpdGVfZmlsZTI9Tk9ORQorK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKysgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCisrZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKysgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorK2Vsc2UKKysgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisrICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKKytmaQorK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCisrZG8KKysgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisrICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisrICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorKyAgICAuICIkYWNfc2l0ZV9maWxlIgorKyAgZmkKKytkb25lCisrCisraWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorKyAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCisrICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKysgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisrICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworKyAgICBlc2FjCisgICBmaQorIGVsc2UKKy0gIGFjX249IGFjX2M9J1xjJyBhY190PQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKysgID4kY2FjaGVfZmlsZQorK2ZpCisrCisrIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorKyMgdmFsdWUuCisrYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKysgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisrICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorKyAgICBzZXQsKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKysgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworKyAgICAsc2V0KQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisrICAgICwpOzsKKysgICAgKikKKysgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisrCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKysJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisrCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorKwkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKysJZWxzZQorKwkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorKwlmaQorKwl7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKysJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisrICAgICAgZmk7OworKyAgZXNhYworKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisrICAgIGNhc2UgJGFjX25ld192YWwgaW4KKysgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKysgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKysgICAgZXNhYworKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKysgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKysgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKysgICAgZXNhYworKyAgZmkKKytkb25lCisraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKyAKKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworKworK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29tbW9uL2ljdWNmZy5oIgorKworIFBBQ0tBR0U9ImljdSIKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjU3MDogY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMuLi4gIiA+JjY7IH0KKyAKKyBnZXRpY3V2ZXJzaW9uKCkgeworICAgICBzZWQgLW4gJ3MvXlsgCV0qI1sgCV0qZGVmaW5lWyAJXSpVX0lDVV9WRVJTSU9OWyAJXSoiXChbXiJdKlwpIi4qL1wxL3AnICIkQCIKK0BAIC01NzUsNyArMTkyMSw5IEBACisgaWYgdGVzdCB4IiRWRVJTSU9OIiA9IHg7IHRoZW4KKyAgICAgVkVSU0lPTj1gZ2V0aWN1dmVyc2lvbiAkc3JjZGlyL2NvbW1vbi91bmljb2RlLyouaGAKKyAgICAgaWYgdGVzdCB4IiRWRVJTSU9OIiA9IHg7IHRoZW4KKy0gICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiIDE+JjI7IGV4aXQgMTsgfQorKyAgICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgIGZpCisgZmkKKyBMSUJfVkVSU0lPTj1gZWNobyAkVkVSU0lPTiB8IHNlZCAtZSAncy9cLi8vJyAtZSAncy9eXChbXi5dKlwpJC9cMS4wLydgCitAQCAtNTgzLDcgKzE5MzEsOCBAQAorIAorIAorIAorLWVjaG8gIiRhY190IiJyZWxlYXNlICRWRVJTSU9OLCBsaWJyYXJ5ICRMSUJfVkVSU0lPTiIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHJlbGVhc2UgJFZFUlNJT04sIGxpYnJhcnkgJExJQl9WRVJTSU9OIiA+JjUKKyskYXNfZWNobyAicmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNjsgfQorIAorIFVOSUNPREVfVkVSU0lPTj0iNC4wLjEiCisgCitAQCAtNTkxLDIxNCArMTk0MCw4MDQgQEAKKyAKKyAjQUNfU1VCU1QoQ0lOVExUU1RfQ1BQRkxBR1MpCisgCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0NDPSRhY19jdl9wcm9nX0NDCisraWYgdGVzdCAtbiAiJENDIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKyskYXNfZWNobyAiJENDIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisrICBhY19jdF9DQz0kQ0MKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NTk4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKysgIGZpCisrZWxzZQorKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorK2ZpCisrCisraWYgdGVzdCAteiAiJENDIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfQ0M9ImdjYyIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworIGZpCisgZmkKKy1DQz0iJGFjX2N2X3Byb2dfQ0MiCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIGZpCisrZmkKKyBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTo2Mjg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICAgYWNfcHJvZ19yZWplY3RlZD1ubworLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorLSAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKy0JY29udGludWUKKy0gICAgICBmaQorLSAgICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworKyAgICAgICBjb250aW51ZQorKyAgICAgZmkKKysgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisgaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgICBzaGlmdAorLSAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgICBzaGlmdAorLSAgICBzZXQgZHVtbXkgIiRhY19kaXIvJGFjX3dvcmQiICIkQCIKKy0gICAgc2hpZnQKKy0gICAgYWNfY3ZfcHJvZ19DQz0iJEAiCisrICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICAgZmkKKyBmaQorIGZpCisgZmkKKy1DQz0iJGFjX2N2X3Byb2dfQ0MiCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy0gIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKy0gICAgY2FzZSAiYHVuYW1lIC1zYCIgaW4KKy0gICAgKndpbjMyKiB8ICpXSU4zMiopCistICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGNsOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6Njc5OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCisrZmkKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKy0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCistICBhY19kdW1teT0iJFBBVEgiCistICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisgZmkKKyBmaQorLUNDPSIkYWNfY3ZfcHJvZ19DQyIKKytDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrJGFzX2VjaG8gIiRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorLSA7OworLSAgICBlc2FjCisrCisrCisrICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKysgIGRvbmUKKytmaQorK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKysgIGFjX2N0X0NDPSRDQworKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisgICBmaQorLSAgdGVzdCAteiAiJENDIiAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiAxPiYyOyBleGl0IDE7IH0KKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKytpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NzExOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQorIAorLWFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKy0KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRgorLQorLSNsaW5lIDcyMiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLQorLW1haW4oKXtyZXR1cm4oMCk7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzI3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIGFjX2N2X3Byb2dfY2Nfd29ya3M9eWVzCistICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCistICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19jY19jcm9zcz1ubworKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworK2RvbmUKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorICAgZWxzZQorLSAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPXllcworKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKyAgIGZpCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgYWNfY3ZfcHJvZ19jY193b3Jrcz1ubworIGZpCistcm0gLWZyIGNvbmZ0ZXN0KgorLWFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2Nfd29ya3MiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4KKy0gIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CisgZmkKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjc1MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19jcm9zcyIgMT4mNgorLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NzU4OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorLSNpZmRlZiBfX0dOVUNfXworLSAgeWVzOworLSNlbmRpZgorLUVPRgorLWlmIHsgYWNfdHJ5PScke0NDLWNjfSAtRSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Njc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYWNfY3ZfcHJvZ19nY2M9eWVzCisrCisrdGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyt7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorKworKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyskYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK3NldCBYICRhY19jb21waWxlCisrYWNfY29tcGlsZXI9JDIKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorKworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKythY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKysjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisrIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorKyMgb2YgZXhlZXh0LgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQorK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisrCisrIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisrCisrYWNfcm1maWxlcz0KKytmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKKytkbworKyAgY2FzZSAkYWNfZmlsZSBpbgorKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisrICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworKyAgZXNhYworK2RvbmUKKytybSAtZiAkYWNfcm1maWxlcworKworK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisrIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKysjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisrIyBBdXRvY29uZi4KKytmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKKytkbworKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKysJOzsKKysgICAgW2FiXS5vdXQgKQorKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorKwkjIGNlcnRhaW5seSByaWdodC4KKysJYnJlYWs7OworKyAgICAqLiogKQorKyAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisrCXRoZW4gOjsgZWxzZQorKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKysJZmkKKysJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisrCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKysJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisrCSMgYWN0dWFsbHkgd29ya2luZy4KKysJYnJlYWs7OworKyAgICAqICkKKysJYnJlYWs7OworKyAgZXNhYworK2RvbmUKKyt0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKysKKyBlbHNlCistICBhY19jdl9wcm9nX2djYz1ubworKyAgYWNfZmlsZT0nJworIGZpCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CisraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH07IH0KKytmaQorKworK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisrCisrIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKysjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KKysjIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCisrIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKysgIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisrICBlbHNlCisrICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKysJY3Jvc3NfY29tcGlsaW5nPXllcworKyAgICBlbHNlCisrCXsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCisrSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCisrSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrICAgIGZpCisrICBmaQorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKyskYXNfZWNobyAieWVzIiA+JjY7IH0KKysKKytybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisrIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKysjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CisrJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKysgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisrIyBgcm0nLgorK2ZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKysgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisrCSAgYnJlYWs7OworKyAgICAqICkgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytlbHNlCisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyt7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorK2ZpCisrCisrcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorKworK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKytFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorK2FjX2V4ZWV4dD0kRVhFRVhUCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKysgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKysgIGNhc2UgJGFjX2ZpbGUgaW4KKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKysgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisrICAgICAgIGJyZWFrOzsKKysgIGVzYWMKKytkb25lCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorK09CSkVYVD0kYWNfY3Zfb2JqZXh0CisrYWNfb2JqZXh0PSRPQkpFWFQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKytpbnQKKyttYWluICgpCisreworKyNpZm5kZWYgX19HTlVDX18KKysgICAgICAgY2hva2UgbWUKKysjZW5kaWYKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2NvbXBpbGVyX2dudT15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2NvbXBpbGVyX2dudT1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgIEdDQz15ZXMKKyBlbHNlCisgICBHQ0M9CisgZmkKKythY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CisrYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisrICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKysgICBhY19jdl9wcm9nX2NjX2c9bm8KKysgICBDRkxBR1M9Ii1nIgorKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCistYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistQ0ZMQUdTPQorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjc4NjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19jY19nJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCUNGTEFHUz0iIgorKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIDoKKyBlbHNlCistICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmMKKy1pZiB0ZXN0IC16ICJgJHtDQy1jY30gLWcgLWMgY29uZnRlc3QuYyAyPiYxYCI7IHRoZW4KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisrCSBDRkxBR1M9Ii1nIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfcHJvZ19jY19nPXllcworIGVsc2UKKy0gIGFjX2N2X3Byb2dfY2NfZz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorLSAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCisgZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIENGTEFHUz0iLWcgLU8yIgorQEAgLTgxMiwxMzYgKzI3NTEsNDgxIEBACisgICAgIENGTEFHUz0KKyAgIGZpCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19jdl9wcm9nX2NjX2M4OT1ubworK2FjX3NhdmVfQ0M9JENDCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KKytzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CisrRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKKytzdGF0aWMgY2hhciAqZSAocCwgaSkKKysgICAgIGNoYXIgKipwOworKyAgICAgaW50IGk7CisreworKyAgcmV0dXJuIHBbaV07CisrfQorK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKKyt7CisrICBjaGFyICpzOworKyAgdmFfbGlzdCB2OworKyAgdmFfc3RhcnQgKHYscCk7CisrICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworKyAgdmFfZW5kICh2KTsKKysgIHJldHVybiBzOworK30KKyAKKy1mb3IgYWNfcHJvZyBpbiAkQ0NDIGMrKyBnKysgZ2NjIENDIGN4eCBjYysrIGNsCisrLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKysgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisrICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisrICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKysgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKysgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCisraW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKysKKysvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKysgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisrI2RlZmluZSBGT08oeCkgJ3gnCisraW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisrCisraW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Cisrc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Cisrc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CisraW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CisraW50IGFyZ2M7CisrY2hhciAqKmFyZ3Y7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorIGRvCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6ODIyOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NYWCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisrICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworK2RvbmUKKytybSAtZiBjb25mdGVzdC4kYWNfZXh0CisrQ0M9JGFjX3NhdmVfQ0MKKysKKytmaQorKyMgQUNfQ0FDSEVfVkFMCisrY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKysgIHgpCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworKyAgeG5vKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CisrJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKysgICopCisrICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworK2VzYWMKKysKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworK2FjX2V4dD1jcHAKKythY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorKyAgICBDWFg9JENDQworKyAgZWxzZQorKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKy0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCistICBhY19kdW1teT0iJFBBVEgiCistICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY19wcm9nIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyBmaQorIGZpCistQ1hYPSIkYWNfY3ZfcHJvZ19DWFgiCisrQ1hYPSRhY19jdl9wcm9nX0NYWAorIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENYWCIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1CisrJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy10ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworKworKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworKyAgZG9uZQorK2ZpCisraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKysgIGFjX2N0X0NYWD0kQ1hYCisrICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ1hYK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKyBkb25lCistdGVzdCAtbiAiJENYWCIgfHwgQ1hYPSJnY2MiCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCisraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciAoJENYWCAkQ1hYRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6ODU0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CisrICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworK2RvbmUKKyAKKy1hY19leHQ9QworLSMgQ1hYRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NYWC1nKyt9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKy0KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRgorLQorLSNsaW5lIDg2NSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLQorLWludCBtYWluKCl7cmV0dXJuKDApO30KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg3MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBhY19jdl9wcm9nX2N4eF93b3Jrcz15ZXMKKy0gICMgSWYgd2UgY2FuJ3QgcnVuIGEgdHJpdmlhbCBwcm9ncmFtLCB3ZSBhcmUgcHJvYmFibHkgdXNpbmcgYSBjcm9zcyBjb21waWxlci4KKy0gIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorLSAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz1ubworKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorKyAgICBDWFg9ImcrKyIKKyAgIGVsc2UKKy0gICAgYWNfY3ZfcHJvZ19jeHhfY3Jvc3M9eWVzCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIENYWD0kYWNfY3RfQ1hYCisgICBmaQorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIGFjX2N2X3Byb2dfY3h4X3dvcmtzPW5vCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCistYWNfZXh0PWMKKy0jIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jeHhfd29ya3MiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF93b3JrcyA9IG5vOyB0aGVuCistICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMrKyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CisrICBmaQorIGZpCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjg5NjogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1CistZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9jcm9zcyIgMT4mNgorLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKysjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCisrJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK3NldCBYICRhY19jb21waWxlCisrYWNfY29tcGlsZXI9JDIKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6OTAxOiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19neHgnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC5DIDw8RU9GCistI2lmZGVmIF9fR05VQ19fCistICB5ZXM7CisraW50CisrbWFpbiAoKQorK3sKKysjaWZuZGVmIF9fR05VQ19fCisrICAgICAgIGNob2tlIG1lCisgI2VuZGlmCistRU9GCistaWYgeyBhY190cnk9JyR7Q1hYLWcrK30gLUUgY29uZnRlc3QuQyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTEwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIGFjX2N2X3Byb2dfZ3h4PXllcworLWVsc2UKKy0gIGFjX2N2X3Byb2dfZ3h4PW5vCistZmkKKy1maQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19neHgiIDE+JjYKKy0KKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2d4eCA9IHllczsgdGhlbgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBhY19jb21waWxlcl9nbnU9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jb21waWxlcl9nbnU9bm8KKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CisraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgICBHWFg9eWVzCisgZWxzZQorICAgR1hYPQorIGZpCisrYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKythY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKysgICBhY19jdl9wcm9nX2N4eF9nPW5vCisrICAgQ1hYRkxBR1M9Ii1nIgorKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCUNYWEZMQUdTPSIiCisrICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorLWFjX3Rlc3RfQ1hYRkxBR1M9IiR7Q1hYRkxBR1Mrc2V0fSIKKy1hY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCistQ1hYRkxBR1M9CistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWC1nKyt9IGFjY2VwdHMgLWciIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTo5Mjk6IGNoZWNraW5nIHdoZXRoZXIgJHtDWFgtZysrfSBhY2NlcHRzIC1nIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19jeHhfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisgZWxzZQorLSAgZWNobyAndm9pZCBmKCl7fScgPiBjb25mdGVzdC5jYworLWlmIHRlc3QgLXogImAke0NYWC1nKyt9IC1nIC1jIGNvbmZ0ZXN0LmNjIDI+JjFgIjsgdGhlbgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisrCSBDWFhGTEFHUz0iLWciCisrCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCisgZWxzZQorLSAgYWNfY3ZfcHJvZ19jeHhfZz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jeHhfZyIgMT4mNgorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQorIGlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorLSAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgorKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKKyBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgIENYWEZMQUdTPSItZyAtTzIiCitAQCAtOTU1LDc2ICszMjM5LDQyIEBACisgICAgIENYWEZMQUdTPQorICAgZmkKKyBmaQorLQorLWZvciBhY19kZWNsYXJhdGlvbiBpbiBcCistICAgJydcCistICAgJyNpbmNsdWRlIDxzdGRsaWIuaD4nIFwKKy0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCistICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKy0gICAndm9pZCBleGl0IChpbnQpOycKKy1kbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDk3MCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0kYWNfZGVjbGFyYXRpb24KKy1pbnQgbWFpbigpIHsKKy1leGl0ICg0Mik7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTc4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCistICA6CistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgY29udGludWUKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDk4OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSRhY19kZWNsYXJhdGlvbgorLWludCBtYWluKCkgeworLWV4aXQgKDQyKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5OTU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGJyZWFrCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLWZpCistcm0gLWYgY29uZnRlc3QqCistZG9uZQorLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KKy0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCistICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKKy1maQorLQorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgYWNfYXV4X2Rpcj0KKy1mb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbworLSAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKytmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICAgYnJlYWsKKy0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICAgYnJlYWsKKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisrICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKysgICAgYnJlYWsKKyAgIGZpCisgZG9uZQorIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorLSAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiAxPiYyOyBleGl0IDE7IH0KKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKy1hY19jb25maWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzCistYWNfY29uZmlnX3N1Yj0kYWNfYXV4X2Rpci9jb25maWcuc3ViCistYWNfY29uZmlndXJlPSRhY19hdXhfZGlyL2NvbmZpZ3VyZSAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisrCisrIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisrIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKythY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorKworIAorICMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorQEAgLTEwMzMsNjAgKzMyODMsODkgQEAKKyAjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyAjIElSSVggL3NiaW4vaW5zdGFsbAorICMgQUlYIC9iaW4vaW5zdGFsbAorKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworICMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisgIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisgIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMDQyOiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKysjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9pbnN0YWxsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSI6IgorLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKy0gICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCistICAgIGNhc2UgIiRhY19kaXIvIiBpbgorLSAgICAvfC4vfC4vL3wvZXRjLyp8L3Vzci9zYmluLyp8L3Vzci9ldGMvKnwvc2Jpbi8qfC91c3IvYWZzd3MvYmluLyp8L3Vzci91Y2IvKikgOzsKKy0gICAgKikKKy0gICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorLSAgICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorLSAgICAgICMgYnkgZGVmYXVsdC4KKy0gICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCistICAgICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3Byb2c7IHRoZW4KKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKytjYXNlICRhc19kaXIvIGluCisrICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKysgIC91c3IvdWNiLyogKSA7OworKyAgKikKKysgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKysgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisrICAgICMgYnkgZGVmYXVsdC4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisgCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIGRzcG1zZyAkYWNfZGlyLyRhY19wcm9nID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorIAkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorIAkgICAgOgorKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorKwkgICAgOgorIAkgIGVsc2UKKy0JICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKy0JICAgIGJyZWFrIDIKKysJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKysJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisrCSAgICBta2RpciBjb25mdGVzdC5kaXIKKysJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisrCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisrCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKysJICAgIHRoZW4KKysJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorKwkgICAgICBicmVhayAzCisrCSAgICBmaQorIAkgIGZpCisgCWZpCisgICAgICAgZG9uZQorLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfSUZTIgorKyAgICBkb25lCisrICAgIDs7CisrZXNhYworKworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisgCisgZmkKKyAgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCistICAgIElOU1RBTEw9IiRhY19jdl9wYXRoX2luc3RhbGwiCisrICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICAgZWxzZQorLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCistICAgICMgcGF0aCBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisrICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKy0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKy0gICAgSU5TVEFMTD0iJGFjX2luc3RhbGxfc2giCisrICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKysgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICAgZmkKKyBmaQorLWVjaG8gIiRhY190IiIkSU5TVEFMTCIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorIAorICMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgorIHRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKyAKKy10ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTExfUFJPR1JBTX0nCisrdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKyAKKyB0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworIAorQEAgLTExMDIsNzMgKzMzODEsODYgQEAKKyAjQUNfQ0hFQ0tfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYsIGF1dG9jb25mLCB0cnVlKQorICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjExMDc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfU1RSSVAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworICAgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiICYmIGFjX2N2X3Byb2dfU1RSSVA9InRydWUiCisgZmkKKyBmaQorLVNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKytTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkU1RSSVAiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CisrJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKworIGZvciBhY19wcm9nIGluIGdtYWtlIGdudW1ha2UKKyBkbworLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTE0MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9VX01BS0UnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfVV9NQUtFK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhc2UgIiRVX01BS0UiIGluCistICAvKikKKysgIGNhc2UgJFVfTUFLRSBpbgorKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICBhY19jdl9wYXRoX1VfTUFLRT0iJFVfTUFLRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICA7OworLSAgPzovKikJCQkgCistICBhY19jdl9wYXRoX1VfTUFLRT0iJFVfTUFLRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorLSAgOzsKKyAgICopCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKy0gICAgICBhY19jdl9wYXRoX1VfTUFLRT0iJGFjX2Rpci8kYWNfd29yZCIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3BhdGhfVV9NQUtFPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworICAgOzsKKyBlc2FjCisgZmkKKy1VX01BS0U9IiRhY19jdl9wYXRoX1VfTUFLRSIKKytVX01BS0U9JGFjX2N2X3BhdGhfVV9NQUtFCisgaWYgdGVzdCAtbiAiJFVfTUFLRSI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkVV9NQUtFIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVV9NQUtFIiA+JjUKKyskYXNfZWNobyAiJFVfTUFLRSIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLXRlc3QgLW4gIiRVX01BS0UiICYmIGJyZWFrCisrCisrICB0ZXN0IC1uICIkVV9NQUtFIiAmJiBicmVhaworIGRvbmUKKyB0ZXN0IC1uICIkVV9NQUtFIiB8fCBVX01BS0U9Im1ha2UiCisgCitAQCAtMTE3NiwxODIgKzM0NjgsMTUwIEBACisgCisgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkb3h5Z2VuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZG94eWdlbjsgYWNfd29yZD0kMgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjExODE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfRE9YWUdFTicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ET1hZR0VOK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhc2UgIiRET1hZR0VOIiBpbgorLSAgLyopCisrICBjYXNlICRET1hZR0VOIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKyAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJERPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgOzsKKy0gID86LyopCQkJIAorLSAgYWNfY3ZfcGF0aF9ET1hZR0VOPSIkRE9YWUdFTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorLSAgOzsKKyAgICopCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIOi91c3IvbG9jYWwvYmluOi91c3IvYmluIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKy0gICAgICBhY19jdl9wYXRoX0RPWFlHRU49IiRhY19kaXIvJGFjX3dvcmQiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2FzX2R1bW15PSIkUEFUSDovdXNyL2xvY2FsL2JpbjovdXNyL2JpbiIKKytmb3IgYXNfZGlyIGluICRhc19kdW1teQorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyAgIDs7CisgZXNhYworIGZpCistRE9YWUdFTj0iJGFjX2N2X3BhdGhfRE9YWUdFTiIKKytET1hZR0VOPSRhY19jdl9wYXRoX0RPWFlHRU4KKyBpZiB0ZXN0IC1uICIkRE9YWUdFTiI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkRE9YWUdFTiIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERPWFlHRU4iID4mNQorKyRhc19lY2hvICIkRE9YWUdFTiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorIAorICMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKy1pZiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CistZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBleGl0IDE7IH0KKy1maQorLQorLWVjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMjIxOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKy0KKy1ob3N0X2FsaWFzPSRob3N0CistY2FzZSAiJGhvc3RfYWxpYXMiIGluCistTk9ORSkKKy0gIGNhc2UgJG5vbm9wdCBpbgorLSAgTk9ORSkKKy0gICAgaWYgaG9zdF9hbGlhcz1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOgorLSAgICBlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBndWVzcyBob3N0IHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAxPiYyOyBleGl0IDE7IH0KKy0gICAgZmkgOzsKKy0gICopIGhvc3RfYWxpYXM9JG5vbm9wdCA7OworLSAgZXNhYyA7OworKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKKyt0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKysgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCisrdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CisrY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKysqLSotKikgOzsKKysqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworIGVzYWMKKy0KKy1ob3N0PWAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiAkaG9zdF9hbGlhc2AKKy1ob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCistaG9zdF92ZW5kb3I9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorLWhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorLWVjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorLQorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBDeWd3aW4gZW52aXJvbm1lbnQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMjQyOiBjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY3lnd2luJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDEyNDcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0KKy1pbnQgbWFpbigpIHsKKy0KKy0jaWZuZGVmIF9fQ1lHV0lOX18KKy0jZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCistI2VuZGlmCistcmV0dXJuIF9fQ1lHV0lOX187CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI1ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfY3lnd2luPXllcworLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X2N5Z3dpbj1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCistcm0gLWYgY29uZnRlc3QqCisrYnVpbGQ9JGFjX2N2X2J1aWxkCisrYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworK3NldCB4ICRhY19jdl9idWlsZAorK3NoaWZ0CisrYnVpbGRfY3B1PSQxCisrYnVpbGRfdmVuZG9yPSQyCisrc2hpZnQ7IHNoaWZ0CisrIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisrIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorK2J1aWxkX29zPSQqCisrSUZTPSRhY19zYXZlX0lGUworK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKysgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCisrZWxzZQorKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKysgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2CistQ1lHV0lOPQorLXRlc3QgIiRhY19jdl9jeWd3aW4iID0geWVzICYmIENZR1dJTj15ZXMKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjEyNzU6IGNoZWNraW5nIGZvciBtaW5ndzMyIGVudmlyb25tZW50IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbWluZ3czMicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAxMjgwICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistCistaW50IG1haW4oKSB7CistcmV0dXJuIF9fTUlOR1czMl9fOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyODc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X21pbmd3MzI9eWVzCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfbWluZ3czMj1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCistcm0gLWYgY29uZnRlc3QqCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KKytjYXNlICRhY19jdl9ob3N0IGluCisrKi0qLSopIDs7CisrKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrZXNhYworK2hvc3Q9JGFjX2N2X2hvc3QKKythY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCisrc2V0IHggJGFjX2N2X2hvc3QKKytzaGlmdAorK2hvc3RfY3B1PSQxCisraG9zdF92ZW5kb3I9JDIKKytzaGlmdDsgc2hpZnQKKysjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKysjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CisraG9zdF9vcz0kKgorK0lGUz0kYWNfc2F2ZV9JRlMKKytjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfbWluZ3czMiIgMT4mNgorLU1JTkdXMzI9CistdGVzdCAiJGFjX2N2X21pbmd3MzIiID0geWVzICYmIE1JTkdXMzI9eWVzCistCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTMwNjogY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZXhlZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgaWYgdGVzdCAiJENZR1dJTiIgPSB5ZXMgfHwgdGVzdCAiJE1JTkdXMzIiID0geWVzOyB0aGVuCistICBhY19jdl9leGVleHQ9LmV4ZQorLWVsc2UKKy0gIHJtIC1mIGNvbmZ0ZXN0KgorLSAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC4kYWNfZXh0CistICBhY19jdl9leGVleHQ9CistICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzMTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH07IHRoZW4KKy0gICAgZm9yIGZpbGUgaW4gY29uZnRlc3QuKjsgZG8KKy0gICAgICBjYXNlICRmaWxlIGluCistICAgICAgKi5jIHwgKi5vIHwgKi5vYmopIDs7CistICAgICAgKikgYWNfY3ZfZXhlZXh0PWBlY2hvICRmaWxlIHwgc2VkIC1lIHMvY29uZnRlc3QvL2AgOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKy0gIGVsc2UKKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CistICBmaQorLSAgcm0gLWYgY29uZnRlc3QqCistICB0ZXN0IHgiJHthY19jdl9leGVleHR9IiA9IHggJiYgYWNfY3ZfZXhlZXh0PW5vCistZmkKKy1maQorIAorLUVYRUVYVD0iIgorLXRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iICE9IHhubyAmJiBFWEVFWFQ9JHthY19jdl9leGVleHR9CistZWNobyAiJGFjX3QiIiR7YWNfY3ZfZXhlZXh0fSIgMT4mNgorLWFjX2V4ZWV4dD0kRVhFRVhUCisgCisgCisgCistICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbiIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjEzMzk6IGNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbiIgPiY1CistICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgb3IgLS1kaXNhYmxlLXN0cmljdCB3YXMgZ2l2ZW4uCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbi4uLiAiID4mNjsgfQorKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RyaWN0IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9zdHJpY3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zdHJpY3QiCistICAKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3N0cmljdDsKKyAgICAgICAgIGlmIHRlc3QgIiRlbmFibGV2YWwiID0gbm8KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICBhY191c2Vfc3RyaWN0X29wdGlvbnM9bm8KKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBhY191c2Vfc3RyaWN0X29wdGlvbnM9eWVzCisgICAgICAgICBmaQorLSAgICAgIAorKworIGVsc2UKKyAgIGFjX3VzZV9zdHJpY3Rfb3B0aW9ucz1ubworIGZpCisgCistICAgIGVjaG8gIiRhY190IiIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiAxPiY2CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY191c2Vfc3RyaWN0X29wdGlvbnMiID4mNQorKyRhc19lY2hvICIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiA+JjY7IH0KKyAKKyAgICAgaWYgdGVzdCAiJGFjX3VzZV9zdHJpY3Rfb3B0aW9ucyIgPSB5ZXMKKyAgICAgdGhlbgorQEAgLTEzOTEsMTcgKzM2NTEsMTcgQEAKKyAKKyAKKyAKKy0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgb3IgLS1kaXNhYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorKworKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtNjRiaXQtbGlicyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfNjRiaXRfbGlicytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlXzY0Yml0X2xpYnMiCistICBFTkFCTEVfNjRCSVRfTElCUz0ke2VuYWJsZXZhbH0KKysgIGVuYWJsZXZhbD0kZW5hYmxlXzY0Yml0X2xpYnM7IEVOQUJMRV82NEJJVF9MSUJTPSR7ZW5hYmxldmFsfQorIGVsc2UKKyAgIEVOQUJMRV82NEJJVF9MSUJTPXllcworLSAgICAKKysKKyBmaQorIAorLSAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNDA1OiBjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIgPiY1CisrICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciA2NC1iaXQgZXhlY3V0YWJsZSBzdXBwb3J0Li4uICIgPiY2OyB9CisgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICAgICotKi1ocHV4KikKK0BAIC0xNDY1LDcgKzM3MjUsNyBAQAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICotKi1haXgqKQorLSAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAjIE5vdGU6IEhhdmUgbm90IHRlc3RlZCA2NC1iaXRuZXNzIHdpdGggZ2NjLgorICAgICAgICAgICAgICAgICAjIE1heWJlIHRoZSBmbGFnICItbWFpeDY0IiBjb3VsZCBiZSB1c2VkIHdpdGggZ2NjPworICAgICAgICAgICAgICAgICBPTERfQ0ZMQUdTPSIke0NGTEFHU30iCitAQCAtMTQ3NywyMyArMzczNyw1MCBAQAorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTQ4MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBpbnQgbWFpbih2b2lkKSB7cmV0dXJuIDA7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ4NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorLXRoZW4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisrICB7IChjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBmaQorLXJtIC1mciBjb25mdGVzdCoKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCisrCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorICAgICAgICAgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7T0xEX0NYWEZMQUdTfSIKK0BAIC0xNTA0LDcgKzM3OTEsNyBAQAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICotKi1ocHV4KikKKy0gICAgICAgICAgICAgICAgICAgICAgICAKKysKKyAgICAgICAgICAgICBPTERfQ0ZMQUdTPSIke0NGTEFHU30iCisgICAgICAgICAgICAgT0xEX0NYWEZMQUdTPSIke0NYWEZMQUdTfSIKKyAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSArREQ2NCIKK0BAIC0xNTEyLDIzICszNzk5LDUwIEBACisgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIEVOQUJMRV82NEJJVF9MSUJTPW5vCisgZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE1MTcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgaW50IG1haW4odm9pZCkge3JldHVybiAwO30KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE1MjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIEVOQUJMRV82NEJJVF9MSUJTPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKy0gIEVOQUJMRV82NEJJVF9MSUJTPW5vCisrICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrKCBleGl0ICRhY19zdGF0dXMgKQorK0VOQUJMRV82NEJJVF9MSUJTPW5vCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorKworICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7T0xEX0NGTEFHU30iCisgICAgICAgICAgICAgICAgIENYWEZMQUdTPSIke09MRF9DWFhGTEFHU30iCitAQCAtMTUzNywyMyArMzg1MSw1MCBAQAorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTU0MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBpbnQgbWFpbih2b2lkKSB7cmV0dXJuIDA7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTU0NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorLXRoZW4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisrICB7IChjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBmaQorLXJtIC1mciBjb25mdGVzdCoKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCisrCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorICAgICAgICAgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7T0xEX0NYWEZMQUdTfSIKK0BAIC0xNTY1LDM0ICszOTA2LDM1IEBACisgICAgICAgICAgICAgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgZmkKKy0gICAgICAgIGVjaG8gIiRhY190IiIkRU5BQkxFXzY0QklUX0xJQlMiIDE+JjYKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRFTkFCTEVfNjRCSVRfTElCUyIgPiY1CisrJGFzX2VjaG8gIiRFTkFCTEVfNjRCSVRfTElCUyIgPiY2OyB9CisgCisgCisgCisgCisgCistCWVjaG8gJGFjX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE1NzY6IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2ljdV9jdl9ob3N0X2ZyYWcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggTWFrZWZpbGUgZnJhZ21lbnQgdG8gdXNlLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtpY3VfY3ZfaG9zdF9mcmFnK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIAorKworIGNhc2UgIiR7aG9zdH0iIGluCisgKi0qLXNvbGFyaXMqKQorLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgkKKy0JCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcy1nY2MgCisrCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXNvbGFyaXMtZ2NjCisgCWVsc2UKKyAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcworIAlmaSA7OworIGFscGhhKi0qLWxpbnV4LWdudSkKKyAJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtYWxwaGEtbGludXgtZ2NjCistCWVsc2UgIAorKwllbHNlCisgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLWFscGhhLWxpbnV4LWNjCisgCWZpIDs7CisgKi0qLWxpbnV4KikgaWN1X2N2X2hvc3RfZnJhZz1taC1saW51eCA7OworICotKi1jeWd3aW4pCistCWlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSB5ZXM7IHRoZW4KKysJaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IHllczsgdGhlbgorIAkgIAlpY3VfY3ZfaG9zdF9mcmFnPW1oLWN5Z3dpbgorIAllbHNlCisgCSAgCWljdV9jdl9ob3N0X2ZyYWc9bWgtY3lnd2luLW1zdmMKK0BAIC0xNjI5LDExMyArMzk3MSwxNjkgQEAKKyAqLXNlcXVlbnQtKikgCWljdV9jdl9ob3N0X2ZyYWc9bWgtcHR4IDs7CisgKikgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXVua25vd24gOzsKKyBlc2FjCistCQkKKy0JCistZmkKKyAKKy1lY2hvICIkYWNfdCIiJGljdV9jdl9ob3N0X2ZyYWciIDE+JjYKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRpY3VfY3ZfaG9zdF9mcmFnIiA+JjUKKyskYXNfZWNobyAiJGljdV9jdl9ob3N0X2ZyYWciID4mNjsgfQorIAorIAorIGNhc2UgIiR7aG9zdH0iIGluCistCSotKi1ocHV4KikgCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNjQyOiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCSotKi1ocHV4KikgCXsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9saWJfbV9mbG9vcitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworIExJQlM9Ii1sbSAgJExJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE2NTAgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIGZsb29yKCk7CistCistaW50IG1haW4oKSB7CistZmxvb3IoKQorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2NjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKy1MSUJTPSIkYWNfc2F2ZV9MSUJTIgorLQorLWZpCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgZmxvb3IgKCk7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZmxvb3IgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2xpYl9tX2Zsb29yPW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21fZmxvb3IiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX21fZmxvb3IiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCisgICBMSUJfTT0iLWxtIgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorIGZpCisgIDs7CistCQorLQkqKSAJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNjgzOiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCisrCSopCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0uLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2xpYl9tX2Zsb29yK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iLWxtICAkTElCUyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTY5MSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgZmxvb3IoKTsKKy0KKy1pbnQgbWFpbigpIHsKKy1mbG9vcigpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTcwMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLUxJQlM9IiRhY19zYXZlX0xJQlMiCistCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBtIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCistICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2xpYiAxCistRU9GCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIGZsb29yICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIGZsb29yICgpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorKyAgYWNfY3ZfbGliX21fZmxvb3I9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9saWJfbV9mbG9vcj1ubworK2ZpCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tX2Zsb29yIiA9IHgiInllczsgdGhlbgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9MSUJNIDEKKytfQUNFT0YKKyAKKyAgIExJQlM9Ii1sbSAkTElCUyIKKyAKKy1lbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyBmaQorLSAKKysKKyAJCQlMSUJfTT0iIiA7OworIGVzYWMKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNzM0OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9bm8KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NoYXJlZCIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllczsgRU5BQkxFX1NIQVJFRD1ZRVMgOzsKKyAJICAgICBubyk7OworIAkgICAgICopIDs7CitAQCAtMTc0NSwxNjIgKzQxNDMsMjMwIEBACisgCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGVuYWJsZWQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlZCIgPiY1CisrJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNzUzOiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9bm8KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIG9yIC0tZGlzYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N0YXRpYyIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllczsgRU5BQkxFX1NUQVRJQz1ZRVMgOzsKKyAJICAgICBubykgOzsKKyAJICAgICAqKSA7OworICAgICBlc2FjCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGVuYWJsZWQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlZCIgPiY1CisrJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE3Njk6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzIiA+JjUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgZW5hYmxlZD1ubworIEVOQUJMRV9ERUJVRz0wCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIG9yIC0tZGlzYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlYnVnIgorLSAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIHllc3wiIikgZW5hYmxlZD15ZXM7IEVOQUJMRV9ERUJVRz0xIDs7CisgICAgICAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE3ODU6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgZW5hYmxlZD15ZXMKKyBFTkFCTEVfUkVMRUFTRT0xCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbGVhc2Ugb3IgLS1kaXNhYmxlLXJlbGVhc2Ugd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWxlYXNlIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9yZWxlYXNlK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfcmVsZWFzZSIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9yZWxlYXNlOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIG5vKSBlbmFibGVkPW5vOyBFTkFCTEVfUkVMRUFTRT0wIDs7CisgICAgICAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODAzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfUkFOTElCPSJyYW5saWIiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIiAmJiBhY19jdl9wcm9nX1JBTkxJQj0iOiIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyBmaQorIGZpCistUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisrUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJFJBTkxJQiIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisrICBhY19jdF9SQU5MSUI9JFJBTkxJQgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgorK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgZmkKKyBlbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKysgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorIGZpCisgCisgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTgzMzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9BUicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9BUitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBjYXNlICIkQVIiIGluCistICAvKikKKysgIGNhc2UgJEFSIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKyAgIGFjX2N2X3BhdGhfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICA7OworLSAgPzovKikJCQkgCistICBhY19jdl9wYXRoX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKy0gIDs7CisgICAqKQorLSAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKy0gIGFjX2R1bW15PSIkUEFUSDovYmluOi91c3IvYmluOi91c3IvY2NzL2JpbiIKKy0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcGF0aF9BUj0iJGFjX2Rpci8kYWNfd29yZCIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrYXNfZHVtbXk9IiRQQVRIOi9iaW46L3Vzci9iaW46L3Vzci9jY3MvYmluIgorK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcGF0aF9BUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyAgIHRlc3QgLXogIiRhY19jdl9wYXRoX0FSIiAmJiBhY19jdl9wYXRoX0FSPSJlY2hvIGFyY2hpdmVyIGFyIG5vdCBmb3VuZCByZS1ydW4gY29uZmlndXJlIDsgZmFsc2UiCisgICA7OworIGVzYWMKKyBmaQorLUFSPSIkYWNfY3ZfcGF0aF9BUiIKKytBUj0kYWNfY3ZfcGF0aF9BUgorIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkQVIiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CisrJGFzX2VjaG8gIiRBUiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIHJlbmFtaW5nIG9mIHN5bWJvbHMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODY4OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzIiA+JjUKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9eWVzCisgVV9ESVNBQkxFX1JFTkFNSU5HPTAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVuYW1pbmcgb3IgLS1kaXNhYmxlLXJlbmFtaW5nIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVuYW1pbmcgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3JlbmFtaW5nK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfcmVuYW1pbmciCistICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfcmVuYW1pbmc7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllcyA7OworIAkgICAgIG5vKSBlbmFibGVkPW5vOyBVX0RJU0FCTEVfUkVOQU1JTkc9MSA7OworIAkgICAgICopIDs7CisgICAgIGVzYWMKKyBmaQorIAorLWVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKyskYXNfZWNobyAiJGVuYWJsZWQiID4mNjsgfQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmciIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODg1OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBmdW5jdGlvbiBhbmQgZGF0YSB0cmFjaW5nIiA+JjUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9eWVzCisgVV9FTkFCTEVfVFJBQ0lORz0xCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRyYWNpbmcgb3IgLS1kaXNhYmxlLXRyYWNpbmcgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10cmFjaW5nIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV90cmFjaW5nK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfdHJhY2luZyIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV90cmFjaW5nOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkgICAgIHllc3wiIikgZW5hYmxlZD15ZXMgOzsKKyAJICAgICBubykgZW5hYmxlZD1ubzsgVV9FTkFCTEVfVFJBQ0lORz0wIDs7CisgCSAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIG9yIC0tZGlzYWJsZS1ycGF0aCB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JwYXRoIgorLSAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkgICAgIHllc3wiIikgRU5BQkxFX1JQQVRIPVlFUyA7OworIAkgICAgIG5vKSA7OworIAkgICAgICopIDs7CitAQCAtMTkxMywzNCArNDM3OSw2MCBAQAorIAorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBkZWZpbml0aW9uIG9mIFVfSU5MSU5FIGZvciBDIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTkxODogY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2lubGluZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2N2X2NfaW5saW5lPW5vCisgZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE5MjUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyB9ICRhY19rdyBmb28oKSB7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTkzMjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3OyBicmVhaworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgZG9uZQorLSAgCistZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X2NfaW5saW5lIiAxPiY2CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorIGNhc2UgIiRhY19jdl9jX2lubGluZSIgaW4KKyAgICAgICB5ZXMpICAgICAgIFVfSU5MSU5FPSAiaW5saW5lIiA7OworIAkgIG5vICkgICAgICAgVV9JTkxJTkU9IDs7CitAQCAtMTk1MCwxMyArNDQ0MiwxNCBAQAorIAorIHRocmVhZHM9dHJ1ZQorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10aHJlYWRzIG9yIC0tZGlzYWJsZS10aHJlYWRzIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfdGhyZWFkcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3RocmVhZHMiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV90aHJlYWRzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCQl5ZXMpIHRocmVhZHM9dHJ1ZSA7OworIAkJbm8pICB0aHJlYWRzPWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRocmVhZHMiIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRocmVhZHMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10aHJlYWRzIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIHRocmVhZHM9dHJ1ZQorQEAgLTE5NzIsMTcxICs0NDY1LDI5NSBAQAorIElDVV9VU0VfVEhSRUFEUz0wCisgCisgaWYgdGVzdCAkdGhyZWFkcyA9IHRydWU7IHRoZW4KKy0gICAgICAgICAgIAorLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE5Nzg6IGNoZWNraW5nIGZvciBwdGhyZWFkX2F0dHJfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorLWFjX2xpYl92YXI9YGVjaG8gcHRocmVhZCdfJ3B0aHJlYWRfYXR0cl9pbml0IHwgc2VkICd5JS4vKy0lX19wXyUnYAorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKyBMSUJTPSItbHB0aHJlYWQgICRMSUJTIgorLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAxOTg2ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBwdGhyZWFkX2F0dHJfaW5pdCgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfYXR0cl9pbml0KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTk3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistTElCUz0iJGFjX3NhdmVfTElCUyIKKy0KKy1maQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCistICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CistICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKy0gICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCistI2RlZmluZSAkYWNfdHJfbGliIDEKKy1FT0YKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcHRocmVhZF9hdHRyX2luaXQgKCk7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gcHRocmVhZF9hdHRyX2luaXQgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdD15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0PW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID0geCIieWVzOyB0aGVuCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0xJQlBUSFJFQUQgMQorK19BQ0VPRgorIAorICAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorIAorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorIGZpCisgCisgICBpZiB0ZXN0ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdCA9IHllczsgdGhlbgorICAgIElDVV9VU0VfVEhSRUFEUz0xCisgICBlbHNlCistICAgICAgICAgICAgICAgCistICAgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyMDMwOiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3knK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcHRocmVhZF9tdXRleF9kZXN0cm95Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveT0ibm8iCisgZm9yIGkgaW4gcHRocmVhZCBwdGhyZWFkcyBjX3IgOyBkbworIExJQlM9Ii1sJGkgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIwMzkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjA1MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95PSItbCRpIgorIGJyZWFrCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZG9uZQorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiA9ICJubyI7IHRoZW4KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjA2MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgcHRocmVhZF9tdXRleF9kZXN0cm95KCk7CistCistaW50IG1haW4oKSB7CistcHRocmVhZF9tdXRleF9kZXN0cm95KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDczOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3k9Im5vbmUgcmVxdWlyZWQiCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBMSUJTPSIkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorIGZpCistCistZWNobyAiJGFjX3QiIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiICE9ICJubyI7IHRoZW4KKyAgIHRlc3QgIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSAkTElCUyIKKy0gIAorKworIGVsc2UgOgorLSAgCisrCisgZmkKKyAKKyAgICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgIT0gbm87IHRoZW4KKyAgICAgSUNVX1VTRV9USFJFQURTPTEKKyAgICBlbHNlCistICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIwOTc6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIHB0aHJlYWQnXydwdGhyZWFkX211dGV4X2luaXQgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfaW5pdCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworIExJQlM9Ii1scHRocmVhZCAgJExJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIxMDUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIHB0aHJlYWRfbXV0ZXhfaW5pdCgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfbXV0ZXhfaW5pdCgpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjExNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLUxJQlM9IiRhY19zYXZlX0xJQlMiCistCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBwdGhyZWFkIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCistICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2xpYiAxCistRU9GCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfaW5pdCAoKTsKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBwdGhyZWFkX211dGV4X2luaXQgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfTElCUFRIUkVBRCAxCisrX0FDRU9GCisgCisgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisgCistZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgZmkKKyAKKyAgICAgaWYgdGVzdCAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0ID0geWVzOyB0aGVuCitAQCAtMjE0NCw1MyArNDc2MSw5MSBAQAorICAgICBmaQorICAgIGZpCisgCistICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfbG9jayIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIxNDk6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyMTU0ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2suLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHB0aHJlYWRfbXV0ZXhfbG9jay4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayBpbm5vY3VvdXNfcHRocmVhZF9tdXRleF9sb2NrCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jaygpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgcHRocmVhZF9tdXRleF9sb2NrKCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcHRocmVhZF9tdXRleF9sb2NrICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBwdGhyZWFkX211dGV4X2xvY2sKKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfcHRocmVhZF9tdXRleF9sb2NrKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wdGhyZWFkX211dGV4X2xvY2spCisrI2lmIGRlZmluZWQgX19zdHViX3B0aHJlYWRfbXV0ZXhfbG9jayB8fCBkZWZpbmVkIF9fc3R1Yl9fX3B0aHJlYWRfbXV0ZXhfbG9jaworIGNob2tlIG1lCistI2Vsc2UKKy1wdGhyZWFkX211dGV4X2xvY2soKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTc3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaz1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ncHRocmVhZF9tdXRleF9sb2NrYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2s9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjY7IH0KKyAKKyAKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jayA9IHllczsgdGhlbgorQEAgLTIxOTgsNyArNDg1Myw3IEBACisgICAgZmkKKyAgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICotcGMtY3lnd2luKnwqLXBjLW1pbmd3KikKKy0gICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorKyAgICAgaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICBJQ1VfVVNFX1RIUkVBRFM9MQorICAgICAgZmkgOzsKKyAgICAqLSotaHB1eCopCitAQCAtMjIyMiwzNyArNDg3Nyw2NyBAQAorICMgVGhlIEFDX0ZVTkNfTU1BUCBtYWNybyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuICBJdCBzZWVtcyB0byBiZSB0b28gc3BlY2lmaWMuCisgIyBEbyB0aGlzIGNoZWNrIGluc3RlYWQuCisgSEFWRV9NTUFQPTAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgbW1hcCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIyMjc6IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19tbWFwX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIyMzIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0gICAgCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbW1hcC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX29rK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorLSAgICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgICBtbWFwKCh2b2lkICopMCwgMCwgUFJPVF9SRUFELCAwLCAwLCAwKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjQ0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X2Z1bmNfbW1hcF9vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9mdW5jX21tYXBfb2s9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19tbWFwX29rPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdCogCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X2Z1bmNfbW1hcF9vayIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfb2siID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX29rIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfb2sgPSB5ZXMKKyB0aGVuCisgICAgIEhBVkVfTU1BUD0xCitAQCAtMjI2OSwxMjQgKzQ5NTQsNzcyIEBACisgCisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyMjc0OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CisrYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisgIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KKyBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICAgQ1BQPQorIGZpCisgaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DUFAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorKyAgICBkbworKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKytmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKytjb250aW51ZQorK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKysgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisrICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKytfQUNFT0YKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKythY19wcmVwcm9jX29rPToKKyticmVhaworK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKytkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorKyAgYnJlYWsKKytmaQorKworKyAgICBkb25lCisrICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKysKKytmaQorKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorIGVsc2UKKy0gICAgIyBUaGlzIG11c3QgYmUgaW4gZG91YmxlIHF1b3Rlcywgbm90IHNpbmdsZSBxdW90ZXMsIGJlY2F1c2UgQ1BQIG1heSBnZXQKKy0gICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCistICBDUFA9IiR7Q0MtY2N9IC1FIgorKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CisrJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorK2FjX3ByZXByb2Nfb2s9ZmFsc2UKKytmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKy0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjI4OSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxhc3NlcnQuaD4KKy1TeW50YXggRXJyb3IKKy1FT0YKKy1hY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjI5NTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKy1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCistaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorICAgOgorIGVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIzMDYgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CistU3ludGF4IEVycm9yCistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjIzMTI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKytjb250aW51ZQorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgICMgUGFzc2VzIGJvdGggdGVzdHMuCisrYWNfcHJlcHJvY19vaz06CisrYnJlYWsKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrZG9uZQorKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENQUD0iJHtDQy1jY30gLW5vbG9nbyAtRSIKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyMzIzICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPGFzc2VydC5oPgorLVN5bnRheCBFcnJvcgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMzI5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrZmkKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisrICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCisrY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorKyAgd2hpbGUgOgorKyAgZG8KKysgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKysgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKysgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKysgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworKyAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisrICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisrICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisrICAgIGZpCisrICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKysgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisrICBkb25lCisrICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKytlc2FjCisrCisrICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICAgIGRvbmUKKysgIGRvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKysgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZmkKKytlbHNlCisrICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKKytmaQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorKworKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisrICAgZWxzZQorKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisrIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisrKkdOVSopCisrICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKysqKQorKyAgYWNfY291bnQ9MAorKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKysgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKysgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKysgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKysgICAgZmkKKysgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKysgIGRvbmUKKysgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworK2VzYWMKKysKKysgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICAgIGRvbmUKKysgIGRvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisrICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZmkKKytlbHNlCisrICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorK2ZpCisrCisrICAgZmkKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZmxvYXQuaD4KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9oZWFkZXJfc3RkYz1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKysgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworK19BQ0VPRgorK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENQUD0vbGliL2NwcAorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorIHJtIC1mIGNvbmZ0ZXN0KgorKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKysgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK19BQ0VPRgorK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICA6CisrZWxzZQorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorIHJtIC1mIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCisrCisgZmkKKy0gIENQUD0iJGFjX2N2X3Byb2dfQ1BQIgorKworK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisrICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisrICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKysjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisrIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorKyNlbHNlCisrIyBkZWZpbmUgSVNMT1dFUihjKSBcCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisrI2VuZGlmCisrCisrI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKKytpbnQKKyttYWluICgpCisreworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrICAgICAgcmV0dXJuIDI7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIDoKKyBlbHNlCistICBhY19jdl9wcm9nX0NQUD0iJENQUCIKKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKytmaQorK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKysKKytmaQorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBTVERDX0hFQURFUlMgMQorK19BQ0VPRgorKworIGZpCistZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKyAKKy1mb3IgYWNfaGRyIGluIGludHR5cGVzLmgKKysjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorKworKworKworKworKworKworKworKworKworK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisgZG8KKy1hY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIzNTc6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIzNjIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8JGFjX2hkcj4KKy1FT0YKKy1hY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjM2NzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKy1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCistaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCistZWxzZQorLSAgZWNobyAiJGFjX2VyciIgPiY1CistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKythc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAiID4mNjsgfQorK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKworKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKythY19yZXM9YGV2YWwgJ2FzX3ZhbD0keyckYXNfYWNfSGVhZGVyJ30KKysJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorK2FzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisrX0FDRU9GCisrCisgZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9oZHI9SEFWRV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2hkciAxCistRU9GCistIAorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKworK2RvbmUKKysKKysKKysKKytmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKKytkbworK2FzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKytpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICIgPiY2OyB9CisraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytmaQorK2FjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrZWxzZQorKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKysjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2hlYWRlcl9jb21waWxlcj1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorKworKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICIgPiY2OyB9CisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKytfQUNFT0YKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICBhY19oZWFkZXJfcHJlcHJvYz1ubworK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorKworKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisrCisrICAgIDs7CisrZXNhYworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gIiA+JjY7IH0KKytpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKytmaQorK2FjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrCisrZmkKKythc192YWw9YGV2YWwgJ2FzX3ZhbD0keyckYXNfYWNfSGVhZGVyJ30KKysJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorK19BQ0VPRgorKworIGZpCisrCisgZG9uZQorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm87IHRoZW4KK0BAIC0yMzk1LDcgKzU3MjgsOCBAQAorICBVX0hBVkVfSU5UVFlQRVNfSD0xCisgZmkKKyBpZiB0ZXN0ICIkQ0MiID0gY2NjOyB0aGVuCistIGVjaG8gIiRhY190IiIiQyBjb21waWxlciBzZXQgdG8gQ0NDICR7Q0N9IiAiIDE+JjYKKysgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCJDIGNvbXBpbGVyIHNldCB0byBDQ0MgJHtDQ31cIiAiID4mNQorKyRhc19lY2hvICJcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY2OyB9CisgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgICBhbHBoYSotKi0qKSBVX0hBVkVfSU5UVFlQRVNfSD0wOworICBlc2FjCitAQCAtMjQwMywxNSArNTczNywxNyBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW9zdHJlYW0gb3IgLS13aXRob3V0LWlvc3RyZWFtIHdhcyBnaXZlbi4KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWlvc3RyZWFtIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfaW9zdHJlYW0rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIHdpdGh2YWw9IiR3aXRoX2lvc3RyZWFtIgorLSAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKysgIHdpdGh2YWw9JHdpdGhfaW9zdHJlYW07IGNhc2UgIiR7d2l0aHZhbH0iIGluCisgCQlub25lKSBzdHJlYW1zPW5vbmUgOzsKKyAJCW9sZCkgc3RyZWFtcz0xOTg1MDYgOzsKKyAJCXN0ZCkgc3RyZWFtcz0xOTk3MTEgOzsKKyAJCWF1dG8pIHN0cmVhbXM9IDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIHN0cmVhbXM9CitAQCAtMjQyMSwxMyArNTc1NywxMiBAQAorIFVfSU9TVFJFQU1fU09VUkNFPTAKKyBpZiB0ZXN0IHgkc3RyZWFtcyAhPSB4bm9uZQorIHRoZW4KKy0gICAgCistICAgIGFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisrCisrICAgIGFjX2V4dD1jcHAKKyBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCisrYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisgCisgICAgIE9MRF9DWFhGTEFHUz0iJHtDWFhGTEFHU30iCisgICAgIGNhc2UgIiR7aWN1X2N2X2hvc3RfZnJhZ30iIGluCitAQCAtMjQzNSwxMzkgKzU3NzAsNDgxIEBACisgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1BQSIKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKy0gICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjQ0MDogY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiA+JjUKKy0gICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI0NDIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5Li4uICIgPiY2OyB9CisrCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8aW9zdHJlYW0+CistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDQ5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X2hlYWRlcl9pb3N0cmVhbT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9oZWFkZXJfaW9zdHJlYW09bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfaGVhZGVyX2lvc3RyZWFtPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgaWYgdGVzdCAkaWN1X2N2X2hvc3RfZnJhZyA9IG1oLWN5Z3dpbi1tc3ZjCisgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl9pb3N0cmVhbT15ZXMKKyAgICAgZmkKKy0gICAgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iIDE+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iID4mNjsgfQorICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW9zdHJlYW0gPSB5ZXMKKyAgICAgdGhlbgorICAgICAgICAgVV9JT1NUUkVBTV9TT1VSQ0U9MTk5NzExCisgICAgIGVsc2UKKyAgICAgICAgIENYWEZMQUdTPSIke09MRF9DWFhGTEFHU30iCistICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjQ3MDogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CisrICAgICAgICBhY19leHQ9Y3BwCisrYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIGlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYQ1BQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NYWC1nKyt9IC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLSAgQ1hYQ1BQPSIke0NYWC1nKyt9IC1FIgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI0ODMgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3RkbGliLmg+CistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjI0ODg6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisrICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisrICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKysgICAgZG8KKysgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCisrZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENYWENQUD0vbGliL2NwcAorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKy0gIGFjX2N2X3Byb2dfQ1hYQ1BQPSIkQ1hYQ1BQIgorLWFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NYWC1nKyt9IC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLWZpCistZmkKKy1DWFhDUFA9IiRhY19jdl9wcm9nX0NYWENQUCIKKy1lY2hvICIkYWNfdCIiJENYWENQUCIgMT4mNgorLQorLWFjX3NhZmU9YGVjaG8gImlvc3RyZWFtLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjUxNDogY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmgiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjUxOSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxpb3N0cmVhbS5oPgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTI0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKKy1lbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorKworKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKysgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorK19BQ0VPRgorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKythY19wcmVwcm9jX29rPToKKyticmVhaworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKytkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorKyAgYnJlYWsKKytmaQorKworKyAgICBkb25lCisrICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKysKKytmaQorKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorK2Vsc2UKKysgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQorKyRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KKythY19wcmVwcm9jX29rPWZhbHNlCisrZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIDoKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisrY29udGludWUKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIFBhc3NlcyBib3RoIHRlc3RzLgorK2FjX3ByZXByb2Nfb2s9OgorK2JyZWFrCisgZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrZG9uZQorKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKytmaQorKworK2FjX2V4dD1jcHAKKythY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorKworKworK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmguLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9pb3N0cmVhbV9oK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjY7IH0KKytlbHNlCisrICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCB1c2FiaWxpdHkiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtLmggdXNhYmlsaXR5Li4uICIgPiY2OyB9CisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKyNpbmNsdWRlIDxpb3N0cmVhbS5oPgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKysKKysjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZS4uLiAiID4mNjsgfQorK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGlvc3RyZWFtLmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrZmkKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisrCisrIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKysgICAgOzsKKysgIG5vOnllczoqICkKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorKworKyAgICA7OworK2VzYWMKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmgiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19jdl9oZWFkZXJfaW9zdHJlYW1faD0kYWNfaGVhZGVyX3ByZXByb2MKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY2OyB9CisrCisgZmkKKyAKKysKKyAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oID0geWVzOyB0aGVuCistICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjU0NzogY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiA+JjUKKy0gICAgICAgICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaW9zdHJlYW1fb2snK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjU1MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgb3N0cmVhbSBpcyByZWFsbHkgZGVmaW5lZC4uLiAiID4mNjsgfQorKyAgICAgICAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfaW9zdHJlYW1fb2src2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIG9zdHJlYW0gJnRlc3RvdXQgPSBjb3V0OyB0ZXN0b3V0IDw8ICJ0ZXN0IiA8PCBlbmRsOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI1NTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9pb3N0cmVhbV9vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9pb3N0cmVhbV9vaz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9pb3N0cmVhbV9vaz1ubworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAKKy0gICAgICAgICAgICBlY2hvICIkYWNfdCIiJGFjX2N2X2lvc3RyZWFtX29rIiAxPiY2CisrICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2lvc3RyZWFtX29rIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2lvc3RyZWFtX29rIiA+JjY7IH0KKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9pb3N0cmVhbV9vayA9IHllcworICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgVV9JT1NUUkVBTV9TT1VSQ0U9MTk4NTA2CitAQCAtMjU4NywxMDggKzYyNjQsNDI1IEBACisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYworICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiAxPiYyOyBleGl0IDE7IH0KKysgICAgICAgICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZmkKKyAgICAgZmkKKyBmaQorIAorIGFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrCisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI2MDU6IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2JpZ2VuZGlhbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorLSMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI2MTIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZm5kZWYgX19BUFBMRV9DQ19fCisrCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorKwkgICAgICNlbmRpZgorKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworKworK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKworKwkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworKwkjIHRoZXJlIGFyZSBzb21lIC1hcmNoIGZsYWdzLiAgTm90ZSB0aGF0ICpwcGMqIGFsc28gbWF0Y2hlcworKwkjIHBwYzY0LiAgVGhpcyBjaGVjayBpcyBhbHNvIHJhdGhlciBsZXNzIHRoYW4gaWRlYWwuCisrCWNhc2UgIiR7Q0N9ICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IiBpbiAgIygKKysJICAqLWFyY2gqcHBjKnwqLWFyY2gqaTM4Nip8Ki1hcmNoKng4Nl82NCopIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbDs7CisrCWVzYWMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisrICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKysgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CistaW50IG1haW4oKSB7CisrCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorIAorLSNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgorLSBib2d1cyBlbmRpYW4gbWFjcm9zCistI2VuZGlmCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjYyMzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorK2ludAorK21haW4gKCkKKyt7CisrI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKysJCSAgICAgJiYgTElUVExFX0VORElBTikKKysJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworKwkgICAgICNlbmRpZgorKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjYyNyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorLWludCBtYWluKCkgeworKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorIAorK2ludAorK21haW4gKCkKKyt7CisgI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorLSBub3QgYmlnIGVuZGlhbgorLSNlbmRpZgorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2Mzg6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysJCSBub3QgYmlnIGVuZGlhbgorKwkJI2VuZGlmCisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9jX2JpZ2VuZGlhbj1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9jX2JpZ2VuZGlhbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCistaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCistaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiAxPiYyOyBleGl0IDE7IH0KKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjY1OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLW1haW4gKCkgeworLSAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworLSAgdW5pb24KKy0gIHsKKy0gICAgbG9uZyBsOworLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07CistICB9IHU7CistICB1LmwgPSAxOworLSAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgZmkKKysgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisrICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKysgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKytpbnQKKyttYWluICgpCisreworKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisrCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKysJICAgICAjZW5kaWYKKysKKysgIDsKKysgIHJldHVybiAwOworIH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2NzE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCistICBhY19jdl9jX2JpZ2VuZGlhbj1ubworLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisraW50CisrbWFpbiAoKQorK3sKKysjaWZuZGVmIF9CSUdfRU5ESUFOCisrCQkgbm90IGJpZyBlbmRpYW4KKysJCSNlbmRpZgorKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9jX2JpZ2VuZGlhbj1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWZyIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgICBmaQorKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKysgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisrICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKysgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKytzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisrCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OworKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKysJCWludCB1c2VfYXNjaWkgKGludCBpKSB7CisrCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworKwkJfQorKwkJc2hvcnQgaW50IGViY2RpY19paVtdID0KKysJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisrCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorKwkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKKysJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworKwkJfQorKwkJZXh0ZXJuIGludCBmb287CisrCisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKysJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisrCSAgICBmaQorKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKysJICAgICAgZWxzZQorKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisrCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisrCSAgICAgIGZpCisrCSAgICBmaQorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorIAorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworKworKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKysJICAgICB1bmlvbgorKwkgICAgIHsKKysJICAgICAgIGxvbmcgaW50IGw7CisrCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworKwkgICAgIH0gdTsKKysJICAgICB1LmwgPSAxOworKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9jX2JpZ2VuZGlhbj1ubworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrYWNfY3ZfY19iaWdlbmRpYW49eWVzCisgZmkKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9jX2JpZ2VuZGlhbiIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0geWVzOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0jZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCistRU9GCisgCisrICAgIGZpCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorKyAgIHllcykKKysgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorK19BQ0VPRgorKzs7ICMoCisrICAgbm8pCisrICAgICAgOzsgIygKKysgICB1bml2ZXJzYWwpCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxCisrX0FDRU9GCisrCisrICAgICA7OyAjKAorKyAgICopCisrICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCisrIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCisrIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisgCisgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSBubzsgdGhlbgorIFVfSVNfQklHX0VORElBTj0wCitAQCAtMjcwMSw4NCArNjY5NSwxNTcgQEAKKyAKKyBVX0hBVkVfTkxfTEFOR0lORk9fQ09ERVNFVD0wCisgVV9OTF9MQU5HSU5GT19DT0RFU0VUPS0xCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjcwNjogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19ubF9sYW5naW5mbycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyNzExICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9mdW5jX25sX2xhbmdpbmZvK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIG5sX2xhbmdpbmZvIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgbmxfbGFuZ2luZm8uCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBubF9sYW5naW5mbyBpbm5vY3VvdXNfbmxfbGFuZ2luZm8KKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8oKTsgYmVsb3cuICAqLworLSNpbmNsdWRlIDxhc3NlcnQuaD4KKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIG5sX2xhbmdpbmZvKCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8gKCk7IGJlbG93LgorKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistaW50IG1haW4oKSB7CisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisgCisrI3VuZGVmIG5sX2xhbmdpbmZvCisrCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciBubF9sYW5naW5mbyAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfbmxfbGFuZ2luZm8pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX25sX2xhbmdpbmZvKQorKyNpZiBkZWZpbmVkIF9fc3R1Yl9ubF9sYW5naW5mbyB8fCBkZWZpbmVkIF9fc3R1Yl9fX25sX2xhbmdpbmZvCisgY2hva2UgbWUKKy0jZWxzZQorLW5sX2xhbmdpbmZvKCk7CisgI2VuZGlmCisgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjczNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistZmkKKy0KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydubF9sYW5naW5mb2BcIiA9IHllcyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBubF9sYW5naW5mbyAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm89eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX25sX2xhbmdpbmZvIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIgPSB4IiJ5ZXM7IHRoZW4KKyAgIFVfSEFWRV9OTF9MQU5HSU5GTz0xCisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistVV9IQVZFX05MX0xBTkdJTkZPPTAKKysgIFVfSEFWRV9OTF9MQU5HSU5GTz0wCisgZmkKKyAKKyAKKyBpZiB0ZXN0ICRVX0hBVkVfTkxfTEFOR0lORk8gLWVxIDE7IHRoZW4KKy0gIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI3NTc6IGNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8ncyBhcmd1bWVudCB0byBvYnRhaW4gdGhlIGNvZGVzZXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0PSJ1bmtub3duIgorICAgZm9yIGEgaW4gQ09ERVNFVCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FOyBkbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI3NjQgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyBubF9sYW5naW5mbygkYSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjc3MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0PSIkYSI7IGJyZWFrCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKy0KKy1lY2hvICIkYWNfdCIiJGFjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0IiA+JjY7IH0KKyAgIGlmIHRlc3QgeCRhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0ICE9IHh1bmtub3duCisgICB0aGVuCisgICAgICAgVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQ9MQorQEAgLTI3ODgsNDIgKzY4NTUsNzEgQEAKKyAKKyAKKyAKKy1hY19leHQ9QworLSMgQ1hYRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorK2FjX2V4dD1jcHAKKyBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjgwMDogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbmFtZXNwYWNlX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI4MDUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKythY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbmFtZXNwYWNlIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X25hbWVzcGFjZV9vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICBuYW1lc3BhY2UgeF92ZXJzaW9uIHt2b2lkIGYoKXt9fTsKKyAgICAgbmFtZXNwYWNlIHggPSB4X3ZlcnNpb247CisgICAgIHVzaW5nIG5hbWVzcGFjZSB4X3ZlcnNpb247CistICAgIAorLWludCBtYWluKCkgeworKworK2ludAorK21haW4gKCkKKyt7CisgICAgIGYoKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODE1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfbmFtZXNwYWNlX29rPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X25hbWVzcGFjZV9vaz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9uYW1lc3BhY2Vfb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfbmFtZXNwYWNlX29rIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X25hbWVzcGFjZV9vayIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9uYW1lc3BhY2Vfb2siID4mNjsgfQorIFVfSEFWRV9OQU1FU1BBQ0U9MQorIGlmIHRlc3QgJGFjX2N2X25hbWVzcGFjZV9vayA9IG5vCisgdGhlbgorQEAgLTI4MzEsMTYgKzY5MjcsMTkgQEAKKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwcm9wZXJseSBvdmVycmlkaW5nIG5ldyBhbmQgZGVsZXRlIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjgzNjogY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHJvcGVybHkgb3ZlcnJpZGluZyBuZXcgYW5kIGRlbGV0ZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUuLi4gIiA+JjY7IH0KKyBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OPTAKKyBVX0hBVkVfUExBQ0VNRU5UX05FVz0wCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisraWYgdGVzdCAiJHthY19jdl9vdmVycmlkZV9jeHhfYWxsb2NhdGlvbl9vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjg0MyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICBjbGFzcyBVT2JqZWN0IHsKKyAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7cmV0dXJuIG1hbGxvYyhzaXplKTt9CitAQCAtMjg0OCwzNSArNjk0Nyw2NSBAQAorICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKSB7ZnJlZShwKTt9CisgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCkge2ZyZWUocCk7fQorICAgICB9OworLSAgICAKKy1pbnQgbWFpbigpIHsKKy0gICAgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg1NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNQorKyRhc19lY2hvICIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rID0geWVzCisgdGhlbgorICAgICBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OPTEKKy0gICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHBsYWNlbWVudCBuZXcgYW5kIGRlbGV0ZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI4NzQ6IGNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiID4mNQorLSAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyODc5ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9CisrICAgIGlmIHRlc3QgIiR7YWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgY2xhc3MgVU9iamVjdCB7CisgICAgICAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpIHtyZXR1cm4gbWFsbG9jKHNpemUpO30KK0BAIC0yODg2LDI0ICs3MDE1LDUxIEBACisgICAgICAgICB2b2lkICogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcHRyKSB7IHJldHVybiBwdHI7IH0KKyAgICAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7fQorICAgICAgICAgfTsKKy0gICAgICAgIAorLWludCBtYWluKCkgeworLSAgICAgICAgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg5NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rPW5vCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLSAgICBlY2hvICIkYWNfdCIiJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2siIDE+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2siID4mNQorKyRhc19lY2hvICIkYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vayIgPiY2OyB9CisgICAgIGlmIHRlc3QgJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2sgPSB5ZXMKKyAgICAgdGhlbgorICAgICAgICAgVV9IQVZFX1BMQUNFTUVOVF9ORVc9MQorQEAgLTI5MTMsNTkgKzcwNjksOTYgQEAKKyAKKyAKKyBhY19leHQ9YworLSMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHBvcGVuIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjkyNDogY2hlY2tpbmcgZm9yIHBvcGVuIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wb3Blbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyOTI5ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwb3Blbi4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19wb3BlbitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSBwb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHBvcGVuLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgcG9wZW4gaW5ub2N1b3VzX3BvcGVuCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHBvcGVuKCk7IGJlbG93LiAgKi8KKy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBwb3BlbigpOworKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHBvcGVuICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBwb3BlbgorIAorKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcG9wZW4gKCk7CisgLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCAoX19zdHViX3BvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wb3BlbikKKysjaWYgZGVmaW5lZCBfX3N0dWJfcG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19wb3BlbgorIGNob2tlIG1lCistI2Vsc2UKKy1wb3BlbigpOworICNlbmRpZgorIAorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5NTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj15ZXMiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ncG9wZW5gXCIgPSB5ZXMiOyB0aGVuCistICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CistICA6CistZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gcG9wZW4gKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9mdW5jX3BvcGVuPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19wb3Blbj1ubworK2ZpCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wb3BlbiIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9mdW5jX3BvcGVuIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgkYWNfY3ZfZnVuY19wb3BlbiA9IHh5ZXMKKyB0aGVuCitAQCAtMjk3NSwxMDUgKzcxNjgsMTgxIEBACisgZmkKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgdHpzZXQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyOTgwOiBjaGVja2luZyBmb3IgdHpzZXQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI5ODUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6c2V0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpzZXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfdHpzZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgdHpzZXQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyB0enNldC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIHR6c2V0IGlubm9jdW91c190enNldAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCgpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgdHpzZXQoKTsKKysgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCAoKTsgYmVsb3cuCisrICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKyAKKy1pbnQgbWFpbigpIHsKKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKyAKKysjdW5kZWYgdHpzZXQKKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHR6c2V0ICgpOworIC8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl90enNldCkgfHwgZGVmaW5lZCAoX19zdHViX19fdHpzZXQpCisrI2lmIGRlZmluZWQgX19zdHViX3R6c2V0IHx8IGRlZmluZWQgX19zdHViX19fdHpzZXQKKyBjaG9rZSBtZQorLSNlbHNlCistdHpzZXQoKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDA4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKy1maQorLQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3R6c2V0YFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHR6c2V0ICgpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorKyAgYWNfY3ZfZnVuY190enNldD15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2Z1bmNfdHpzZXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfdHpzZXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY190enNldCIgPiY2OyB9CisgCisgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfdHpzZXQgPSB4eWVzCisgdGhlbgorICAgICBVX1RaU0VUPXR6c2V0CisgZWxzZQorLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX3R6c2V0IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzAzMjogY2hlY2tpbmcgZm9yIF90enNldCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMwMzcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfdHpzZXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpzZXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfX3R6c2V0K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF90enNldCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF90enNldC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIF90enNldCBpbm5vY3VvdXNfX3R6c2V0CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF90enNldCgpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgX3R6c2V0KCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX3R6c2V0ICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBfdHpzZXQKKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIF90enNldCAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfX3R6c2V0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19fdHpzZXQpCisrI2lmIGRlZmluZWQgX19zdHViX190enNldCB8fCBkZWZpbmVkIF9fc3R1Yl9fX190enNldAorIGNob2tlIG1lCistI2Vsc2UKKy1fdHpzZXQoKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDYwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfX3R6c2V0PXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX190enNldD1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nX3R6c2V0YFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIF90enNldCAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfX3R6c2V0PXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19fdHpzZXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfX3R6c2V0IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfX3R6c2V0IiA+JjY7IH0KKyAKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfX3R6c2V0ID0geHllcworICAgICB0aGVuCitAQCAtMzA4MSwxNCArNzM1MCwxNyBAQAorICAgICBmaQorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR6bmFtZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMwODY6IGNoZWNraW5nIGZvciB0em5hbWUiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfdHpuYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMwOTEgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR6bmFtZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdmFyX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZm5kZWYgX19VU0VfUE9TSVgKKyAjZGVmaW5lIF9fVVNFX1BPU0lYCisgI2VuZGlmCitAQCAtMzA5Niw2OCArNzM2OCwxMjYgQEAKKyAjaWZuZGVmIHR6bmFtZSAvKiBGb3IgU0dJLiAgKi8KKyBleHRlcm4gY2hhciAqdHpuYW1lW107IC8qIFJTNjAwMCBhbmQgb3RoZXJzIHJlamVjdCBjaGFyICoqdHpuYW1lLiAgKi8KKyAjZW5kaWYKKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIGF0b2koKnR6bmFtZSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEwNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl92YXJfdHpuYW1lPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3Zhcl90em5hbWU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfdHpuYW1lPW5vCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl90em5hbWUiIDE+JjYKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl92YXJfdHpuYW1lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl90em5hbWUiID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X3Zhcl90em5hbWUgPSB5ZXM7IHRoZW4KKyAgIFVfVFpOQU1FPXR6bmFtZQorIGVsc2UKKy0gIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzEyMTogY2hlY2tpbmcgZm9yIF90em5hbWUiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX3R6bmFtZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMTI2ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90em5hbWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpuYW1lLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl92YXJfX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgIGV4dGVybiBjaGFyICpfdHpuYW1lW107CistICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgYXRvaSgqX3R6bmFtZSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEzNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl92YXJfX3R6bmFtZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfX3R6bmFtZT1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X3Zhcl9fdHpuYW1lPW5vCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl9fdHpuYW1lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190em5hbWUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdmFyX190em5hbWUiID4mNjsgfQorICAgICBpZiB0ZXN0ICRhY19jdl92YXJfX3R6bmFtZSA9IHllczsgdGhlbgorICAgICAgIFVfVFpOQU1FPV90em5hbWUKKyAgICAgZmkKKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0aW1lem9uZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMxNTU6IGNoZWNraW5nIGZvciB0aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl90aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMTYwICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWV6b25lLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl92YXJfdGltZXpvbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZuZGVmIF9fVVNFX1BPU0lYCisgI2RlZmluZSBfX1VTRV9QT1NJWAorICNlbmRpZgorQEAgLTMxNjYsODYgKzc0OTYsMTcwIEBACisgI2VuZGlmCisgI2luY2x1ZGUgPHRpbWUuaD4KKyAKKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIHRpbWV6b25lID0gMTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTc0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X3Zhcl90aW1lem9uZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfdGltZXpvbmU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfdGltZXpvbmU9bm8KKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX3RpbWV6b25lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX3RpbWV6b25lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl90aW1lem9uZSIgPiY2OyB9CisgVV9IQVZFX1RJTUVaT05FPTAKKyBpZiB0ZXN0ICRhY19jdl92YXJfdGltZXpvbmUgPSB5ZXM7IHRoZW4KKyAgIFVfVElNRVpPTkU9dGltZXpvbmUKKyAgIFVfSEFWRV9USU1FWk9ORT0xCisgZWxzZQorLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9fdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozMTkzOiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fX3RpbWV6b25lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMxOTggImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fdGltZXpvbmUuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Zhcl9fX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgICAjaW5jbHVkZSA8dGltZS5oPgorLSAgCistaW50IG1haW4oKSB7CisrCisraW50CisrbWFpbiAoKQorK3sKKyAgIF9fdGltZXpvbmUgPSAxOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMDY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfdmFyX19fdGltZXpvbmU9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdmFyX19fdGltZXpvbmU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfX190aW1lem9uZT1ubworIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX190aW1lem9uZSIgMT4mNgorK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjY7IH0KKyAgIGlmIHRlc3QgJGFjX2N2X3Zhcl9fX3RpbWV6b25lID0geWVzOyB0aGVuCisgICAgIFVfVElNRVpPTkU9X190aW1lem9uZQorICAgICBVX0hBVkVfVElNRVpPTkU9MQorICAgZWxzZQorLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX3RpbWV6b25lIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzIyNDogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fdGltZXpvbmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzIyOSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF90aW1lem9uZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdmFyX190aW1lem9uZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICAjaW5jbHVkZSA8dGltZS5oPgorLSAgICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgICBfdGltZXpvbmUgPSAxOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfdmFyX190aW1lem9uZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfX3RpbWV6b25lPW5vCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdmFyX190aW1lem9uZT1ubworIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX3RpbWV6b25lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl92YXJfX3RpbWV6b25lIiA+JjY7IH0KKyAgICAgaWYgdGVzdCAkYWNfY3ZfdmFyX190aW1lem9uZSA9IHllczsgdGhlbgorICAgICAgIFVfVElNRVpPTkU9X3RpbWV6b25lCisgICAgICAgVV9IQVZFX1RJTUVaT05FPTEKK0BAIC0zMjU1LDM3MSArNzY2OSw4MzUgQEAKKyAKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMyNjA6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzI2NSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkYXJnLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxmbG9hdC5oPgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMjczOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQ4X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50OF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLQorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMyOTAgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19jdl90eXBlX2ludDhfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDhfdCkpCisrICAgICAgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAoKGludDhfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgOgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysJYWNfY3ZfdHlwZV9pbnQ4X3Q9eWVzCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMzA4ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLUVPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gIGVncmVwICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIDoKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9oZWFkZXJfc3RkYz1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ4X3QiID0geCIieWVzOyB0aGVuCisgICA6CisgZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMzMjkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKy0jZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKy0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQorLWludCBtYWluICgpIHsgaW50IGk7IGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKy1pZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKSBleGl0KDIpOworLWV4aXQgKDApOyB9CisgCistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMzQwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCistdGhlbgorLSAgOgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKy0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZnIgY29uZnRlc3QqCistZmkKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKytfQUNFT0YKKyAKKyBmaQorLWZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfc3RkYyIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0jZGVmaW5lIFNURENfSEVBREVSUyAxCistRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50OF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludDhfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50OF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGFjX2N2X3R5cGVfdWludDhfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKHVpbnQ4X3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKCh1aW50OF90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKwlhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzM2NDogY2hlY2tpbmcgZm9yIGludDhfdCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfaW50OF90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMzNjkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50OF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDhfdD15ZXMKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDhfdD1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50OF90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ4X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKy1FT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzM5NzogY2hlY2tpbmcgZm9yIHVpbnQ4X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzQwMiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSl1aW50OF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCistZWxzZQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV91aW50OF90PW5vCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50OF90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDhfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ4X3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorIAorLWZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQ4X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ4X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgdWludDhfdCB1bnNpZ25lZCBjaGFyCistRU9GCisrX0FDRU9GCisgCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50MTZfdCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjM0MzA6IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQxNl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDM0MzUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50MTZfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV9pbnQxNl90PXllcworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MTZfdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludDE2X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCisgICBhY19jdl90eXBlX2ludDE2X3Q9bm8KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mIChpbnQxNl90KSkKKysgICAgICAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgoaW50MTZfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdHlwZV9pbnQxNl90PXllcworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworIAorIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX2ludDE2X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDE2X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQxNl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50MTZfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX2ludDE2X3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAjZGVmaW5lIGludDE2X3Qgc2lnbmVkIHNob3J0CistRU9GCisrX0FDRU9GCisgCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDE2X3QiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozNDYzOiBjaGVja2luZyBmb3IgdWludDE2X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQxNl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDM0NjggImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDE2X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3R5cGVfdWludDE2X3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MTZfdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQxNl90Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfdWludDE2X3Q9bm8KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICh1aW50MTZfdCkpCisrICAgICAgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAoKHVpbnQxNl90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX3VpbnQxNl90PXllcworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworIAorIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQxNl90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IG5vOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQxNl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDE2X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MTZfdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIDoKKytlbHNlCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgdWludDE2X3QgdW5zaWduZWQgc2hvcnQKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzQ5NjogY2hlY2tpbmcgZm9yIGludDMyX3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDMyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzUwMSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDMyX3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQzMl90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50MzJfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfaW50MzJfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDMyX3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKChpbnQzMl90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX2ludDMyX3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50MzJfdCIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MzJfdCA9IG5vOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDMyX3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50MzJfdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIDoKKytlbHNlCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgaW50MzJfdCBzaWduZWQgbG9uZworLUVPRgorK19BQ0VPRgorIAorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHVpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzUyOTogY2hlY2tpbmcgZm9yIHVpbnQzMl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV91aW50MzJfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzNTM0ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpZiBTVERDX0hFQURFUlMKKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNlbmRpZgorLUVPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gIGVncmVwICIoXnxbXmEtekEtWl8wLTldKXVpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX3VpbnQzMl90PXllcworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDMyX3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50MzJfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MzJfdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCisgICBhY19jdl90eXBlX3VpbnQzMl90PW5vCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAodWludDMyX3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKCh1aW50MzJfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdHlwZV91aW50MzJfdD15ZXMKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKyAKKyBmaQorLWVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV91aW50MzJfdCIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDMyX3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MzJfdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpbnQzMl90IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDMyX3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAjZGVmaW5lIHVpbnQzMl90IHVuc2lnbmVkIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQ2NF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzU2MjogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzU2NyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQ2NF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDY0X3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ2NF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50NjRfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfaW50NjRfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDY0X3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKChpbnQ2NF90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX2ludDY0X3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKy1maQorLWVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9pbnQ2NF90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ2NF90ID0gbm87IHRoZW4KKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50NjRfdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl90eXBlX2ludDY0X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ2NF90IiA9IHgiInllczsgdGhlbgorKyAgOgorK2Vsc2UKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSBpbnQ2NF90IHNpZ25lZCBsb25nIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aW50NjRfdCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjM1OTU6IGNoZWNraW5nIGZvciB1aW50NjRfdCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzYwMCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSl1aW50NjRfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludDY0X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgYWNfY3ZfdHlwZV91aW50NjRfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKHVpbnQ2NF90KSkKKysgICAgICAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgodWludDY0X3QpKSkKKysJICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIDoKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X3R5cGVfdWludDY0X3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDY0X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ2NF90ID0gbm87IHRoZW4KKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDY0X3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHgiInllczsgdGhlbgorKyAgOgorK2Vsc2UKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSB1aW50NjRfdCB1bnNpZ25lZCBsb25nIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorQEAgLTM2ODAsMTExICs4NTU4LDIzMiBAQAorIGZpCisgCisgCistYWNfc2FmZT1gZWNobyAid2NoYXIuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmgiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozNjg2OiBjaGVja2luZyBmb3Igd2NoYXIuaCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzNjkxICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXIuaC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3djaGFyX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNQorKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorK2Vsc2UKKysgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3Y2hhci5oIHVzYWJpbGl0eSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2NoYXIuaCB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisgI2luY2x1ZGUgPHdjaGFyLmg+CistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjM2OTY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisrCisrIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDx3Y2hhci5oPgorK19BQ0VPRgorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrZmkKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisrCisrIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisrICAgIDs7CisrICBubzp5ZXM6KiApCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKysKKysgICAgOzsKKytlc2FjCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXIuaC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3djaGFyX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICBhY19jdl9oZWFkZXJfd2NoYXJfaD0kYWNfaGVhZGVyX3ByZXByb2MKKyBmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY2OyB9CisrCisrZmkKKysKKyAKKyBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID0gbm8KKyB0aGVuCisgICAgIFVfSEFWRV9XQ0hBUl9IPTAKKyAgICAgVV9IQVZFX1dDU0NQWT0wCisgZWxzZQorLSAgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCistRU9GCisrX0FDRU9GCisgCisgICAgIFVfSEFWRV9XQ0hBUl9IPTEKKy0gICAgICAgIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzcyOTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB3Y3NjcHkiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zZWFyY2hfd2NzY3B5JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKy1hY19jdl9zZWFyY2hfd2NzY3B5PSJubyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzczNiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgd2NzY3B5KCk7CistCistaW50IG1haW4oKSB7Cistd2NzY3B5KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzQ3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3NlYXJjaF93Y3NjcHk9Im5vbmUgcmVxdWlyZWQiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHdjc2NweS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgd2NzY3B5ICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHdjc2NweSAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytmb3IgYWNfbGliIGluICcnIHdjcyB3OyBkbworKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKysgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorKyAgZWxzZQorKyAgICBhY19yZXM9LWwkYWNfbGliCisrICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKysgIGZpCisrICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X3NlYXJjaF93Y3NjcHk9JGFjX3JlcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorLXRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJubyIgJiYgZm9yIGkgaW4gd2NzIHc7IGRvCistTElCUz0iLWwkaSAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzc1OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgd2NzY3B5KCk7CistCistaW50IG1haW4oKSB7Cistd2NzY3B5KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzY5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3NlYXJjaF93Y3NjcHk9Ii1sJGkiCistYnJlYWsKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCisrICBicmVhaworIGZpCistcm0gLWYgY29uZnRlc3QqCisgZG9uZQorLUxJQlM9IiRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCisrICA6CisrZWxzZQorKyAgYWNfY3Zfc2VhcmNoX3djc2NweT1ubworIGZpCisrcm0gY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF93Y3NjcHkiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgPiY2OyB9CisrYWNfcmVzPSRhY19jdl9zZWFyY2hfd2NzY3B5CisraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4KKysgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9zZWFyY2hfd2NzY3B5IiAxPiY2CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF93Y3NjcHkiICE9ICJubyI7IHRoZW4KKy0gIHRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3djc2NweSAkTElCUyIKKy0gIAorLWVsc2UgOgorLSAgCisgZmkKKysKKyAgICAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF93Y3NjcHkiICE9IG5vOyB0aGVuCisgICAgICAgVV9IQVZFX1dDU0NQWT0xCisgICAgIGVsc2UKK0BAIC0zNzk1LDE3ICs4Nzk0LDIwIEBACisgCisgCisgYWNfZGVmYXVsdF9zaXplb2Zfd2NoYXJfdD00CistZWNobyAkYWNfbiAiY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzgwMDogY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2l6ZW9mX3djaGFyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHdjaGFyX3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICBhY19jdl9zaXplb2Zfd2NoYXJfdD0kYWNfZGVmYXVsdF9zaXplb2Zfd2NoYXJfdAorIGVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzODA4ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZiBTVERDX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2VuZGlmCitAQCAtMzgyMSwzMCArODgyMyw1NyBAQAorICAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZih3Y2hhcl90KSk7CisgICBleGl0KDApOworIH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM4MjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGFjX2N2X3NpemVvZl93Y2hhcl90PWBjYXQgY29uZnRlc3R2YWxgCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9MAorKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyggZXhpdCAkYWNfc3RhdHVzICkKKythY19jdl9zaXplb2Zfd2NoYXJfdD0wCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorKworIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl9zaXplb2Zfd2NoYXJfdCIgMT4mNgorLWNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjY7IH0KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAkYWNfY3Zfc2l6ZW9mX3djaGFyX3QKKy1FT0YKKytfQUNFT0YKKyAKKyAKKyBVX1NJWkVPRl9XQ0hBUl9UPSRhY19jdl9zaXplb2Zfd2NoYXJfdAorIGlmIHRlc3QgJFVfU0laRU9GX1dDSEFSX1QgPSAwOyB0aGVuCisgCWlmIHRlc3QgJFVfSEFWRV9XQ0hBUl9IPTE7IHRoZW4KKy0JICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBUaGVyZSBpcyB3Y2hhci5oIGJ1dCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGlzIDAiIDE+JjI7IGV4aXQgMTsgfQorKwkgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAlmaQorIGZpCisgCitAQCAtMzg1NSwxMyArODg4NCwxNCBAQAorICNBQ19TVUJTVChFQ0hPX04pCisgI0FDX1NVQlNUKEVDSE9fQykKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2V4dHJhcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dHJhcyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBleHRyYXM9dHJ1ZSA7OworIAkJbm8pICBleHRyYXM9ZmFsc2UgOzsKKy0JCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCQllc2FjCisgZWxzZQorICAgZXh0cmFzPXRydWUKK0BAIC0zODczLDEzICs4OTAzLDE0IEBACisgZWxzZQorICAgRVhUUkFTX1RSVUU9JyMnCisgZmkKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2V4dHJhcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dHJhcyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBpY3Vpbz10cnVlIDs7CisgCQlubykgIGljdWlvPWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIGljdWlvPXRydWUKK0BAIC0zODkyLDEzICs4OTIzLDE0IEBACisgICBJQ1VJT19UUlVFPScjJworIGZpCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxheW91dCBvciAtLWRpc2FibGUtbGF5b3V0IHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGF5b3V0IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9sYXlvdXQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9sYXlvdXQiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9sYXlvdXQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAJCXllcykgbGF5b3V0PXRydWUgOzsKKyAJCW5vKSAgbGF5b3V0PWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxheW91dCIgMT4mMjsgZXhpdCAxOyB9IDs7CisrCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGF5b3V0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGF5b3V0IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIGxheW91dD10cnVlCitAQCAtMzkxMSwxNiArODk0MywxOCBAQAorICAgTEFZT1VUX1RSVUU9JyMnCisgZmkKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRhdGEtcGFja2FnaW5nIG9yIC0td2l0aG91dC1kYXRhLXBhY2thZ2luZyB3YXMgZ2l2ZW4uCisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYXRhLXBhY2thZ2luZyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2RhdGFfcGFja2FnaW5nK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSIkd2l0aF9kYXRhX3BhY2thZ2luZyIKKy0gIGNhc2UgIiR7d2l0aHZhbH0iIGluCisrICB3aXRodmFsPSR3aXRoX2RhdGFfcGFja2FnaW5nOyBjYXNlICIke3dpdGh2YWx9IiBpbgorICAgICAgICAgICAgICAgICBmaWxlc3xhcmNoaXZlfGxpYnJhcnkpIGRhdGFwYWNrYWdpbmc9JHdpdGh2YWwgOzsKKyAJCWF1dG8pIGRhdGFwYWNrYWdpbmc9JHdpdGh2YWwgOzsKKyAJCWNvbW1vbikgZGF0YXBhY2thZ2luZz1hcmNoaXZlIDs7CisgCQlkbGwpIGRhdGFwYWNrYWdpbmc9bGlicmFyeSA7OworIAkJc3RhdGljKSBkYXRhcGFja2FnaW5nPXN0YXRpYyA7OworLQkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAJCWVzYWMKKyBlbHNlCisgICBkYXRhcGFja2FnaW5nPQorQEAgLTM5MzksMTMgKzg5NzMsMTQgQEAKKyAKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFwcGVkIG9yIC0tZGlzYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX21hcHBlZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX21hcHBlZCIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX21hcHBlZDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgbWFwcGVkPWFyY2hpdmUgOzsKKyAgICAgICAgICAgICAgICBubykgIG1hcHBlZD1saWJyYXJ5IDs7CistICAgICAgICAgICAgICAgKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiAxPiYyOyBleGl0IDE7IH0gOzsKKysgICAgICAgICAgICAgICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbWFwcGVkOyB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nIG5vdyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW1hcHBlZDsgdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZyBub3ciID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCWVzYWMKKyBlbHNlCisgICBtYXBwZWQ9CitAQCAtMzk1NSwxNCArODk5MCwxOCBAQAorIGlmIHRlc3QgeCIkbWFwcGVkIiAhPSB4OyB0aGVuCisgICAgIGNhc2UgJG1hcHBlZCBpbgorIAlhcmNoaXZlKQorLSAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiAxPiYyCisrICAgIAkgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorIAkgICAgOzsKKyAJbGlicmFyeSkKKy0gICAgCSAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9bGlicmFyeSBpbnN0ZWFkIG9mIC0tZGlzYWJsZS1tYXBwZWQiIDE+JjIKKysgICAgCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiYyO30KKyAJICAgIDs7CisgICAgIGVzYWMKKyAgICAgaWYgdGVzdCB4IiRkYXRhcGFja2FnaW5nIiAhPSB4IC1hIHgiJG1hcHBlZCIgIT0geCIkZGF0YXBhY2thZ2luZyI7IHRoZW4KKy0JeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjb25mbGljdGluZyB2YWx1ZXMgdXNlZCBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIGFuZCBkZXByZWNhdGVkIC0tZW5hYmxlLW1hcHBlZCIgMT4mMjsgZXhpdCAxOyB9CisrCXsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25mbGljdGluZyB2YWx1ZXMgdXNlZCBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIGFuZCBkZXByZWNhdGVkIC0tZW5hYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICBmaQorICAgICBkYXRhcGFja2FnaW5nPSRtYXBwZWQKKyBmaQorQEAgLTM5ODgsMTIgKzkwMjcsMTIgQEAKKyAKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozOTkzOiBjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UiID4mNQorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicmFyeS1zdWZmaXggb3IgLS13aXRob3V0LWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfbGlicmFyeV9zdWZmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIHdpdGh2YWw9IiR3aXRoX2xpYnJhcnlfc3VmZml4IgorLSAgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorKyAgd2l0aHZhbD0kd2l0aF9saWJyYXJ5X3N1ZmZpeDsgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorIGVsc2UKKyAgIElDVUxJQlNVRkZJWD0KKyBmaQorQEAgLTQwMDIsNyArOTA0MSw4IEBACisgaWYgdGVzdCAiJG1zZyIgPSAiIjsgdGhlbgorICAgICBtc2c9bm9uZQorIGZpCistZWNobyAiJGFjX3QiIiRtc2ciIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbXNnIiA+JjUKKyskYXNfZWNobyAiJG1zZyIgPiY2OyB9CisgCisgaWYgdGVzdCAiJElDVUxJQlNVRkZJWCIgIT0gIiIKKyB0aGVuCitAQCAtNDAxNCwxMyArOTA1NCwxNCBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyBvciAtLWRpc2FibGUtdGVzdHMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV90ZXN0cyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3Rlc3RzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCQl5ZXMpIHRlc3RzPXRydWUgOzsKKyAJCW5vKSAgdGVzdHM9ZmFsc2UgOzsKKy0JCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGVzdHMiIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGVzdHMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCQllc2FjCisgZWxzZQorICAgdGVzdHM9dHJ1ZQorQEAgLTQwMzMsMTMgKzkwNzQsMTQgQEAKKyAgIFRFU1RTX1RSVUU9JyMnCisgZmkKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2FtcGxlcyBvciAtLWRpc2FibGUtc2FtcGxlcyB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNhbXBsZXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3NhbXBsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zYW1wbGVzIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfc2FtcGxlczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBzYW1wbGVzPXRydWUgOzsKKyAJCW5vKSAgc2FtcGxlcz1mYWxzZSA7OworLQkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zYW1wbGVzIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zYW1wbGVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc2FtcGxlcyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAJCWVzYWMKKyBlbHNlCisgICBzYW1wbGVzPXRydWUKK0BAIC00MDk2LDcgKzkxMzgsNyBAQAorIAorIAorIGNhc2UgIiR7aG9zdH0iIGluCistCSotKi1ocHV4KikgCQorKwkqLSotaHB1eCopCisgCQlpZiB0ZXN0ICIke2ljdV9jdl9ob3N0X2ZyYWd9IiA9ICJtaC1ocHV4LWNjIjsgdGhlbgorIAkJCWZvciBmaWxlIGluIHNhbXBsZXMvZGF0ZS9kYXRlIFwKKyAJCQkgIHNhbXBsZXMvY2FsL2NhbCB0ZXN0L2NpbnRsdHN0L2NpbnRsdHN0IFwKK0BAIC00MTQxLDUxNyArOTE4MywxMjk5IEBACisgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgXCQoVEhSRUFEU0NYWEZMQUdTKSIKKyBmaQorIAorLXRyYXAgJycgMSAyIDE1CistY2F0ID4gY29uZmNhY2hlIDw8XEVPRgorK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpY3VkZWZzLm1rIE1ha2VmaWxlIGRhdGEvTWFrZWZpbGUgZGF0YS9pY3Vwa2cuaW5jIGNvbW1vbi9NYWtlZmlsZSBjb25maWcvTWFrZWZpbGUuaW5jIGkxOG4vTWFrZWZpbGUgbGF5b3V0L01ha2VmaWxlIGxheW91dGV4L01ha2VmaWxlIGlvL01ha2VmaWxlIGV4dHJhL01ha2VmaWxlIGV4dHJhL3Vjb252L01ha2VmaWxlIGV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIHN0dWJkYXRhL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIHRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUgdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUgdG9vbHMvZ2VucmIvTWFrZWZpbGUgdG9vbHMvZ2VudWNhL01ha2VmaWxlIHRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIHRvb2xzL2dlbmNtbi9NYWtlZmlsZSB0b29scy9nZW5jbnZhbC9NYWtlZmlsZSB0b29scy9nZW5uYW1lcy9NYWtlZmlsZSB0b29scy9nZW50ZXN0L01ha2VmaWxlIHRvb2xzL2dlbm5vcm0vTWFrZWZpbGUgdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUgdG9vbHMvZ2VuYnJrL01ha2VmaWxlIHRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSB0b29scy90b29sdXRpbC9NYWtlZmlsZSB0b29scy9kdW1wY2UvTWFrZWZpbGUgdGVzdC9NYWtlZmlsZSB0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIHRlc3QvaGRydHN0L01ha2VmaWxlIHRlc3QvaW50bHRlc3QvTWFrZWZpbGUgdGVzdC9jaW50bHRzdC9NYWtlZmlsZSB0ZXN0L2lvdGVzdC9NYWtlZmlsZSB0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdG1hcC9NYWtlZmlsZSB0ZXN0L2xldGVzdC9NYWtlZmlsZSB0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUgc2FtcGxlcy9NYWtlZmlsZSBzYW1wbGVzL2RhdGUvTWFrZWZpbGUgc2FtcGxlcy9jYWwvTWFrZWZpbGUgc2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUgY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCIKKysKKytjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyAjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKy0jIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLgorLSMgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisrIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorICMKKy0jIEJ5IGRlZmF1bHQsIGNvbmZpZ3VyZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLAorLSMgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFlvdSBjYW4gZ2l2ZSBjb25maWd1cmUKKy0jIHRoZSAtLWNhY2hlLWZpbGU9RklMRSBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlIGZpbGU7IHRoYXQgaXMKKy0jIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxscyBjb25maWd1cmUgc2NyaXB0cyBpbgorLSMgc3ViZGlyZWN0b3JpZXMsIHNvIHRoZXkgc2hhcmUgdGhlIGNhY2hlLgorLSMgR2l2aW5nIC0tY2FjaGUtZmlsZT0vZGV2L251bGwgZGlzYWJsZXMgY2FjaGluZywgZm9yIGRlYnVnZ2luZyBjb25maWd1cmUuCistIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlCistIyAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKysjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorICMKKy1FT0YKKysjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKysjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisrIyBmb2xsb3dpbmcgdmFsdWVzLgorKworK19BQ0VPRgorKworICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisgIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKy0jIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisrIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyAjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyAjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorLShzZXQpIDI+JjEgfAorLSAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKy0gICphY19zcGFjZT1cICopCistICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUgc3Vic3RpdHV0aW9uCistICAgICMgdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCistICAgIHNlZCAtbiBcCistICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwKKy0gICAgICAtZSAicy9eXFwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXFwpPVxcKC4qXFwpL1xcMT1cJHtcXDE9J1xcMid9L3AiCistICAgIDs7CistICAqKQorLSAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorLSAgICBzZWQgLW4gLWUgJ3MvXlwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXCk9XCguKlwpL1wxPSR7XDE9XDJ9L3AnCistICAgIDs7CistICBlc2FjID4+IGNvbmZjYWNoZQorLWlmIGNtcCAtcyAkY2FjaGVfZmlsZSBjb25mY2FjaGU7IHRoZW4KKy0gIDoKKy1lbHNlCistICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCistICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorLSAgICBjYXQgY29uZmNhY2hlID4gJGNhY2hlX2ZpbGUKKysoCisrICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisrICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICBjYXNlICRhY192YWwgaW4gIygKKysgICAgKiR7YXNfbmx9KikKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisrICAgICAgZXNhYworKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKysgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrCisrICAoc2V0KSAyPiYxIHwKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisrICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorKyAgICAgIHNlZCAtbiBcCisrCSJzLycvJ1xcXFwnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKysgICAgICA7OyAjKAorKyAgICAqKQorKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKysgICAgICA7OworKyAgICBlc2FjIHwKKysgICAgc29ydAorKykgfAorKyAgc2VkICcKKysgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorKyAgICAgdCBjbGVhcgorKyAgICAgOmNsZWFyCisrICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisrICAgICB0IGVuZAorKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisrICAgICA6ZW5kJyA+PmNvbmZjYWNoZQorK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKysgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgICBlbHNlCistICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgZmkKKyBmaQorIHJtIC1mIGNvbmZjYWNoZQorIAorLXRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CistCisgdGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorICMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgorIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAKKy0jIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBvbmx5IGV4ZWN1dGUKKy0jIHRoZSBmaXJzdCBzZXQgb2YgZG91YmxlLWNvbG9uIHJ1bGVzLCBzbyByZW1vdmUgaXQgaWYgbm90IG5lZWRlZC4KKy0jIElmIHRoZXJlIGlzIGEgY29sb24gaW4gdGhlIHBhdGgsIHdlIG5lZWQgdG8ga2VlcCBpdC4KKy1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorLSAgYWNfdnBzdWI9Jy9eWyAJXSpWUEFUSFsgCV0qPVteOl0qJC9kJworLWZpCisrREVGUz0tREhBVkVfQ09ORklHX0gKKyAKKy10cmFwICdybSAtZiAkQ09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CisrYWNfbGlib2Jqcz0KKythY19sdGxpYm9ianM9CisrZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisrICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisrICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKysgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisrICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKKysgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworK2RvbmUKKytMSUJPQkpTPSRhY19saWJvYmpzCisgCistREVGUz0tREhBVkVfQ09ORklHX0gKKytMVExJQk9CSlM9JGFjX2x0bGlib2JqcworIAorLSMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorLTogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKyAKKy1lY2hvIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTCistcm0gLWYgJENPTkZJR19TVEFUVVMKKy1jYXQgPiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLSMhIC9iaW4vc2gKKy0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KKysKKysKKys6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisrYWNfd3JpdGVfZmFpbD0wCisrYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKKythY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9CisrY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKysjISAkU0hFTEwKKysjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisgIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCistIyBUaGlzIGRpcmVjdG9yeSB3YXMgY29uZmlndXJlZCBhcyBmb2xsb3dzLAorLSMgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CistIworLSMgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzCistIworICMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKy0jIGNvbmZpZ3VyZSwgaXMgaW4gLi9jb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKysjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisgCistYWNfY3NfdXNhZ2U9IlVzYWdlOiAkQ09ORklHX1NUQVRVUyBbLS1yZWNoZWNrXSBbLS12ZXJzaW9uXSBbLS1oZWxwXSIKKy1mb3IgYWNfb3B0aW9uCisrZGVidWc9ZmFsc2UKKythY19jc19yZWNoZWNrPWZhbHNlCisrYWNfY3Nfc2lsZW50PWZhbHNlCisrU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrCisrIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKysKKysKKysjIFBBVEggbmVlZHMgQ1IKKysjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCisrYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisrYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisrYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCisrYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworKworK2FzX25sPScKKysnCisrZXhwb3J0IGFzX25sCisrIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KKythc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisraWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworKyAgYXNfZWNob19uPSdwcmludGYgJXMnCisrZWxzZQorKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisrICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisrICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKysgIGVsc2UKKysgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKysgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKysgICAgICBhcmc9JDE7CisrICAgICAgY2FzZSAkYXJnIGluCisrICAgICAgKiIkYXNfbmwiKikKKysJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisrCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisrICAgICAgZXNhYzsKKysgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisrICAgICcKKysgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisrICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisrICBmaQorKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworK2ZpCisrCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIFBBVEhfU0VQQVJBVE9SPToKKysgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKysgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKysgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIH0KKytmaQorKworKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfdW5zZXQ9dW5zZXQKKytlbHNlCisrICBhc191bnNldD1mYWxzZQorK2ZpCisrCisrCisrIyBJRlMKKysjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKytJRlM9IiAiIgkkYXNfbmwiCisrCisrIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKytjYXNlICQwIGluCisrICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisrICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCistICBjYXNlICJcJGFjX29wdGlvbiIgaW4KKy0gIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorLSAgICBlY2hvICJydW5uaW5nIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iCistICAgIGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworLSAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYpCistICAgIGVjaG8gIiRDT05GSUdfU1RBVFVTIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCistICAgIGV4aXQgMCA7OworLSAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCistICAgIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKKy0gICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDEgOzsKKy0gIGVzYWMKKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKy1hY19naXZlbl9JTlNUQUxMPSIkSU5TVEFMTCIKKysgICAgIDs7CisrZXNhYworKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKysjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKytpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisrICBhc19teXNlbGY9JDAKKytmaQorK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKysgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICB7IChleGl0IDEpOyBleGl0IDE7IH0KKytmaQorIAorLXRyYXAgJ3JtIC1mciBgZWNobyAiaWN1ZGVmcy5tayBcCistCQlNYWtlZmlsZSBcCistCQlkYXRhL01ha2VmaWxlIGRhdGEvaWN1cGtnLmluYyBcCistCQljb21tb24vTWFrZWZpbGUgY29uZmlnL01ha2VmaWxlLmluYyBpMThuL01ha2VmaWxlIFwKKy0JCWxheW91dC9NYWtlZmlsZSBcCistCQlsYXlvdXRleC9NYWtlZmlsZSBcCistCQlpby9NYWtlZmlsZSBcCistCQlleHRyYS9NYWtlZmlsZSBcCistCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZQorLQkJc3R1YmRhdGEvTWFrZWZpbGUgXAorLQkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSB0b29scy9tYWtlY29udi9NYWtlZmlsZSBcCistCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCistCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY2NvZGUvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wcm9wcy9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vuc3ByZXAvTWFrZWZpbGUgXAorLQkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCistCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKy0JCXRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCistCQl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvTWFrZWZpbGUgXAorLQkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorLQkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCistCQl0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIFwKKy0JCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorLQkJdGVzdC90ZXN0bWFwL01ha2VmaWxlIFwKKy0JCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCistCQlzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBcCistCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCistCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIGNvbW1vbi9pY3VjZmcuaCIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorLUVPRgorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLQorLSMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluIGNvbmZpZy5zdGF0dXMuCistc2VkICdzLyVAL0BALzsgcy9AJS9AQC87IHMvJWdcJC9AZy87IC9AZ1wkL3MvW1xcXFwmJV0vXFxcXCYvZzsKKy0gcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKy0kYWNfdnBzdWIKKy0kZXh0cmFzdWIKKy1zJUBTSEVMTEAlJFNIRUxMJWcKKy1zJUBDRkxBR1NAJSRDRkxBR1MlZworLXMlQENQUEZMQUdTQCUkQ1BQRkxBR1MlZworLXMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworLXMlQEZGTEFHU0AlJEZGTEFHUyVnCistcyVAREVGU0AlJERFRlMlZworLXMlQExERkxBR1NAJSRMREZMQUdTJWcKKy1zJUBMSUJTQCUkTElCUyVnCistcyVAZXhlY19wcmVmaXhAJSRleGVjX3ByZWZpeCVnCistcyVAcHJlZml4QCUkcHJlZml4JWcKKy1zJUBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCUkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSVnCistcyVAYmluZGlyQCUkYmluZGlyJWcKKy1zJUBzYmluZGlyQCUkc2JpbmRpciVnCistcyVAbGliZXhlY2RpckAlJGxpYmV4ZWNkaXIlZworLXMlQGRhdGFkaXJAJSRkYXRhZGlyJWcKKy1zJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCistcyVAc2hhcmVkc3RhdGVkaXJAJSRzaGFyZWRzdGF0ZWRpciVnCistcyVAbG9jYWxzdGF0ZWRpckAlJGxvY2Fsc3RhdGVkaXIlZworLXMlQGxpYmRpckAlJGxpYmRpciVnCistcyVAaW5jbHVkZWRpckAlJGluY2x1ZGVkaXIlZworLXMlQG9sZGluY2x1ZGVkaXJAJSRvbGRpbmNsdWRlZGlyJWcKKy1zJUBpbmZvZGlyQCUkaW5mb2RpciVnCistcyVAbWFuZGlyQCUkbWFuZGlyJWcKKy1zJUBQQUNLQUdFQCUkUEFDS0FHRSVnCistcyVAVkVSU0lPTkAlJFZFUlNJT04lZworLXMlQExJQl9WRVJTSU9OQCUkTElCX1ZFUlNJT04lZworLXMlQExJQl9WRVJTSU9OX01BSk9SQCUkTElCX1ZFUlNJT05fTUFKT1IlZworLXMlQFVOSUNPREVfVkVSU0lPTkAlJFVOSUNPREVfVkVSU0lPTiVnCistcyVAQ0NAJSRDQyVnCistcyVAQ1hYQCUkQ1hYJWcKKy1zJUBJTlNUQUxMX1BST0dSQU1AJSRJTlNUQUxMX1BST0dSQU0lZworLXMlQElOU1RBTExfU0NSSVBUQCUkSU5TVEFMTF9TQ1JJUFQlZworLXMlQElOU1RBTExfREFUQUAlJElOU1RBTExfREFUQSVnCistcyVAU1RSSVBAJSRTVFJJUCVnCistcyVAVV9NQUtFQCUkVV9NQUtFJWcKKy1zJUBET1hZR0VOQCUkRE9YWUdFTiVnCistcyVAaG9zdEAlJGhvc3QlZworLXMlQGhvc3RfYWxpYXNAJSRob3N0X2FsaWFzJWcKKy1zJUBob3N0X2NwdUAlJGhvc3RfY3B1JWcKKy1zJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKKy1zJUBob3N0X29zQCUkaG9zdF9vcyVnCistcyVARVhFRVhUQCUkRVhFRVhUJWcKKy1zJUBBUkZMQUdTQCUkQVJGTEFHUyVnCistcyVAQ09NUElMRV9MSU5LX0VOVlZBUkAlJENPTVBJTEVfTElOS19FTlZWQVIlZworLXMlQExJQl9NQCUkTElCX00lZworLXMlQEVOQUJMRV9TSEFSRURAJSRFTkFCTEVfU0hBUkVEJWcKKy1zJUBFTkFCTEVfU1RBVElDQCUkRU5BQkxFX1NUQVRJQyVnCistcyVARU5BQkxFX0RFQlVHQCUkRU5BQkxFX0RFQlVHJWcKKy1zJUBFTkFCTEVfUkVMRUFTRUAlJEVOQUJMRV9SRUxFQVNFJWcKKy1zJUBSQU5MSUJAJSRSQU5MSUIlZworLXMlQEFSQCUkQVIlZworLXMlQFVfRElTQUJMRV9SRU5BTUlOR0AlJFVfRElTQUJMRV9SRU5BTUlORyVnCistcyVAVV9FTkFCTEVfVFJBQ0lOR0AlJFVfRU5BQkxFX1RSQUNJTkclZworLXMlQEVOQUJMRV9SUEFUSEAlJEVOQUJMRV9SUEFUSCVnCistcyVAVV9JTkxJTkVAJSRVX0lOTElORSVnCistcyVAVEhSRUFEU19UUlVFQCUkVEhSRUFEU19UUlVFJWcKKy1zJUBJQ1VfVVNFX1RIUkVBRFNAJSRJQ1VfVVNFX1RIUkVBRFMlZworLXMlQEhBVkVfTU1BUEAlJEhBVkVfTU1BUCVnCistcyVAR0VOQ0NPREVfQVNTRU1CTFlAJSRHRU5DQ09ERV9BU1NFTUJMWSVnCistcyVAQ1BQQCUkQ1BQJWcKKy1zJUBVX0hBVkVfSU5UVFlQRVNfSEAlJFVfSEFWRV9JTlRUWVBFU19IJWcKKy1zJUBDWFhDUFBAJSRDWFhDUFAlZworLXMlQFVfSU9TVFJFQU1fU09VUkNFQCUkVV9JT1NUUkVBTV9TT1VSQ0UlZworLXMlQFVfSVNfQklHX0VORElBTkAlJFVfSVNfQklHX0VORElBTiVnCistcyVAVV9IQVZFX05MX0xBTkdJTkZPQCUkVV9IQVZFX05MX0xBTkdJTkZPJWcKKy1zJUBVX0hBVkVfTkxfTEFOR0lORk9fQ09ERVNFVEAlJFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUJWcKKy1zJUBVX05MX0xBTkdJTkZPX0NPREVTRVRAJSRVX05MX0xBTkdJTkZPX0NPREVTRVQlZworLXMlQFVfSEFWRV9OQU1FU1BBQ0VAJSRVX0hBVkVfTkFNRVNQQUNFJWcKKy1zJUBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OQCUkVV9PVkVSUklERV9DWFhfQUxMT0NBVElPTiVnCistcyVAVV9IQVZFX1BMQUNFTUVOVF9ORVdAJSRVX0hBVkVfUExBQ0VNRU5UX05FVyVnCistcyVAVV9IQVZFX1BPUEVOQCUkVV9IQVZFX1BPUEVOJWcKKy1zJUBVX1RaU0VUQCUkVV9UWlNFVCVnCistcyVAVV9UWk5BTUVAJSRVX1RaTkFNRSVnCistcyVAVV9IQVZFX1RJTUVaT05FQCUkVV9IQVZFX1RJTUVaT05FJWcKKy1zJUBVX1RJTUVaT05FQCUkVV9USU1FWk9ORSVnCistcyVASEFWRV9JTlQ4X1RAJSRIQVZFX0lOVDhfVCVnCistcyVASEFWRV9VSU5UOF9UQCUkSEFWRV9VSU5UOF9UJWcKKy1zJUBIQVZFX0lOVDE2X1RAJSRIQVZFX0lOVDE2X1QlZworLXMlQEhBVkVfVUlOVDE2X1RAJSRIQVZFX1VJTlQxNl9UJWcKKy1zJUBIQVZFX0lOVDMyX1RAJSRIQVZFX0lOVDMyX1QlZworLXMlQEhBVkVfVUlOVDMyX1RAJSRIQVZFX1VJTlQzMl9UJWcKKy1zJUBIQVZFX0lOVDY0X1RAJSRIQVZFX0lOVDY0X1QlZworLXMlQEhBVkVfVUlOVDY0X1RAJSRIQVZFX1VJTlQ2NF9UJWcKKy1zJUBVX0hBVkVfV0NIQVJfSEAlJFVfSEFWRV9XQ0hBUl9IJWcKKy1zJUBVX0hBVkVfV0NTQ1BZQCUkVV9IQVZFX1dDU0NQWSVnCistcyVAVV9TSVpFT0ZfV0NIQVJfVEAlJFVfU0laRU9GX1dDSEFSX1QlZworLXMlQEVYVFJBU19UUlVFQCUkRVhUUkFTX1RSVUUlZworLXMlQElDVUlPX1RSVUVAJSRJQ1VJT19UUlVFJWcKKy1zJUBMQVlPVVRfVFJVRUAlJExBWU9VVF9UUlVFJWcKKy1zJUB0aGVzeXNjb25mZGlyQCUkdGhlc3lzY29uZmRpciVnCistcyVAdGhlZGF0YWRpckAlJHRoZWRhdGFkaXIlZworLXMlQHRoZWxpYmRpckAlJHRoZWxpYmRpciVnCistcyVAcGtnaWN1ZGF0YWRpckAlJHBrZ2ljdWRhdGFkaXIlZworLXMlQHRoZXBrZ2ljdWRhdGFkaXJAJSR0aGVwa2dpY3VkYXRhZGlyJWcKKy1zJUBEQVRBX1BBQ0tBR0lOR19DUFBGTEFHU0AlJERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTJWcKKy1zJUBEQVRBX1BBQ0tBR0lOR19NT0RFQCUkREFUQV9QQUNLQUdJTkdfTU9ERSVnCistcyVASUNVTElCU1VGRklYQCUkSUNVTElCU1VGRklYJWcKKy1zJUBVX0hBVkVfTElCX1NVRkZJWEAlJFVfSEFWRV9MSUJfU1VGRklYJWcKKy1zJUBJQ1VMSUJTVUZGSVhDTkFNRUAlJElDVUxJQlNVRkZJWENOQU1FJWcKKy1zJUBURVNUU19UUlVFQCUkVEVTVFNfVFJVRSVnCistcyVAU0FNUExFU19UUlVFQCUkU0FNUExFU19UUlVFJWcKKy1zJUBJQ1VEQVRBX0NIQVJAJSRJQ1VEQVRBX0NIQVIlZworLXMlQHBsYXRmb3JtQCUkcGxhdGZvcm0lZworLXMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZUAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZSVnCistcyVAcGxhdGZvcm1fbWFrZV9mcmFnbWVudEAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnQlZworLXMlQGxkX3JwYXRoX3N1ZkAlJGxkX3JwYXRoX3N1ZiVnCistcyVAQUlYX1NITElCQCUkQUlYX1NITElCJWcKKy0KKy1DRU9GCistRU9GCistCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgorLQorLSMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCistIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCistYWNfbWF4X3NlZF9jbWRzPTkwICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2VkIHNjcmlwdC4KKy1hY19maWxlPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorLWFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorLWFjX2VuZD0kYWNfbWF4X3NlZF9jbWRzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKy1hY19tb3JlX2xpbmVzPToKKy1hY19zZWRfY21kcz0iIgorLXdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworLSAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCistICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCisrIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCisrZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrZG9uZQorK1BTMT0nJCAnCisrUFMyPSc+ICcKKytQUzQ9JysgJworKworKyMgTkxTIG51aXNhbmNlcy4KKytMQ19BTEw9QworK2V4cG9ydCBMQ19BTEwKKytMQU5HVUFHRT1DCisrZXhwb3J0IExBTkdVQUdFCisrCisrIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorKyAgYXNfZXhwcj1leHByCisrZWxzZQorKyAgYXNfZXhwcj1mYWxzZQorK2ZpCisrCisraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKKytlbHNlCisrICBhc19iYXNlbmFtZT1mYWxzZQorK2ZpCisrCisrCisrIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWC8iJDAiIHwKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisrCisrICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisrICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisrICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKysgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisrICAuICIuLyRhc19tZS5saW5lbm8iCisrICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKysgIGV4aXQKKyt9CisrCisrCisraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc19kaXJuYW1lPWRpcm5hbWUKKytlbHNlCisrICBhc19kaXJuYW1lPWZhbHNlCisrZmkKKysKKytFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorK2Nhc2UgYGVjaG8gLW4geGAgaW4KKystbiopCisrICBjYXNlIGBlY2hvICd4XGMnYCBpbgorKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisrICAqKSAgIEVDSE9fQz0nXGMnOzsKKysgIGVzYWM7OworKyopCisrICBFQ0hPX049Jy1uJzs7CisrZXNhYworK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKysgIGFzX2V4cHI9ZXhwcgorK2Vsc2UKKysgIGFzX2V4cHI9ZmFsc2UKKytmaQorKworK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisrICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCisrZWxzZQorKyAgcm0gLWYgY29uZiQkLmRpcgorKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorK2ZpCisraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICAgIGFzX2xuX3M9J2xuIC1zJworKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKysgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorKyAgICAgIGFzX2xuX3M9J2NwIC1wJworKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgICAgYXNfbG5fcz1sbgorICAgZWxzZQorLSAgICBzZWQgIiR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKysgICAgYXNfbG5fcz0nY3AgLXAnCisgICBmaQorLSAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LnMkYWNfZmlsZTsgdGhlbgorLSAgICBhY19tb3JlX2xpbmVzPWZhbHNlCistICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorLSAgZWxzZQorLSAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCistICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCistICAgIGVsc2UKKy0gICAgICBhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZSIKKy0gICAgZmkKKy0gICAgYWNfZmlsZT1gZXhwciAkYWNfZmlsZSArIDFgCistICAgIGFjX2JlZz0kYWNfZW5kCistICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKy0gIGZpCistZG9uZQorLWlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gIGFjX3NlZF9jbWRzPWNhdAorLWZpCistRU9GCistCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCistCistQ09ORklHX0ZJTEVTPVwke0NPTkZJR19GSUxFUy0iaWN1ZGVmcy5tayBcCistCQlNYWtlZmlsZSBcCistCQlkYXRhL01ha2VmaWxlIGRhdGEvaWN1cGtnLmluYyBcCistCQljb21tb24vTWFrZWZpbGUgY29uZmlnL01ha2VmaWxlLmluYyBpMThuL01ha2VmaWxlIFwKKy0JCWxheW91dC9NYWtlZmlsZSBcCistCQlsYXlvdXRleC9NYWtlZmlsZSBcCistCQlpby9NYWtlZmlsZSBcCistCQlleHRyYS9NYWtlZmlsZSBcCistCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZQorLQkJc3R1YmRhdGEvTWFrZWZpbGUgXAorLQkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSB0b29scy9tYWtlY29udi9NYWtlZmlsZSBcCistCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCistCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY2NvZGUvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wcm9wcy9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vuc3ByZXAvTWFrZWZpbGUgXAorLQkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCistCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKy0JCXRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCistCQl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvTWFrZWZpbGUgXAorLQkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorLQkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCistCQl0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIFwKKy0JCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorLQkJdGVzdC90ZXN0bWFwL01ha2VmaWxlIFwKKy0JCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCistCQlzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBcCistCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCistCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIn0KKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCistZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19GSUxFUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KKy0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKy0gIGNhc2UgIiRhY19maWxlIiBpbgorLSAgKjoqKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJVteOl0qOiUlJ2AKKy0gICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CistICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworLSAgZXNhYworK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wJworK2ZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKyAKKy0gICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLCB0b3Bfc3JjZGlyLCBhbmQgSU5TVEFMTCBmb3Igc3ViZGlyZWN0b3JpZXMuCisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD06CisrZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKytmaQorIAorLSAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCistICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorLSAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCistICAgICMgVGhlIGZpbGUgaXMgaW4gYSBzdWJkaXJlY3RvcnkuCistICAgIHRlc3QgISAtZCAiJGFjX2RpciIgJiYgbWtkaXIgIiRhY19kaXIiCistICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKy0gICAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gICAgYWNfZG90cz1gZWNobyAkYWNfZGlyX3N1ZmZpeHxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKytpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc190ZXN0X3g9J3Rlc3QgLXgnCisrZWxzZQorKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgIGVsc2UKKy0gICAgYWNfZGlyX3N1ZmZpeD0gYWNfZG90cz0KKysgICAgYXNfbHNfTF9vcHRpb249CisgICBmaQorKyAgYXNfdGVzdF94PScKKysgICAgZXZhbCBzaCAtYyAnXCcnCisrICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisrCXRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKwktKilzZXQgIi4vJDEiOzsKKysJZXNhYzsKKysJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKysJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorKyAgICAnXCcnIHNoCisrICAnCisrZmkKKythc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisrCisrCisrZXhlYyA2PiYxCisrCisrIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKysjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKysjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorK2FjX2xvZz0iCisrVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworKworKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisrICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisrICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisrICAkICQwICRACisgCistICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorLSAgLikgIHNyY2Rpcj0uCistICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorLSAgICAgIGVsc2UgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgOyBmaSA7OworLSAgLyopIHNyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IjsgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKy0gICopICMgUmVsYXRpdmUgcGF0aC4KKy0gICAgc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIkYWNfZGlyX3N1ZmZpeCIKKy0gICAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworLSAgZXNhYworK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorKyIKKysKKytfQUNFT0YKKysKKytjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKysiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7CisrZXNhYworKworK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisrIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKKytlc2FjCisgCistICBjYXNlICIkYWNfZ2l2ZW5fSU5TVEFMTCIgaW4KKy0gIFsvJF0qKSBJTlNUQUxMPSIkYWNfZ2l2ZW5fSU5TVEFMTCIgOzsKKy0gICopIElOU1RBTEw9IiRhY19kb3RzJGFjX2dpdmVuX0lOU1RBTEwiIDs7CistICBlc2FjCisgCistICBlY2hvIGNyZWF0aW5nICIkYWNfZmlsZSIKKy0gIHJtIC1mICIkYWNfZmlsZSIKKy0gIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBgZWNobyAkYWNfZmlsZV9pbnxzZWQgJ3MlLiovJSUnYCBieSBjb25maWd1cmUuIgorLSAgY2FzZSAiJGFjX2ZpbGUiIGluCistICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKy0jICRjb25maWd1cmVfaW5wdXQiIDs7CistICAqKSBhY19jb21zdWI9IDs7CisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorK2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKKytjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorKworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKythY19jc191c2FnZT0iXAorK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKysKKytVc2FnZTogJDAgW09QVElPTl0uLi4gW0ZJTEVdLi4uCisrCisrICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKysgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKysgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKysgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisrICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisrICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisrCisrQ29uZmlndXJhdGlvbiBmaWxlczoKKyskY29uZmlnX2ZpbGVzCisrCisrQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorKyRjb25maWdfaGVhZGVycworKworK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorK2FjX2NzX3ZlcnNpb249IlxcCisrY29uZmlnLnN0YXR1cworK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MywKKysgIHdpdGggb3B0aW9ucyBcXCJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorKworK0NvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorKworK2FjX3B3ZD0nJGFjX3B3ZCcKKytzcmNkaXI9JyRzcmNkaXInCisrSU5TVEFMTD0nJElOU1RBTEwnCisrdGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorK2FjX25lZWRfZGVmYXVsdHM9OgorK3doaWxlIHRlc3QgJCMgIT0gMAorK2RvCisrICBjYXNlICQxIGluCisrICAtLSo9KikKKysgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKysgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorKyAgICBhY19zaGlmdD06CisrICAgIDs7CisrICAqKQorKyAgICBhY19vcHRpb249JDEKKysgICAgYWNfb3B0YXJnPSQyCisrICAgIGFjX3NoaWZ0PXNoaWZ0CisrICAgIDs7CisgICBlc2FjCisgCistICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorLSAgc2VkIC1lICIkYWNfY29tc3ViCistcyVAY29uZmlndXJlX2lucHV0QCUkY29uZmlndXJlX2lucHV0JWcKKy1zJUBzcmNkaXJAJSRzcmNkaXIlZworLXMlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKy1zJUBJTlNUQUxMQCUkSU5TVEFMTCVnCistIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiAkYWNfZmlsZQorLWZpOyBkb25lCistcm0gLWYgY29uZnRlc3QucyoKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKysgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorKyAgICBhY19jc19yZWNoZWNrPTogOzsKKysgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKysgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKysgICAgZGVidWc9OiA7OworKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKysgICAgJGFjX3NoaWZ0CisrICAgIGNhc2UgJGFjX29wdGFyZyBpbgorKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworKyAgICBlc2FjCisrICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAnJGFjX29wdGFyZyciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorKyAgICAkYWNfc2hpZnQKKysgICAgY2FzZSAkYWNfb3B0YXJnIGluCisrICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAnJGFjX29wdGFyZyciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZSB8IC0taCkKKysgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKKytUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIC0taGVscCB8IC0taGVsIHwgLWggKQorKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKysgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKysgICAgYWNfY3Nfc2lsZW50PTogOzsKKysKKysgICMgVGhpcyBpcyBhbiBlcnJvci4KKysgIC0qKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysKKysgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiCisrICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisgCistIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKy0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCistIworLSMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKy1hY19kQT0ncyVeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKKy1hY19kQj0nXChbIAldWyAJXSpcKVteIAldKiVcMSNcMicKKy1hY19kQz0nXDMnCistYWNfZEQ9JyVnJworLSMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGggdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCistYWNfdUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCistYWNfdUI9J1woWyAJXVwpJVwxI1wyZGVmaW5lXDMnCistYWNfdUM9JyAnCistYWNfdUQ9J1w0JWcnCistIyBhY19lIHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKy1hY19lQT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKKy1hY19lQj0nJCVcMSNcMmRlZmluZVwzJworLWFjX2VDPScgJworLWFjX2VEPSclZycKKy0KKy1pZiB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iICE9IHNldDsgdGhlbgorLUVPRgorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLSAgQ09ORklHX0hFQURFUlM9ImNvbW1vbi9pY3VjZmcuaCIKKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCistZmkKKy1mb3IgYWNfZmlsZSBpbiAuLiAkQ09ORklHX0hFQURFUlM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCistICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCistICBjYXNlICIkYWNfZmlsZSIgaW4KKy0gICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCistICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworLSAgKikgYWNfZmlsZV9pbj0iJHthY19maWxlfS5pbiIgOzsKKyAgIGVzYWMKKysgIHNoaWZ0CisrZG9uZQorKworK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorIAorLSAgZWNobyBjcmVhdGluZyAkYWNfZmlsZQorK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKysgIGV4ZWMgNj4vZGV2L251bGwKKysgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCisrZmkKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKysgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKysgIHNoaWZ0CisrICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisrICBleHBvcnQgQ09ORklHX1NIRUxMCisrICBleGVjICJcJEAiCisrZmkKKyAKKy0gIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gY29uZnRlc3Qub3V0CistICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorLSAgY2F0ICRhY19maWxlX2lucHV0cyA+IGNvbmZ0ZXN0LmluCistCistRU9GCistCistIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBjb25mdGVzdC52YWxzIHRoYXQgc3Vic3RpdHV0ZXMKKy0jIHRoZSBwcm9wZXIgdmFsdWVzIGludG8gY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIEFuZCBmaXJzdDoKKy0jIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorLSMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cy4KKy1ybSAtZiBjb25mdGVzdC52YWxzCistY2F0ID4gY29uZnRlc3QuaGRyIDw8XEVPRgorLXMvW1xcJiVdL1xcJi9nCistcyVbXFwkYF0lXFwmJWcKKy1zJSNkZWZpbmUgXChbQS1aYS16X11bQS1aYS16MC05X10qXCkgKlwoLipcKSUke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSVncAorLXMlYWNfZCVhY191JWdwCistcyVhY191JWFjX2UlZ3AKKy1FT0YKKy1zZWQgLW4gLWYgY29uZnRlc3QuaGRyIGNvbmZkZWZzLmggPiBjb25mdGVzdC52YWxzCistcm0gLWYgY29uZnRlc3QuaGRyCistCistIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKy0jIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKy1jYXQgPj4gY29uZnRlc3QudmFscyA8PFxFT0YKKy1zJV5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiUvKiAmICovJQorLUVPRgorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytleGVjIDU+PmNvbmZpZy5sb2cKKyt7CisrICBlY2hvCisrICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworK19BU0JPWAorKyAgJGFzX2VjaG8gIiRhY19sb2ciCisrfSA+JjUKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytfQUNFT0YKKyAKKy0jIEJyZWFrIHVwIGNvbmZ0ZXN0LnZhbHMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24KKy0jIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAKKy1ybSAtZiBjb25mdGVzdC50YWlsCistd2hpbGUgOgorKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworIGRvCistICBhY19saW5lcz1gZ3JlcCAtYyAuIGNvbmZ0ZXN0LnZhbHNgCistICAjIGdyZXAgLWMgZ2l2ZXMgZW1wdHkgb3V0cHV0IGZvciBhbiBlbXB0eSBmaWxlIG9uIHNvbWUgQUlYIHN5c3RlbXMuCistICBpZiB0ZXN0IC16ICIkYWNfbGluZXMiIHx8IHRlc3QgIiRhY19saW5lcyIgLWVxIDA7IHRoZW4gYnJlYWs7IGZpCistICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gY29uZnRlc3QuZnJhZy4KKy0gIGVjaG8gJyAgY2F0ID4gY29uZnRlc3QuZnJhZyA8PENFT0YnID4+ICRDT05GSUdfU1RBVFVTCistICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnZhbHMgPj4gJENPTkZJR19TVEFUVVMKKy0gIGVjaG8gJ0NFT0YKKy0gIHNlZCAtZiBjb25mdGVzdC5mcmFnIGNvbmZ0ZXN0LmluID4gY29uZnRlc3Qub3V0CistICBybSAtZiBjb25mdGVzdC5pbgorLSAgbXYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0LmluCistJyA+PiAkQ09ORklHX1NUQVRVUworLSAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnZhbHMgPiBjb25mdGVzdC50YWlsCistICBybSAtZiBjb25mdGVzdC52YWxzCistICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnZhbHMKKy1kb25lCistcm0gLWYgY29uZnRlc3QudmFscworLQorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKy0gIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaAorLSAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiBjb25mdGVzdC5oCistICBjYXQgY29uZnRlc3QuaW4gPj4gY29uZnRlc3QuaAorLSAgcm0gLWYgY29uZnRlc3QuaW4KKy0gIGlmIGNtcCAtcyAkYWNfZmlsZSBjb25mdGVzdC5oIDI+L2Rldi9udWxsOyB0aGVuCistICAgIGVjaG8gIiRhY19maWxlIGlzIHVuY2hhbmdlZCIKKy0gICAgcm0gLWYgY29uZnRlc3QuaAorKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorKyAgICAiY29tbW9uL2ljdWNmZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb21tb24vaWN1Y2ZnLmgiIDs7CisrICAgICJpY3VkZWZzLm1rIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGljdWRlZnMubWsiIDs7CisrICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKysgICAgImRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgImRhdGEvaWN1cGtnLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL2ljdXBrZy5pbmMiIDs7CisrICAgICJjb21tb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL01ha2VmaWxlIiA7OworKyAgICAiY29uZmlnL01ha2VmaWxlLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb25maWcvTWFrZWZpbGUuaW5jIiA7OworKyAgICAiaTE4bi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpMThuL01ha2VmaWxlIiA7OworKyAgICAibGF5b3V0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dC9NYWtlZmlsZSIgOzsKKysgICAgImxheW91dGV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dGV4L01ha2VmaWxlIiA7OworKyAgICAiaW8vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW8vTWFrZWZpbGUiIDs7CisrICAgICJleHRyYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHRyYS9NYWtlZmlsZSIgOzsKKysgICAgImV4dHJhL3Vjb252L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3Vjb252L01ha2VmaWxlIiA7OworKyAgICAiZXh0cmEvc2NycHRydW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0cmEvc2NycHRydW4vTWFrZWZpbGUiIDs7CisrICAgICJzdHViZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzdHViZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9jdGVzdGZ3L01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5yYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5yYi9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbnVjYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW51Y2EvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5jY29kZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jY29kZS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbmNtbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbW4vTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5jbnZhbC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbnZhbC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2VudGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW50ZXN0L01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5ub3JtL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5wbmFtZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5wbmFtZS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbmJyay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5icmsvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2ljdXN3YXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL3BrZ2RhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZHVtcGNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2R1bXBjZS9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvdGVzdGRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvaGRydHN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvaGRydHN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9pbnRsdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2ludGx0ZXN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9jaW50bHRzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9pb3Rlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9pb3Rlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3Rlc3RtYXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0bWFwL01ha2VmaWxlIiA7OworKyAgICAidGVzdC9sZXRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9sZXRlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90aHJlYWR0ZXN0L01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzYW1wbGVzL01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9kYXRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSIgOzsKKysgICAgInNhbXBsZXMvY2FsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvY2FsL01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUiIDs7CisrICAgICJjb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiIDs7CisrCisrICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKyAgZXNhYworK2RvbmUKKysKKysKKysjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisrIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisrIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCisraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKysgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisrICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworK2ZpCisrCisrIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisrIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKysjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorKyRkZWJ1ZyB8fAorK3sKKysgIHRtcD0KKysgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworKycgMAorKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyt9CisrIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisrCisreworKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisrICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorK30gIHx8CisreworKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKysgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorK30gfHwKKyt7CisrICAgJGFzX2VjaG8gIiRhc19tZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrfQorKworKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKysjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgorK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisrCisrCisrYWNfY3I9JworJworK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKKytpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorKyAgYWNfY3NfYXdrX2NyPSdcXHInCisrZWxzZQorKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorK2ZpCisrCisrZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKKytfQUNFT0YKKysKKysKKyt7CisrICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorKyAgZWNobyAiX0FDRU9GIgorK30gPmNvbmYkJHN1YnMuc2ggfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKysgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisrICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKysgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGVsc2UKKysgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKysgIGZpCisrZG9uZQorK3JtIC1mIGNvbmYkJHN1YnMuc2gKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCisrX0FDRU9GCisrc2VkIC1uICcKKytoCisrcy9eL1NbIi87IHMvIS4qLyJdPS8KKytwCisrZworK3MvXlteIV0qIS8vCisrOnJlcGwKKyt0IHJlcGwKKytzLyciJGFjX2RlbGltIickLy8KKyt0IGRlbGltCisrOm5sCisraAorK3MvXCguXHsxNDhcfVwpLiovXDEvCisrdCBtb3JlMQorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KKytwCisrbgorK2IgcmVwbAorKzptb3JlMQorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KKytwCisrZworK3MvLlx7MTQ4XH0vLworK3QgbmwKKys6ZGVsaW0KKytoCisrcy9cKC5cezE0OFx9XCkuKi9cMS8KKyt0IG1vcmUyCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KKytwCisrYgorKzptb3JlMgorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KKytwCisrZworK3MvLlx7MTQ4XH0vLworK3QgZGVsaW0KKysnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisrL15bXiIiXS97CisrICBOCisrICBzL1xuLy8KKyt9CisrJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorK3JtIC1mIGNvbmYkJHN1YnMuYXdrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrX0FDQVdLCisrY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKysgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisrICBGUyA9ICIHIgorKworK30KKyt7CisrICBsaW5lID0gJCAwCisrICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKysgIHN1YnN0ZWQgPSAwCisrICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisrICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisrICAgIGtleSA9IGZpZWxkW2ldCisrICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisrICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisrICAgICAgdmFsdWUgPSBTW2tleV0KKysgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisrICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKysgICAgICBzdWJzdGVkID0gMQorKyAgICB9IGVsc2UKKysgICAgICBsZW4gKz0gMSArIGtleWxlbgorKyAgfQorKworKyAgcHJpbnQgbGluZQorK30KKysKKytfQUNBV0sKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorK2Vsc2UKKysgIGNhdAorK2ZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCisrICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytfQUNFT0YKKysKKysjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKysjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisrIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisrICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKKytzLzoqXCQoc3JjZGlyKToqLzovCisrcy86Klwke3NyY2Rpcn06Ki86LworK3MvOipAc3JjZGlyQDoqLzovCisrcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCisrcy86KiQvLworK3MvXltePV0qPVsJIF0qJC8vCisrfScKKytmaQorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisrCisrIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisrIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgorK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KKytjYXQgPiIkdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKKytCRUdJTiB7CisrX0FDRU9GCisrCisrIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKysjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisrIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorKworKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKysjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKysgIGFjX3Q9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgZWxzZQorLSAgICAjIFJlbW92ZSBsYXN0IHNsYXNoIGFuZCBhbGwgdGhhdCBmb2xsb3dzIGl0LiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgZGlybmFtZS4KKy0gICAgICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorLSAgICAgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorLSAgICAgICMgVGhlIGZpbGUgaXMgaW4gYSBzdWJkaXJlY3RvcnkuCistICAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKysgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKysgIGZpCisrZG9uZQorKworKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorKyMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAorKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisrCisrYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKKytzZWQgLW4gJworK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZworK3QgcnNldAorKzpyc2V0Cisrcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KKyt0IGRlZgorK2QKKys6ZGVmCisrcy9cXCQvLworK3QgYnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDMiL3AKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorK2QKKys6YnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKKyt0IGNvbnQKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAorK3QgY29udAorK2QKKys6Y29udAorK24KKytzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKKyt0IGNsZWFyCisrOmNsZWFyCisrcy9cXCQvLworK3QgYnNubGMKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKKytkCisrOmJzbmxjCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCisrYiBjb250CisrJyA8Y29uZmRlZnMuaCB8IHNlZCAnCisrcy8nIiRhY19kZWxpbSInLyJcXFwKKysiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorKyAgRlMgPSAiByIKKyt9CisrL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisrICBsaW5lID0gXCQgMAorKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisrICBpZiAoYXJnWzFdID09ICIjIikgeworKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorKyAgICBtYWMxID0gYXJnWzNdCisrICB9IGVsc2UgeworKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisrICAgIG1hYzEgPSBhcmdbMl0KKysgIH0KKysgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKysgIG1hY3JvID0gbWFjMlsxXQorKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisrICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisrICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisrICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKysgICAgbmV4dAorKyAgfSBlbHNlIHsKKysgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisrICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKysgICAgICBuZXh0CisrICAgIH0KKysgIH0KKyt9CisreyBwcmludCB9CisrX0FDQVdLCisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorKworKworK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgICIKKytzaGlmdAorK2ZvciBhY190YWcKKytkbworKyAgY2FzZSAkYWNfdGFnIGluCisrICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisrICA6W0ZITF0qOiopOzsKKysgIDpMKiB8IDpDKjoqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgJGFjX3RhZyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdGFnICRhY190YWciID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisrICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworKyAgZXNhYworKyAgYWNfc2F2ZV9JRlM9JElGUworKyAgSUZTPToKKysgIHNldCB4ICRhY190YWcKKysgIElGUz0kYWNfc2F2ZV9JRlMKKysgIHNoaWZ0CisrICBhY19maWxlPSQxCisrICBzaGlmdAorKworKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisrICA6W0ZIXSkKKysgICAgYWNfZmlsZV9pbnB1dHM9CisrICAgIGZvciBhY19mCisrICAgIGRvCisrICAgICAgY2FzZSAkYWNfZiBpbgorKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKysgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisrCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisrCSAgIGNhc2UgJGFjX2YgaW4KKysJICAgW1xcLyRdKikgZmFsc2U7OworKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisrCSAgIGVzYWMgfHwKKysJICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworKyAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJyRhY19mJyIKKysgICAgZG9uZQorKworKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorKyAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisrICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisrICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKysJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKysJYCcgYnkgY29uZmlndXJlLicKKysgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIGZpCisrICAgICMgTmV1dHJhbGl6ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3MuCisrICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorKyAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwKKysgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisrICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworKyAgICBlc2FjCisrCisrICAgIGNhc2UgJGFjX3RhZyBpbgorKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiIgXAorKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgICAgZXNhYworKyAgICA7OworKyAgZXNhYworKworKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CisrJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgIHsgYXNfZGlyPSIkYWNfZGlyIgorKyAgY2FzZSAkYXNfZGlyIGluICMoCisrICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisrICBlc2FjCisrICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CisrICAgIGFzX2RpcnM9CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisrICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKysgICAgICBlc2FjCisrICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKysgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisrICAgIGRvbmUKKysgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrICBhY19idWlsZGRpcj0uCisrCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrCisrICBjYXNlICRhY19tb2RlIGluCisrICA6RikKKysgICMKKysgICMgQ09ORklHX0ZJTEUKKysgICMKKysKKysgIGNhc2UgJElOU1RBTEwgaW4KKysgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKysgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworKyAgZXNhYworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKysjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisrIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCisrYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CisrCisrYWNfc2VkX2RhdGFyb290PScKKysvZGF0YXJvb3RkaXIvIHsKKysgIHAKKysgIHEKKyt9CisrL0BkYXRhZGlyQC9wCisrL0Bkb2NkaXJAL3AKKysvQGluZm9kaXJAL3AKKysvQGxvY2FsZWRpckAvcAorKy9AbWFuZGlyQC9wCisrJworK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKysqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisrKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKysgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKysgIHMmQGRvY2RpckAmJGRvY2RpciZnCisrICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisrICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKysgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKytlc2FjCisrX0FDRU9GCisrCisrIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKythY19zZWRfZXh0cmE9IiRhY192cHN1YgorKyRleHRyYXN1YgorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKys6dAorKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKytzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CisrcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CisrcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CisrcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKKytzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKKytzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKytzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKKytzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CisrJGFjX2RhdGFyb290ZGlyX2hhY2sKKysiCisrZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKysgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKyt0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisrCisrICBybSAtZiAiJHRtcC9zdGRpbiIKKysgIGNhc2UgJGFjX2ZpbGUgaW4KKysgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJHRtcC9vdXQiICIkYWNfZmlsZSI7OworKyAgZXNhYyBcCisrICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrIDs7CisrICA6SCkKKysgICMKKysgICMgQ09ORklHX0hFQURFUgorKyAgIworKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICB7CisrICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisrICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisrICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisrICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKysgICAgZWxzZQorKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKysgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisrCXx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgZmkKKy0gICAgcm0gLWYgJGFjX2ZpbGUKKy0gICAgbXYgY29uZnRlc3QuaCAkYWNfZmlsZQorKyAgZWxzZQorKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKysgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIC0iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIC0iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICBmaQorLWZpOyBkb25lCisrIDs7CisrCisgCistRU9GCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisrICBlc2FjCisrCisrZG9uZSAjIGZvciBhY190YWcKKyAKKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisgCistZXhpdCAwCistRU9GCisreyAoZXhpdCAwKTsgZXhpdCAwOyB9CisrX0FDRU9GCisgY2htb2QgK3ggJENPTkZJR19TVEFUVVMKKy1ybSAtZnIgY29uZmRlZnMqICRhY19jbGVhbl9maWxlcworLXRlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisrCisrdGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogd3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysKKysjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisrIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisrIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKysjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKysjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKysjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKysjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorKyAgYWNfY3Nfc3VjY2Vzcz06CisrICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisrICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKysgIGV4ZWMgNT4vZGV2L251bGwKKysgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKysgIGV4ZWMgNT4+Y29uZmlnLmxvZworKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKysgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKytpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CisrZmkKKyAKKyAKKyBpZiB0ZXN0ICRJQ1VfVVNFX1RIUkVBRFMgPSAwOyB0aGVuCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL2V4dHJhL3NjcnB0cnVuOiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZTogbGliCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL3NhbXBsZXMvbGF5b3V0OiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L2xldGVzdDogTWFrZWZpbGUKK09ubHkgaW4gM18wL2ljdS9zb3VyY2UvdGVzdC90ZXN0bWFwOiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L3RoYWl0ZXN0OiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L3RocmVhZHRlc3Q6IE1ha2VmaWxlCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL3Rvb2xzL2R1bXBjZTogTWFrZWZpbGUKZGlmZiAtLWdpdCBhL211bHRpL2MvcGF0Y2gvM18yIGIvbXVsdGkvYy9wYXRjaC8zXzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyYjVmMwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2MvcGF0Y2gvM18yCkBAIC0wLDAgKzEsMTIzODQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tLSAzXzIub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4gICAgICAgIDIwMDgtMTAtMjAgMTQ6NTc6NTIuMDAwMDAwMDAwIC0wNzAwCisrKysgM18yL2ljdS9zb3VyY2UvY29uZmlnL21oLWRhcndpbiAgICAgMjAwOC0xMC0yMCAxNTo1NzoyOC4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMyw4ICsxMyw4IEBACisgTERfRkxBR1MgKz0gLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcworIAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKy1HRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCistR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobyAKKytHRU5fREVQUy5jYz0JZWNobyAKKyAKKyAjIyBDb21tYW5kcyB0byBjb21waWxlCisgQ09NUElMRS5jPQkkKENDKSAkKERFRlMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAtZm5vLWNvbW1vbiAtYworT25seSBpbiAzXzAub3JpZy9pY3Uvc291cmNlOiBjb25maWcuY2FjaGUKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmxvZworZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWd1cmUgM18wL2ljdS9zb3VyY2UvY29uZmlndXJlCistLS0gM18yLm9yaWcvaWN1L3NvdXJjZS9jb25maWd1cmUKKysrKyAzXzIvaWN1L3NvdXJjZS9jb25maWd1cmUKKzJkMQorPCAKKzQsNWMzCis8ICMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIAorPCAjIENvcHlyaWdodCAoQykgMTk5MiwgOTMsIDk0LCA5NSwgOTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistLS0KKz4gIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjMuCis2YTUsNgorPiAjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKz4gIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOGE5LDU3MQorPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworPiAKKz4gIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCis+IERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKz4gaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+ICAgZW11bGF0ZSBzaAorPiAgIE5VTExDTUQ9OgorPiAgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorPiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCis+ICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCis+ICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKz4gZWxzZQorPiAgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorPiAgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworPiBlc2FjCis+IAorPiBmaQorPiAKKz4gCis+IAorPiAKKz4gIyBQQVRIIG5lZWRzIENSCis+ICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKz4gYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCis+IGFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworPiBhc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKz4gYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworPiBhc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKz4gCis+IGFzX25sPScKKz4gJworPiBleHBvcnQgYXNfbmwKKz4gIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KKz4gYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKz4gYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCis+IGFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCis+IGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCis+ICAgYXNfZWNobz0ncHJpbnRmICVzXG4nCis+ICAgYXNfZWNob19uPSdwcmludGYgJXMnCis+IGVsc2UKKz4gICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKz4gICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCis+ICAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCis+ICAgZWxzZQorPiAgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKz4gICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCis+ICAgICAgIGFyZz0kMTsKKz4gICAgICAgY2FzZSAkYXJnIGluCis+ICAgICAgICoiJGFzX25sIiopCis+IAlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKz4gCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7Cis+ICAgICAgIGVzYWM7Cis+ICAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKz4gICAgICcKKz4gICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorPiAgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKz4gICBmaQorPiAgIGV4cG9ydCBhc19lY2hvX2JvZHkKKz4gICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCis+IGZpCis+IAorPiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKz4gaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKz4gICBQQVRIX1NFUEFSQVRPUj06Cis+ICAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworPiAgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKz4gICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCis+ICAgfQorPiBmaQorPiAKKz4gIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCis+IGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX3Vuc2V0PXVuc2V0Cis+IGVsc2UKKz4gICBhc191bnNldD1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgSUZTCis+ICMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCis+ICMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorPiAjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKz4gIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorPiBJRlM9IiAiIgkkYXNfbmwiCis+IAorPiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorPiBjYXNlICQwIGluCis+ICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworPiAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKz4gICAgICA7OworPiBlc2FjCis+ICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKz4gIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCis+IGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKz4gICBhc19teXNlbGY9JDAKKz4gZmkKKz4gaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorPiAgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCis+ICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IGZpCis+IAorPiAjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKz4gZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorPiBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorPiBkb25lCis+IFBTMT0nJCAnCis+IFBTMj0nPiAnCis+IFBTND0nKyAnCis+IAorPiAjIE5MUyBudWlzYW5jZXMuCis+IExDX0FMTD1DCis+IGV4cG9ydCBMQ19BTEwKKz4gTEFOR1VBR0U9QworPiBleHBvcnQgTEFOR1VBR0UKKz4gCis+ICMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorPiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCis+IGVsc2UKKz4gICBhc19iYXNlbmFtZT1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKz4gYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Cis+ICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCis+IAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWC8iJDAiIHwKKz4gICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcL1woXC9cL1wpJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwvXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gCis+ICMgQ0RQQVRILgorPiAkYXNfdW5zZXQgQ0RQQVRICis+IAorPiAKKz4gaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorPiAgIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19oYXZlX3JlcXVpcmVkPXllcworPiBlbHNlCis+ICAgYXNfaGF2ZV9yZXF1aXJlZD1ubworPiBmaQorPiAKKz4gICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmCSAoZXZhbCAiOgorPiAoYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0IFwkMSkKKz4gfQorPiBhc19mdW5jX3N1Y2Nlc3MgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDAKKz4gfQorPiBhc19mdW5jX2ZhaWx1cmUgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDEKKz4gfQorPiBhc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKz4gICByZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworPiAgIHJldHVybiAxCis+IH0KKz4gCis+IGV4aXRjb2RlPTAKKz4gaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorPiAgIGV4aXRjb2RlPTEKKz4gICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorPiBmaQorPiAKKz4gdGVzdCBcJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IAorPiAoCis+ICAgYXNfbGluZW5vXzE9XCRMSU5FTk8KKz4gICBhc19saW5lbm9fMj1cJExJTkVOTworPiAgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorPiAgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzJcIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+ICIpIDI+IC9kZXYvbnVsbDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9Cis+ICAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBjYXNlICRhc19kaXIgaW4KKz4gCSAvKikKKz4gCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKz4gCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKKz4gCSAgIGRvbmU7OworPiAgICAgICAgZXNhYworPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IAorPiAgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworPiAJICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKz4gCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKz4gCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorPiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBlbXVsYXRlIHNoCis+ICAgTlVMTENNRD06Cis+ICAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCis+ICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKz4gICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKz4gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorPiBlbHNlCis+ICAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCis+ICAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Cis+IGVzYWMKKz4gCis+IGZpCis+IAorPiAKKz4gOgorPiBfQVNFT0YKKz4gfTsgdGhlbgorPiAgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKz4gCSAgICAgICBhc19oYXZlX3JlcXVpcmVkPXllcworPiAJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorPiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBlbXVsYXRlIHNoCis+ICAgTlVMTENNRD06Cis+ICAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCis+ICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKz4gICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKz4gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorPiBlbHNlCis+ICAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCis+ICAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Cis+IGVzYWMKKz4gCis+IGZpCis+IAorPiAKKz4gOgorPiAoYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0ICQxKQorPiB9Cis+IGFzX2Z1bmNfc3VjY2VzcyAoKSB7Cis+ICAgYXNfZnVuY19yZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfZmFpbHVyZSAoKSB7Cis+ICAgYXNfZnVuY19yZXR1cm4gMQorPiB9Cis+IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworPiAgIHJldHVybiAwCis+IH0KKz4gYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Cis+ICAgcmV0dXJuIDEKKz4gfQorPiAKKz4gZXhpdGNvZGU9MAorPiBpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorPiBmaQorPiAKKz4gaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKz4gZmkKKz4gCis+IGlmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCis+IGZpCis+IAorPiB0ZXN0ICRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiAKKz4gKAorPiAgIGFzX2xpbmVub18xPSRMSU5FTk8KKz4gICBhc19saW5lbm9fMj0kTElORU5PCis+ICAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCis+ICAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IAorPiBfQVNFT0YKKz4gfTsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiBmaQorPiAKKz4gICAgICAgZG9uZQorPiAKKz4gICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKz4gICBmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOVgorPiAJZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKz4gCWRvbmUKKz4gCWV4cG9ydCBDT05GSUdfU0hFTEwKKz4gCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKz4gZmkKKz4gCis+IAorPiAgICAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IG5vOyB0aGVuCis+ICAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQorPiAgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCis+ICAgICAgIGVjaG8gbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKKz4gICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCis+ICAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IAorPiBmaQorPiAKKz4gCis+IAorPiAoZXZhbCAiYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0IFwkMSkKKz4gfQorPiBhc19mdW5jX3N1Y2Nlc3MgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDAKKz4gfQorPiBhc19mdW5jX2ZhaWx1cmUgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDEKKz4gfQorPiBhc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKz4gICByZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworPiAgIHJldHVybiAxCis+IH0KKz4gCis+IGV4aXRjb2RlPTAKKz4gaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorPiAgIGV4aXRjb2RlPTEKKz4gICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorPiBmaQorPiAKKz4gdGVzdCBcJGV4aXRjb2RlID0gMCIpIHx8IHsKKz4gICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgorPiAgIGVjaG8gUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCis+ICAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLgorPiAgIGVjaG8gVGhpcyBjYW4gaGVscCB1cyBpbXByb3ZlIGZ1dHVyZSBhdXRvY29uZiB2ZXJzaW9ucy4KKz4gICBlY2hvIENvbmZpZ3VyYXRpb24gd2lsbCBub3cgcHJvY2VlZCB3aXRob3V0IHNoZWxsIGZ1bmN0aW9ucy4KKz4gfQorPiAKKz4gCis+IAorPiAgIGFzX2xpbmVub18xPSRMSU5FTk8KKz4gICBhc19saW5lbm9fMj0kTElORU5PCis+ICAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCis+ICAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7Cis+IAorPiAgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKz4gICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCis+ICAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCis+ICAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKz4gICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCis+ICAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorPiAgICMgY2FzZSBhdCBsaW5lIGVuZC4KKz4gICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKz4gICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKz4gICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorPiAgIHNlZCAtbiAnCis+ICAgICBwCis+ICAgICAvWyRdTElORU5PLz0KKz4gICAnIDwkYXNfbXlzZWxmIHwKKz4gICAgIHNlZCAnCis+ICAgICAgIHMvWyRdTElORU5PLiovJi0vCis+ICAgICAgIHQgbGluZW5vCis+ICAgICAgIGIKKz4gICAgICAgOmxpbmVubworPiAgICAgICBOCis+ICAgICAgIDpsb29wCis+ICAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworPiAgICAgICB0IGxvb3AKKz4gICAgICAgcy8tXG4uKi8vCis+ICAgICAnID4kYXNfbWUubGluZW5vICYmCis+ICAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworPiAgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorPiAgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCis+ICAgLiAiLi8kYXNfbWUubGluZW5vIgorPiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorPiAgIGV4aXQKKz4gfQorPiAKKz4gCis+IGlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX2Rpcm5hbWU9ZGlybmFtZQorPiBlbHNlCis+ICAgYXNfZGlybmFtZT1mYWxzZQorPiBmaQorPiAKKz4gRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKz4gY2FzZSBgZWNobyAtbiB4YCBpbgorPiAtbiopCis+ICAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKz4gICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKz4gICAqKSAgIEVDSE9fQz0nXGMnOzsKKz4gICBlc2FjOzsKKz4gKikKKz4gICBFQ0hPX049Jy1uJzs7Cis+IGVzYWMKKz4gaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKz4gICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKz4gICBhc19leHByPWV4cHIKKz4gZWxzZQorPiAgIGFzX2V4cHI9ZmFsc2UKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCis+IGlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorPiAgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKz4gZWxzZQorPiAgIHJtIC1mIGNvbmYkJC5kaXIKKz4gICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCis+IGZpCis+IGlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKz4gICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKz4gICAgIGFzX2xuX3M9J2xuIC1zJworPiAgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKz4gICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCis+ICAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKz4gICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCis+ICAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8Cis+ICAgICAgIGFzX2xuX3M9J2NwIC1wJworPiAgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCis+ICAgICBhc19sbl9zPWxuCis+ICAgZWxzZQorPiAgICAgYXNfbG5fcz0nY3AgLXAnCis+ICAgZmkKKz4gZWxzZQorPiAgIGFzX2xuX3M9J2NwIC1wJworPiBmaQorPiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCis+IHJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKz4gCis+IGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19ta2Rpcl9wPToKKz4gZWxzZQorPiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCis+ICAgYXNfbWtkaXJfcD1mYWxzZQorPiBmaQorPiAKKz4gaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKz4gZWxzZQorPiAgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgICAgYXNfbHNfTF9vcHRpb249TAorPiAgIGVsc2UKKz4gICAgIGFzX2xzX0xfb3B0aW9uPQorPiAgIGZpCis+ICAgYXNfdGVzdF94PScKKz4gICAgIGV2YWwgc2ggLWMgJ1wnJworPiAgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKz4gCXRlc3QgLWQgIiQxLy4iOworPiAgICAgICBlbHNlCis+IAljYXNlICQxIGluCis+IAktKilzZXQgIi4vJDEiOzsKKz4gCWVzYWM7Cis+IAljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorPiAJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorPiAgICAgJ1wnJyBzaAorPiAgICcKKz4gZmkKKz4gYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKz4gCis+ICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKz4gYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKz4gCis+ICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorPiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorPiAKKzEwLDExYzU3Myw1ODMKKzwgIyBEZWZhdWx0czoKKzwgYWNfaGVscD0KKy0tLQorPiAKKz4gZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorPiAKKz4gIyBOYW1lIG9mIHRoZSBob3N0LgorPiAjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorPiAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KKz4gYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCis+IAorPiAjCis+ICMgSW5pdGlhbGl6YXRpb25zLgorPiAjCisxMyw1MmM1ODUsODEwCis8ICMgQW55IGFkZGl0aW9ucyBmcm9tIGNvbmZpZ3VyZS5pbjoKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1zdHJpY3QgICAgICAgICBjb21waWxlIHdpdGggc3RyaWN0IGNvbXBpbGVyIG9wdGlvbnMgW2RlZmF1bHQ9bm9dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLTY0Yml0LWxpYnMgICAgIGJ1aWxkIDY0LWJpdCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1zaGFyZWQgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtc3RhdGljICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtZGVidWcgICAgICAgICAgYnVpbGQgZGVidWcgbGlicmFyaWVzIFtkZWZhdWx0PW5vXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1yZWxlYXNlICAgICAgICBidWlsZCByZWxlYXNlIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXJlbmFtaW5nICAgICAgIGFkZCBhIHZlcnNpb24gc3VmZml4IHRvIHN5bWJvbHMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS10cmFjaW5nICAgICAgICBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXJwYXRoICAgICAgICAgIHVzZSBycGF0aCB3aGVuIGxpbmtpbmcgW2RlZmF1bHQgaXMgb25seSBpZiBuZWNlc3NhcnldIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXRocmVhZHMgICAgICAgIGJ1aWxkIElDVSB3aXRoIHRocmVhZCBzYWZldHkgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtaW9zdHJlYW09dmVyc2lvbiBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIGlvc3RyZWFtIHRvIHVzZSAobm9uZSwgb2xkLCBzdGQsIGF1dG8pIFtkZWZhdWx0PWF1dG9dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLWV4dHJhcyAgICAgICAgIGJ1aWxkIElDVSBleHRyYXMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1pY3VpbyAgICAgICAgICBidWlsZCBJQ1UncyBpY3VpbyBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtbGF5b3V0ICAgICAgICAgYnVpbGQgSUNVJ3MgbGF5b3V0IGxpYnJhcnkgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9dHlwZSBzcGVjaWZ5IGhvdyB0byBwYWNrYWdlIElDVSBkYXRhIChmaWxlcywgYXJjaGl2ZSwgbGlicmFyeSwgYXV0bykgW2RlZmF1bHQ9YXV0b10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtbGlicmFyeS1zdWZmaXg9c3VmZml4ICAgIHRhZyBhIHN1ZmZpeCB0byB0aGUgbGlicmFyeSBuYW1lcyBbZGVmYXVsdD1dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXRlc3RzICAgICAgICAgIGJ1aWxkIElDVSB0ZXN0cyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXNhbXBsZXMgICAgICAgIGJ1aWxkIElDVSBzYW1wbGVzIFtkZWZhdWx0PXllc10gIAorPCBBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLiIKKy0tLQorPiBhY19jbGVhbl9maWxlcz0KKz4gYWNfY29uZmlnX2xpYm9ial9kaXI9LgorPiBMSUJPQkpTPQorPiBjcm9zc19jb21waWxpbmc9bm8KKz4gc3ViZGlycz0KKz4gTUZMQUdTPQorPiBNQUtFRkxBR1M9Cis+IFNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Cis+IAorPiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KKz4gUEFDS0FHRV9OQU1FPQorPiBQQUNLQUdFX1RBUk5BTUU9Cis+IFBBQ0tBR0VfVkVSU0lPTj0KKz4gUEFDS0FHRV9TVFJJTkc9Cis+IFBBQ0tBR0VfQlVHUkVQT1JUPQorPiAKKz4gYWNfdW5pcXVlX2ZpbGU9ImNvbW1vbi91bmljb2RlL3V0eXBlcy5oIgorPiAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCis+IGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKz4gI2luY2x1ZGUgPHN0ZGlvLmg+Cis+ICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICis+ICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis+ICNlbmRpZgorPiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICis+ICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBTVERDX0hFQURFUlMKKz4gIyBpbmNsdWRlIDxzdGRsaWIuaD4KKz4gIyBpbmNsdWRlIDxzdGRkZWYuaD4KKz4gI2Vsc2UKKz4gIyBpZmRlZiBIQVZFX1NURExJQl9ICis+ICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorPiAjIGVuZGlmCis+ICNlbmRpZgorPiAjaWZkZWYgSEFWRV9TVFJJTkdfSAorPiAjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKz4gIyAgaW5jbHVkZSA8bWVtb3J5Lmg+Cis+ICMgZW5kaWYKKz4gIyBpbmNsdWRlIDxzdHJpbmcuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX1NUUklOR1NfSAorPiAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKz4gIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorPiAjZW5kaWYKKz4gI2lmZGVmIEhBVkVfU1RESU5UX0gKKz4gIyBpbmNsdWRlIDxzdGRpbnQuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX1VOSVNURF9ICis+ICMgaW5jbHVkZSA8dW5pc3RkLmg+Cis+ICNlbmRpZiIKKz4gCis+IGFjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworPiBMSUJPQkpTCis+IEFJWF9TSExJQgorPiBsZF9ycGF0aF9zdWYKKz4gcGxhdGZvcm1fbWFrZV9mcmFnbWVudAorPiBwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50X25hbWUKKz4gcGxhdGZvcm0KKz4gSUNVREFUQV9DSEFSCis+IFNBTVBMRVNfVFJVRQorPiBURVNUU19UUlVFCis+IElDVUxJQlNVRkZJWENOQU1FCis+IFVfSEFWRV9MSUJfU1VGRklYCis+IElDVUxJQlNVRkZJWAorPiBEQVRBX1BBQ0tBR0lOR19NT0RFCis+IERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTCis+IHRoZXBrZ2ljdWRhdGFkaXIKKz4gcGtnaWN1ZGF0YWRpcgorPiB0aGVsaWJkaXIKKz4gdGhlZGF0YWRpcgorPiB0aGVzeXNjb25mZGlyCis+IExBWU9VVF9UUlVFCis+IElDVUlPX1RSVUUKKz4gRVhUUkFTX1RSVUUKKz4gVV9TSVpFT0ZfV0NIQVJfVAorPiBVX0hBVkVfV0NTQ1BZCis+IFVfSEFWRV9XQ0hBUl9ICis+IEhBVkVfVUlOVDY0X1QKKz4gSEFWRV9JTlQ2NF9UCis+IEhBVkVfVUlOVDMyX1QKKz4gSEFWRV9JTlQzMl9UCis+IEhBVkVfVUlOVDE2X1QKKz4gSEFWRV9JTlQxNl9UCis+IEhBVkVfVUlOVDhfVAorPiBIQVZFX0lOVDhfVAorPiBVX1RJTUVaT05FCis+IFVfSEFWRV9USU1FWk9ORQorPiBVX1RaTkFNRQorPiBVX0hBVkVfVFpOQU1FCis+IFVfVFpTRVQKKz4gVV9IQVZFX1RaU0VUCis+IFVfSEFWRV9QT1BFTgorPiBVX0hBVkVfUExBQ0VNRU5UX05FVworPiBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OCis+IFVfSEFWRV9OQU1FU1BBQ0UKKz4gVV9OTF9MQU5HSU5GT19DT0RFU0VUCis+IFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUCis+IFVfSEFWRV9OTF9MQU5HSU5GTworPiBVX0lTX0JJR19FTkRJQU4KKz4gVV9JT1NUUkVBTV9TT1VSQ0UKKz4gQ1hYQ1BQCis+IFVfSEFWRV9JTlRUWVBFU19ICis+IEVHUkVQCis+IEdSRVAKKz4gQ1BQCis+IEdFTkNDT0RFX0FTU0VNQkxZCis+IEhBVkVfTU1BUAorPiBJQ1VfVVNFX1RIUkVBRFMKKz4gVEhSRUFEU19UUlVFCis+IFVfSU5MSU5FCis+IEVOQUJMRV9SUEFUSAorPiBVX0VOQUJMRV9UUkFDSU5HCis+IFVfRElTQUJMRV9SRU5BTUlORworPiBBUgorPiBSQU5MSUIKKz4gRU5BQkxFX1JFTEVBU0UKKz4gRU5BQkxFX0RFQlVHCis+IEVOQUJMRV9TVEFUSUMKKz4gRU5BQkxFX1NIQVJFRAorPiBMSUJfTQorPiBDT01QSUxFX0xJTktfRU5WVkFSCis+IEFSRkxBR1MKKz4gaG9zdF9vcworPiBob3N0X3ZlbmRvcgorPiBob3N0X2NwdQorPiBob3N0Cis+IGJ1aWxkX29zCis+IGJ1aWxkX3ZlbmRvcgorPiBidWlsZF9jcHUKKz4gYnVpbGQKKz4gRE9YWUdFTgorPiBVX01BS0UKKz4gU1RSSVAKKz4gSU5TVEFMTF9EQVRBCis+IElOU1RBTExfU0NSSVBUCis+IElOU1RBTExfUFJPR1JBTQorPiBhY19jdF9DWFgKKz4gQ1hYRkxBR1MKKz4gQ1hYCis+IE9CSkVYVAorPiBFWEVFWFQKKz4gYWNfY3RfQ0MKKz4gTERGTEFHUworPiBDRkxBR1MKKz4gQ0MKKz4gQ1BQRkxBR1MKKz4gVU5JQ09ERV9WRVJTSU9OCis+IExJQl9WRVJTSU9OX01BSk9SCis+IExJQl9WRVJTSU9OCis+IFZFUlNJT04KKz4gUEFDS0FHRQorPiB0YXJnZXRfYWxpYXMKKz4gaG9zdF9hbGlhcworPiBidWlsZF9hbGlhcworPiBMSUJTCis+IEVDSE9fVAorPiBFQ0hPX04KKz4gRUNIT19DCis+IERFRlMKKz4gbWFuZGlyCis+IGxvY2FsZWRpcgorPiBsaWJkaXIKKz4gcHNkaXIKKz4gcGRmZGlyCis+IGR2aWRpcgorPiBodG1sZGlyCis+IGluZm9kaXIKKz4gZG9jZGlyCis+IG9sZGluY2x1ZGVkaXIKKz4gaW5jbHVkZWRpcgorPiBsb2NhbHN0YXRlZGlyCis+IHNoYXJlZHN0YXRlZGlyCis+IHN5c2NvbmZkaXIKKz4gZGF0YWRpcgorPiBkYXRhcm9vdGRpcgorPiBsaWJleGVjZGlyCis+IHNiaW5kaXIKKz4gYmluZGlyCis+IHByb2dyYW1fdHJhbnNmb3JtX25hbWUKKz4gcHJlZml4Cis+IGV4ZWNfcHJlZml4Cis+IFBBQ0tBR0VfQlVHUkVQT1JUCis+IFBBQ0tBR0VfU1RSSU5HCis+IFBBQ0tBR0VfVkVSU0lPTgorPiBQQUNLQUdFX1RBUk5BTUUKKz4gUEFDS0FHRV9OQU1FCis+IFBBVEhfU0VQQVJBVE9SCis+IFNIRUxMJworPiBhY19zdWJzdF9maWxlcz0nJworPiBhY191c2VyX29wdHM9JworPiBlbmFibGVfb3B0aW9uX2NoZWNraW5nCis+IGVuYWJsZV9zdHJpY3QKKz4gZW5hYmxlXzY0Yml0X2xpYnMKKz4gZW5hYmxlX3NoYXJlZAorPiBlbmFibGVfc3RhdGljCis+IGVuYWJsZV9kZWJ1ZworPiBlbmFibGVfcmVsZWFzZQorPiBlbmFibGVfcmVuYW1pbmcKKz4gZW5hYmxlX3RyYWNpbmcKKz4gZW5hYmxlX3JwYXRoCis+IGVuYWJsZV90aHJlYWRzCis+IHdpdGhfaW9zdHJlYW0KKz4gZW5hYmxlX2V4dHJhcworPiBlbmFibGVfbGF5b3V0Cis+IHdpdGhfZGF0YV9wYWNrYWdpbmcKKz4gZW5hYmxlX21hcHBlZAorPiB3aXRoX2xpYnJhcnlfc3VmZml4Cis+IGVuYWJsZV90ZXN0cworPiBlbmFibGVfc2FtcGxlcworPiAnCis+ICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCis+IGhvc3RfYWxpYXMKKz4gdGFyZ2V0X2FsaWFzCis+IENDCis+IENGTEFHUworPiBMREZMQUdTCis+IExJQlMKKz4gQ1BQRkxBR1MKKz4gQ1hYCis+IENYWEZMQUdTCis+IENDQworPiBDUFAKKz4gQ1hYQ1BQJworPiAKKzU0YTgxMyw4MTYKKz4gYWNfaW5pdF9oZWxwPQorPiBhY19pbml0X3ZlcnNpb249ZmFsc2UKKz4gYWNfdW5yZWNvZ25pemVkX29wdHM9Cis+IGFjX3VucmVjb2duaXplZF9zZXA9Cis1Nyw1OGM4MTkKKzwgYnVpbGQ9Tk9ORQorPCBjYWNoZV9maWxlPS4vY29uZmlnLmNhY2hlCistLS0KKz4gY2FjaGVfZmlsZT0vZGV2L251bGwKKzYwZDgyMAorPCBob3N0PU5PTkUKKzYyZDgyMQorPCBub25vcHQ9Tk9ORQorNzFkODI5Cis8IHRhcmdldD1OT05FCis3NGE4MzMsODM5Cis+IAorPiAjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKz4gIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCis+ICMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4Cis+ICMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKz4gIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKz4gIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorNzhjODQzLDg0NAorPCBkYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCistLS0KKz4gZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKKz4gZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCis4MmQ4NDcKKzwgbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCis4NSw5M2M4NTAsODU4Cis8IGluZm9kaXI9JyR7cHJlZml4fS9pbmZvJworPCBtYW5kaXI9JyR7cHJlZml4fS9tYW4nCis8IAorPCAjIEluaXRpYWxpemUgc29tZSBvdGhlciB2YXJpYWJsZXMuCis8IHN1YmRpcnM9Cis8IE1GTEFHUz0gTUFLRUZMQUdTPQorPCBTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorPCAjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCis8IGFjX21heF9oZXJlX2xpbmVzPTEyCistLS0KKz4gZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfScKKz4gaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKKz4gaHRtbGRpcj0nJHtkb2NkaXJ9JworPiBkdmlkaXI9JyR7ZG9jZGlyfScKKz4gcGRmZGlyPScke2RvY2Rpcn0nCis+IHBzZGlyPScke2RvY2Rpcn0nCis+IGxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworPiBsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKKz4gbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCis5NWE4NjEKKz4gYWNfZGFzaGRhc2g9Cis5OGQ4NjMKKzwgCisxMDFjODY2Cis8ICAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKy0tLQorPiAgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorMTA2LDEwOGM4NzEsODczCis8ICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAtKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRpb24iIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKzwgICAqKSBhY19vcHRhcmc9IDs7CistLS0KKz4gICBjYXNlICRhY19vcHRpb24gaW4KKz4gICAqPSopCWFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7Cis+ICAgKikJYWNfb3B0YXJnPXllcyA7OworMTEzYzg3OCw4ODAKKzwgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorLS0tCis+ICAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCis+ICAgLS0pCis+ICAgICBhY19kYXNoZGFzaD15ZXMgOzsKKzExOGM4ODUKKzwgICAgIGJpbmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKzEyMWM4ODgKKzwgICAgIGFjX3ByZXY9YnVpbGQgOzsKKy0tLQorPiAgICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OworMTIzYzg5MAorPCAgICAgYnVpbGQ9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKzEzMGM4OTcsOTAwCis8ICAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLS1jb25maWctY2FjaGUgfCAtQykKKz4gICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisxMzJjOTAyCis8ICAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCistLS0KKz4gICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKzEzNCwxMzZjOTA0LDkxMgorPCAgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorPCAgIHwgLS1kYT0qKQorPCAgICAgZGF0YWRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCis+ICAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCis+ICAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCis+ICAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7Cis+ICAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorPiAgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorPiAgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworMTM5YzkxNQorPCAgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYAorLS0tCis+ICAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorMTQxLDE0NWM5MTcsOTM5Cis8ICAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKzwgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkKKzwgICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCis8ICAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT1ubyIgOzsKKy0tLQorPiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+ICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKz4gICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKz4gICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorPiAgICAgICAqIgorPiAiZW5hYmxlXyRhY191c2Vyb3B0IgorPiAiKikgOzsKKz4gICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCis+IAkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKz4gICAgIGVzYWMKKz4gICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7Cis+IAorPiAgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCis+ICAgICBhY19wcmV2PWRvY2RpciA7OworPiAgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorPiAgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKz4gICAgIGFjX3ByZXY9ZHZpZGlyIDs7Cis+ICAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKz4gICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisxNDhjOTQyCis8ICAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgCistLS0KKz4gICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKzE1MCwxNTZjOTQ0LDk1NAorPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCis8ICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVhdHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvLS9fL2cnYAorPCAgICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAgICAgKj0qKSA7OworPCAgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gImVuYWJsZV8kYWNfdXNlcm9wdCIKKz4gIiopIDs7Cis+ICAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCis+IAkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKzE1OGM5NTYKKzwgICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PSckYWNfb3B0YXJnJyIgOzsKKy0tLQorPiAgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKzE2N2M5NjUKKzwgICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisxNzMsMjI2Yzk3MSw5NzYKKzwgICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSkKKzwgICAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorPCAgICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorPCAgICAgY2F0IDw8IEVPRgorPCBVc2FnZTogY29uZmlndXJlIFtvcHRpb25zXSBbaG9zdF0KKzwgT3B0aW9uczogW2RlZmF1bHRzIGluIGJyYWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10KKzwgQ29uZmlndXJhdGlvbjoKKzwgICAtLWNhY2hlLWZpbGU9RklMRSAgICAgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRQorPCAgIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQorPCAgIC0tbm8tY3JlYXRlICAgICAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCis8ICAgLS1xdWlldCwgLS1zaWxlbnQgICAgICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCis8ICAgLS12ZXJzaW9uICAgICAgICAgICAgICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQorPCBEaXJlY3RvcnkgYW5kIGZpbGUgbmFtZXM6Cis8ICAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCis8ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKzwgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzYW1lIGFzIHByZWZpeF0KKzwgICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dCis8ICAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9zYmluXQorPCAgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2xpYmV4ZWNdCis8ICAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUgorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvc2hhcmVdCis8ICAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvZXRjXQorPCAgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCis8ICAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWC9jb21dCis8ICAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIGluIERJUiBbUFJFRklYL3Zhcl0KKzwgICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gRElSIFtFUFJFRklYL2xpYl0KKzwgICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBpbiBESVIgW1BSRUZJWC9pbmNsdWRlXQorPCAgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIGluIERJUiBbL3Vzci9pbmNsdWRlXQorPCAgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9pbmZvXQorPCAgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL21hbl0KKzwgICAtLXNyY2Rpcj1ESVIgICAgICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciAuLl0KKzwgICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworPCAgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKzwgICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTQorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworPCBFT0YKKzwgICAgIGNhdCA8PCBFT0YKKzwgSG9zdCB0eXBlOgorPCAgIC0tYnVpbGQ9QlVJTEQgICAgICAgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW0JVSUxEPUhPU1RdCis8ICAgLS1ob3N0PUhPU1QgICAgICAgICAgICAgY29uZmlndXJlIGZvciBIT1NUIFtndWVzc2VkXQorPCAgIC0tdGFyZ2V0PVRBUkdFVCAgICAgICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0KKzwgRmVhdHVyZXMgYW5kIHBhY2thZ2VzOgorPCAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKzwgICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCis8ICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCis8ICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorPCAgIC0teC1pbmNsdWRlcz1ESVIgICAgICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCis8ICAgLS14LWxpYnJhcmllcz1ESVIgICAgICAgWCBsaWJyYXJ5IGZpbGVzIGFyZSBpbiBESVIKKzwgRU9GCis8ICAgICBpZiB0ZXN0IC1uICIkYWNfaGVscCI7IHRoZW4KKzwgICAgICAgZWNobyAiLS1lbmFibGUgYW5kIC0td2l0aCBvcHRpb25zIHJlY29nbml6ZWQ6JGFjX2hlbHAiCis8ICAgICBmaQorPCAgICAgZXhpdCAwIDs7CistLS0KKz4gICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorPiAgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKz4gICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCis+ICAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7Cis+ICAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorPiAgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisyMjljOTc5Cis8ICAgICBhY19wcmV2PWhvc3QgOzsKKy0tLQorPiAgICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7CisyMzFjOTgxLDk4NworPCAgICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorPiAgICAgYWNfcHJldj1odG1sZGlyIDs7Cis+ICAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCis+ICAgfCAtLWh0PSopCis+ICAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKzIzOGM5OTQKKzwgICAgIGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworMjQzYzk5OQorPCAgICAgaW5mb2Rpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisyNDhjMTAwNAorPCAgICAgbGliZGlyPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworMjU1YzEwMTEsMTAxNgorPCAgICAgbGliZXhlY2Rpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKz4gICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7Cis+ICAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKz4gICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisyNTgsMjU5YzEwMTkKKzwgICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCis8ICAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCistLS0KKz4gICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorMjYyLDI2NGMxMDIyLDEwMjMKKzwgICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKzwgICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCis8ICAgICBsb2NhbHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCis+ICAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKzI2OWMxMDI4Cis8ICAgICBtYW5kaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisyNzZjMTAzNQorPCAgIHwgLS1uby1jciB8IC0tbm8tYykKKy0tLQorPiAgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorMjkwYzEwNDkKKzwgICAgIG9sZGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworMjk1YzEwNTQKKzwgICAgIHByZWZpeD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKzMwMmMxMDYxCis8ICAgICBwcm9ncmFtX3ByZWZpeD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworMzA5YzEwNjgKKzwgICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CiszMjZjMTA4NSwxMDk1Cis8ICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKz4gICAgIGFjX3ByZXY9cGRmZGlyIDs7Cis+ICAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKz4gICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCis+ICAgICBhY19wcmV2PXBzZGlyIDs7Cis+ICAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCis+ICAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CiszMzZjMTEwNQorPCAgICAgc2JpbmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CiszNDdjMTExNgorPCAgICAgc2hhcmVkc3RhdGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKzM1MmMxMTIxCis8ICAgICBzaXRlPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBzaXRlPSRhY19vcHRhcmcgOzsKKzM1N2MxMTI2Cis8ICAgICBzcmNkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CiszNjRjMTEzMworPCAgICAgc3lzY29uZmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CiszNjdjMTEzNgorPCAgICAgYWNfcHJldj10YXJnZXQgOzsKKy0tLQorPiAgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKzM2OWMxMTM4Cis8ICAgICB0YXJnZXQ9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CiszNzQsMzc2YzExNDMsMTE0NAorPCAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzKQorPCAgICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCis8ICAgICBleGl0IDAgOzsKKy0tLQorPiAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCis+ICAgICBhY19pbml0X3ZlcnNpb249OiA7OworMzc5YzExNDcKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRoLS8vJyAtZSAncy89LiovLydgCistLS0KKz4gICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiszODEsMzg3YzExNDksMTE1OQorPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCis8ICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorPCAgICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAgICAgKj0qKSA7OworPCAgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gIndpdGhfJGFjX3VzZXJvcHQiCis+ICIqKSA7OworPiAgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKz4gCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworMzg5YzExNjEKKzwgICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT0nJGFjX29wdGFyZyciIDs7CistLS0KKz4gICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworMzkyYzExNjQKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRob3V0LS8vJ2AKKy0tLQorPiAgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKzM5NCwzOThjMTE2NiwxMTc4Cis8ICAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfcGFja2FnZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKzwgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCis8ICAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gIndpdGhfJGFjX3VzZXJvcHQiCis+ICIqKSA7OworPiAgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKz4gCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworPiAgICAgZXNhYworPiAgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7Cis0MDljMTE4OQorPCAgICAgeF9pbmNsdWRlcz0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7Cis0MTZjMTE5NgorPCAgICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKzQxOGMxMTk4LDEyMDAKKzwgICAtKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfb3B0aW9uOiBpbnZhbGlkIG9wdGlvbjsgdXNlIC0taGVscCB0byBzaG93IHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAgIC0qKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0MjBhMTIwMywxMjExCis+ICAgKj0qKQorPiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorPiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorPiAgICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorPiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6ICRhY19lbnZ2YXIiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworPiAgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKz4gCis0MjIsNDI4YzEyMTMsMTIxNworPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX29wdGlvbnwgc2VkICdzL1stYS16MC05Ll0vL2cnYCI7IHRoZW4KKzwgICAgICAgZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiAkYWNfb3B0aW9uOiBpbnZhbGlkIGhvc3QgdHlwZSIgMT4mMgorPCAgICAgZmkKKzwgICAgIGlmIHRlc3QgIngkbm9ub3B0IiAhPSB4Tk9ORTsgdGhlbgorPCAgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBvbmx5IGNvbmZpZ3VyZSBmb3Igb25lIGhvc3QgYW5kIG9uZSB0YXJnZXQgYXQgYSB0aW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBub25vcHQ9IiRhY19vcHRpb24iCistLS0KKz4gICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKz4gICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorPiAgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKz4gICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKzQzNWMxMjI0LDEyMjYKKzwgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gLS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQzOCw0NTFjMTIyOSwxMjM1Cis8IHRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1Cis8IAorPCAjIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKzwgIyAwIHN0YW5kYXJkIGlucHV0Cis8ICMgMSBmaWxlIGNyZWF0aW9uCis8ICMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCis8ICMgMyBzb21lIHN5c3RlbXMgbWF5IG9wZW4gaXQgdG8gL2Rldi90dHkKKzwgIyA0IHVzZWQgb24gdGhlIEt1Ym90YSBUaXRhbgorPCAjIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCis8ICMgNSBjb21waWxlciBtZXNzYWdlcyBzYXZlZCBpbiBjb25maWcubG9nCis8IGlmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCis8ICAgZXhlYyA2Pi9kZXYvbnVsbAorPCBlbHNlCis8ICAgZXhlYyA2PiYxCistLS0KKz4gaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorPiAgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKz4gICAgIG5vKSA7OworPiAgICAgZmF0YWwpIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKz4gICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKz4gICBlc2FjCis0NTMsNDU4ZDEyMzYKKzwgZXhlYyA1Pi4vY29uZmlnLmxvZworPCAKKzwgZWNobyAiXAorPCBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorPCBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorPCAiIDE+JjUKKzQ2MCw0NjNjMTIzOCwxMjQyCis8ICMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorPCAjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKzwgYWNfY29uZmlndXJlX2FyZ3M9Cis8IGZvciBhY19hcmcKKy0tLQorPiAjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KKz4gZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCis+IAkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCis+IAkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorPiAJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCis0NjUsNDcyYzEyNDQsMTI1NAorPCAgIGNhc2UgIiRhY19hcmciIGluCis8ICAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKzwgICB8IC0tbm8tY3IgfCAtLW5vLWMpIDs7Cis8ICAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCis8ICAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7Cis8ICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9dKikKKzwgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKzwgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY19hcmciIDs7CistLS0KKz4gICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKz4gICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorPiAgIGNhc2UgJGFjX3ZhbCBpbgorPiAgICAgKi8gKQorPiAgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKz4gICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKz4gICBlc2FjCis+ICAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorPiAgIGNhc2UgJGFjX3ZhbCBpbgorPiAgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKz4gICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKzQ3M2ExMjU2LDEyNTcKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0NzYsNDg0YzEyNjAsMTI5MQorPCAjIE5MUyBudWlzYW5jZXMuCis8ICMgT25seSBzZXQgdGhlc2UgdG8gQyBpZiBhbHJlYWR5IHNldC4gIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkKKzwgIyBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCis8ICMgRml4aW5nIExDX01FU1NBR0VTIHByZXZlbnRzIFNvbGFyaXMgc2ggZnJvbSB0cmFuc2xhdGluZyB2YXIgdmFsdWVzIGluIGBzZXQnIQorPCAjIE5vbi1DIExDX0NUWVBFIHZhbHVlcyBicmVhayB0aGUgY3R5cGUgY2hlY2suCis8IGlmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQorPCBpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiA9IHNldDsgdGhlbiBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgZmkKKzwgaWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCis8IGlmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQorLS0tCis+ICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKz4gIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCis+ICMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKz4gYnVpbGQ9JGJ1aWxkX2FsaWFzCis+IGhvc3Q9JGhvc3RfYWxpYXMKKz4gdGFyZ2V0PSR0YXJnZXRfYWxpYXMKKz4gCis+ICMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKz4gaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCis+ICAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCis+ICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKz4gICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCis+ICAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorPiAgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKz4gICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKz4gICBmaQorPiBmaQorPiAKKz4gYWNfdG9vbF9wcmVmaXg9Cis+IHRlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKz4gCis+IHRlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKz4gCis+IAorPiBhY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKz4gYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorPiBhY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiB0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ4Niw0OTNkMTI5MgorPCAjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorPCBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKzwgIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCis8IGVjaG8gPiBjb25mZGVmcy5oCis8IAorPCAjIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0Cis8ICMgY29uZmlndXJlIGlzIGluLCB3aGljaCB3ZSBjYW4gbG9vayBmb3IgdG8gZmluZCBvdXQgaWYgc3JjZGlyIGlzIGNvcnJlY3QuCis8IGFjX3VuaXF1ZV9maWxlPWNvbW1vbi91bmljb2RlL3V0eXBlcy5oCis0OTgsNTAxYzEyOTcsMTMyMAorPCAgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorPCAgIGFjX3Byb2c9JDAKKzwgICBhY19jb25mZGlyPWBlY2hvICRhY19wcm9nfHNlZCAncyUvW14vXVteL10qJCUlJ2AKKzwgICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uCistLS0KKz4gICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCis+ICAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8Cis+ICRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKz4gCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCis+IAkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorPiAJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Cis+ICRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorPiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXClbXi9dLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXC9cKSQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXCkuKi97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIHMvLiovLi87IHEnYAorNTAzYzEzMjIKKzwgICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKy0tLQorPiAgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCis1MDksNTMwYzEzMjgsMTM1MgorPCBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKzwgICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KKzwgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJGFjX2NvbmZkaXIgb3IgLi4iIDE+JjI7IGV4aXQgMTsgfQorPCAgIGVsc2UKKzwgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9Cis8ICAgZmkKKzwgZmkKKzwgc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgCis8IAorPCAjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorPCBpZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCis8ICAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCis8ICAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKzwgICBlbHNlCis8ICAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCis8ICAgZmkKKzwgZmkKKzwgZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCis8ICAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKzwgICAgIGVjaG8gImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIKKzwgICAgIC4gIiRhY19zaXRlX2ZpbGUiCis8ICAgZmkKKy0tLQorPiBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorPiAgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBmaQorPiBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCis+IGFjX2Fic19jb25mZGlyPWAoCis+IAljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gCXB3ZClgCis+ICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCis+IGlmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKz4gICBzcmNkaXI9LgorPiBmaQorPiAjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorPiAjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKz4gIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCis+IGNhc2UgJHNyY2RpciBpbgorPiAqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKKz4gZXNhYworPiBmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworPiAgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKz4gICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKz4gICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9Cis+ICAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Cis1MzMsNTM5YzEzNTUsMTM2MgorPCBpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKzwgICBlY2hvICJsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIgorPCAgIC4gJGNhY2hlX2ZpbGUKKzwgZWxzZQorPCAgIGVjaG8gImNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorPCAgID4gJGNhY2hlX2ZpbGUKKzwgZmkKKy0tLQorPiAjCis+ICMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKz4gIworPiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorPiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorPiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKz4gICBjYXQgPDxfQUNFT0YKKz4gXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKzU0MSw1NTZjMTM2NCwxODE5Cis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworPCAKKzwgYWNfZXhlZXh0PQorPCBhY19vYmpleHQ9bworPCBpZiAoZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsMykgfCBncmVwIGMgPi9kZXYvbnVsbDsgdGhlbgorPCAgICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1LgorPCAgIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCis8ICAgICBhY19uPSBhY19jPScKKzwgJyBhY190PScJJworPCAgIGVsc2UKKzwgICAgIGFjX249LW4gYWNfYz0gYWNfdD0KKy0tLQorPiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKz4gCis+IFRvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKKz4gVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKz4gCis+IERlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorPiAKKz4gQ29uZmlndXJhdGlvbjoKKz4gICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorPiAgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKz4gICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKz4gICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKz4gICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKz4gICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCis+ICAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKz4gICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworPiAgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorPiAKKz4gSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorPiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCis+ICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKz4gICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorPiAKKz4gQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCis+IFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5Cis+IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCis+IGZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCis+IAorPiBGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKz4gCis+IEZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Cis+ICAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCis+ICAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCis+ICAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorPiAgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorPiAgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCis+ICAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorPiAgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCis+ICAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorPiAgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCis+ICAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorPiAgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCis+ICAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorPiAgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorPiAgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCis+ICAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvUEFDS0FHRV0KKz4gICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKz4gICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorPiAgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCis+ICAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorPiBfQUNFT0YKKz4gCis+ICAgY2F0IDw8XF9BQ0VPRgorPiAKKz4gU3lzdGVtIHR5cGVzOgorPiAgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCis+ICAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCis+IF9BQ0VPRgorPiBmaQorPiAKKz4gaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKz4gCis+ICAgY2F0IDw8XF9BQ0VPRgorPiAKKz4gT3B0aW9uYWwgRmVhdHVyZXM6Cis+ICAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworPiAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKz4gICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCis+ICAgLS1lbmFibGUtc3RyaWN0ICAgICAgICAgY29tcGlsZSB3aXRoIHN0cmljdCBjb21waWxlciBvcHRpb25zIGRlZmF1bHQ9bm8KKz4gICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBkZWZhdWx0PXllcworPiAgIC0tZW5hYmxlLXN0YXRpYyAgICAgICAgIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgZGVmYXVsdD1ubworPiAgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBkZWZhdWx0PW5vCis+ICAgLS1lbmFibGUtcmVsZWFzZSAgICAgICAgYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1yZW5hbWluZyAgICAgICBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCB0byBzeW1ib2xzIGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1ycGF0aCAgICAgICAgICB1c2UgcnBhdGggd2hlbiBsaW5raW5nIGRlZmF1bHQgaXMgb25seSBpZiBuZWNlc3NhcnkKKz4gICAtLWVuYWJsZS10aHJlYWRzICAgICAgICBidWlsZCBJQ1Ugd2l0aCB0aHJlYWQgc2FmZXR5IGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBkZWZhdWx0PXllcworPiAgIC0tZW5hYmxlLWljdWlvICAgICAgICAgIGJ1aWxkIElDVSdzIGljdWlvIGxpYnJhcnkgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1sYXlvdXQgICAgICAgICBidWlsZCBJQ1UncyBsYXlvdXQgbGlicmFyeSBkZWZhdWx0PXllcworPiAKKz4gICAtLWVuYWJsZS10ZXN0cyAgICAgICAgICBidWlsZCBJQ1UgdGVzdHMgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1zYW1wbGVzICAgICAgICBidWlsZCBJQ1Ugc2FtcGxlcyBkZWZhdWx0PXllcworPiBBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLgorPiAKKz4gT3B0aW9uYWwgUGFja2FnZXM6Cis+ICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCis+ICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorPiAgIC0td2l0aC1pb3N0cmVhbT12ZXJzaW9uIHNwZWNpZnkgdGhlIHZlcnNpb24gb2YgaW9zdHJlYW0gdG8gdXNlIChub25lLCBvbGQsIHN0ZCwgYXV0bykgZGVmYXVsdD1hdXRvCis+ICAgLS13aXRoLWRhdGEtcGFja2FnaW5nPXR5cGUgc3BlY2lmeSBob3cgdG8gcGFja2FnZSBJQ1UgZGF0YSAoZmlsZXMsIGFyY2hpdmUsIGxpYnJhcnksIGF1dG8pIGRlZmF1bHQ9YXV0bworPiAgIC0td2l0aC1saWJyYXJ5LXN1ZmZpeD1zdWZmaXggICAgdGFnIGEgc3VmZml4IHRvIHRoZSBsaWJyYXJ5IG5hbWVzIGRlZmF1bHQ9Cis+IAorPiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKz4gICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKKz4gICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCis+ICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCis+ICAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorPiAgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKz4gICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCis+ICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+Cis+ICAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKz4gICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKz4gICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorPiAgIENYWENQUCAgICAgIEMrKyBwcmVwcm9jZXNzb3IKKz4gCis+IFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCis+IGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKz4gCis+IF9BQ0VPRgorPiBhY19zdGF0dXM9JD8KKz4gZmkKKz4gCis+IGlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKz4gICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorPiAgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCis+ICAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorPiAgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKz4gICAgICAgY29udGludWUKKz4gICAgIGFjX2J1aWxkZGlyPS4KKz4gCis+IGNhc2UgIiRhY19kaXIiIGluCis+IC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworPiAqKQorPiAgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCis+ICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorPiAgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorPiAgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKz4gICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Cis+ICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Cis+ICAgZXNhYyA7OworPiBlc2FjCis+IGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorPiBhY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4Cis+ICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Cis+IGFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorPiAKKz4gY2FzZSAkc3JjZGlyIGluCis+ICAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorPiAgICAgYWNfc3JjZGlyPS4KKz4gICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKz4gICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKz4gICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCis+ICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworPiAgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCis+ICAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Cis+ICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorPiAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Cis+ICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorPiAgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Cis+IGVzYWMKKz4gYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorPiAKKz4gICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKz4gICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorPiAgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorPiAgICAgICBlY2hvICYmCis+ICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCis+ICAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorPiAgICAgICBlY2hvICYmCis+ICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKz4gICAgIGVsc2UKKz4gICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKz4gICAgIGZpIHx8IGFjX3N0YXR1cz0kPworPiAgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorPiAgIGRvbmUKKz4gZmkKKz4gCis+IHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworPiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCis+ICAgY2F0IDw8XF9BQ0VPRgorPiBjb25maWd1cmUKKz4gZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYzCis+IAorPiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCis+IDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis+IFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCis+IGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKz4gX0FDRU9GCis+ICAgZXhpdAorPiBmaQorPiBjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKKz4gVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKKz4gcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKz4gCis+IEl0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCis+IGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworPiAKKz4gICAkICQwICRACis+IAorPiBfQUNFT0YKKz4gZXhlYyA1Pj5jb25maWcubG9nCis+IHsKKz4gY2F0IDw8X0FTVU5BTUUKKz4gIyMgLS0tLS0tLS0tICMjCis+ICMjIFBsYXRmb3JtLiAjIworPiAjIyAtLS0tLS0tLS0gIyMKKz4gCis+IGhvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCis+IHVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorPiB1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKz4gdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCis+IHVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorPiAKKz4gL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCis+IC9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorPiAKKz4gL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorPiAvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCis+IC91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKz4gL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorPiAvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCis+IC91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKz4gL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorPiAKKz4gX0FTVU5BTUUKKz4gCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IH0gPiY1Cis+IAorPiBjYXQgPiY1IDw8X0FDRU9GCis+IAorPiAKKz4gIyMgLS0tLS0tLS0tLS0gIyMKKz4gIyMgQ29yZSB0ZXN0cy4gIyMKKz4gIyMgLS0tLS0tLS0tLS0gIyMKKz4gCis+IF9BQ0VPRgorPiAKKz4gCis+ICMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCis+ICMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorPiAjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKz4gIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorPiAjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KKz4gYWNfY29uZmlndXJlX2FyZ3M9Cis+IGFjX2NvbmZpZ3VyZV9hcmdzMD0KKz4gYWNfY29uZmlndXJlX2FyZ3MxPQorPiBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorPiBmb3IgYWNfcGFzcyBpbiAxIDIKKz4gZG8KKz4gICBmb3IgYWNfYXJnCis+ICAgZG8KKz4gICAgIGNhc2UgJGFjX2FyZyBpbgorPiAgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworPiAgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKz4gICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorPiAgICAgICBjb250aW51ZSA7OworPiAgICAgKlwnKikKKz4gICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKz4gICAgIGVzYWMKKz4gICAgIGNhc2UgJGFjX3Bhc3MgaW4KKz4gICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7Cis+ICAgICAyKQorPiAgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorPiAgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKz4gCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKz4gICAgICAgZWxzZQorPiAJY2FzZSAkYWNfYXJnIGluCis+IAkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorPiAJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCis+IAkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKz4gCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCis+IAkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCis+IAkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworPiAJICAgIGVzYWMKKz4gCSAgICA7OworPiAJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKz4gCWVzYWMKKz4gICAgICAgZmkKKz4gICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCis+ICAgICAgIDs7Cis+ICAgICBlc2FjCis+ICAgZG9uZQorPiBkb25lCis+ICRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQorPiAkYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KKz4gCis+ICMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKz4gIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKz4gIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCis+ICMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorPiAjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCis+IHRyYXAgJ2V4aXRfc3RhdHVzPSQ/Cis+ICAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCis+ICAgeworPiAgICAgZWNobworPiAKKz4gICAgIGNhdCA8PFxfQVNCT1gKKz4gIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworPiAjIyBDYWNoZSB2YXJpYWJsZXMuICMjCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gX0FTQk9YCis+ICAgICBlY2hvCis+ICAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorPiAoCis+ICAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworPiAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCis+ICAgICBjYXNlICRhY192YWwgaW4gIygKKz4gICAgICoke2FzX25sfSopCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworPiAgICAgICBlc2FjCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCis+ICAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCis+ICAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7Cis+ICAgICAgIGVzYWMgOzsKKz4gICAgIGVzYWMKKz4gICBkb25lCis+ICAgKHNldCkgMj4mMSB8Cis+ICAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCis+ICAgICAqJHthc19ubH1hY19zcGFjZT1cICopCis+ICAgICAgIHNlZCAtbiBcCis+IAkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKz4gCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorPiAgICAgICA7OyAjKAorPiAgICAgKikKKz4gICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKz4gICAgICAgOzsKKz4gICAgIGVzYWMgfAorPiAgICAgc29ydAorPiApCis+ICAgICBlY2hvCis+IAorPiAgICAgY2F0IDw8XF9BU0JPWAorPiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworPiAjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworPiBfQVNCT1gKKz4gICAgIGVjaG8KKz4gICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKz4gICAgIGRvCis+ICAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorPiAgICAgICBjYXNlICRhY192YWwgaW4KKz4gICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworPiAgICAgICBlc2FjCis+ICAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKz4gICAgIGRvbmUgfCBzb3J0Cis+ICAgICBlY2hvCis+IAorPiAgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorPiAgICAgICBjYXQgPDxcX0FTQk9YCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCis+IF9BU0JPWAorPiAgICAgICBlY2hvCis+ICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCis+ICAgICAgIGRvCis+IAlldmFsIGFjX3ZhbD1cJCRhY192YXIKKz4gCWNhc2UgJGFjX3ZhbCBpbgorPiAJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworPiAJZXNhYworPiAJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorPiAgICAgICBkb25lIHwgc29ydAorPiAgICAgICBlY2hvCis+ICAgICBmaQorPiAKKz4gICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorPiAgICAgICBjYXQgPDxcX0FTQk9YCis+ICMjIC0tLS0tLS0tLS0tICMjCis+ICMjIGNvbmZkZWZzLmguICMjCis+ICMjIC0tLS0tLS0tLS0tICMjCis+IF9BU0JPWAorPiAgICAgICBlY2hvCis+ICAgICAgIGNhdCBjb25mZGVmcy5oCis+ICAgICAgIGVjaG8KKz4gICAgIGZpCis+ICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCis+ICAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorPiAgIH0gPiY1Cis+ICAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCis+ICAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCis+ICAgICBleGl0ICRleGl0X3N0YXR1cworPiAnIDAKKz4gZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCis+ICAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCis+IGRvbmUKKz4gYWNfc2lnbmFsPTAKKz4gCis+ICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCis+IHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCis+IAorPiAjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorPiBfQUNFT0YKKz4gCis+IAorPiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKz4gX0FDRU9GCis+IAorPiAKKz4gIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCis+ICMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCis+IGFjX3NpdGVfZmlsZTE9Tk9ORQorPiBhY19zaXRlX2ZpbGUyPU5PTkUKKz4gaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorPiAgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCis+IGVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCis+ICAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCis+ICAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorPiBlbHNlCis+ICAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKz4gICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKKz4gZmkKKz4gZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKKz4gZG8KKz4gICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorPiAgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorPiAgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1Cis+ICAgICAuICIkYWNfc2l0ZV9maWxlIgorPiAgIGZpCis+IGRvbmUKKz4gCis+IGlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorPiAgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCis+ICAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCis+ICAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgICBjYXNlICRjYWNoZV9maWxlIGluCis+ICAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKz4gICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworPiAgICAgZXNhYworNTU5YzE4MjIsMTg4NAorPCAgIGFjX249IGFjX2M9J1xjJyBhY190PQorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgPiRjYWNoZV9maWxlCis+IGZpCis+IAorPiAjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCis+ICMgdmFsdWUuCis+IGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorPiBmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworPiAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0Cis+ICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKz4gICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCis+ICAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorPiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKz4gICAgIHNldCwpCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Cis+ICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Cis+ICAgICAsc2V0KQorPiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Cis+ICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Cis+ICAgICAsKTs7Cis+ICAgICAqKQorPiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCis+IAkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKz4gCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorPiAJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCis+IAlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKz4gCSAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Cis+IAkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06Cis+IAllbHNlCis+IAkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorPiAJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCis+IAlmaQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQorPiAgICAgICBmaTs7Cis+ICAgZXNhYworPiAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKz4gICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKz4gICAgIGNhc2UgJGFjX25ld192YWwgaW4KKz4gICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Cis+ICAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworPiAgICAgZXNhYworPiAgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCis+ICAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorPiAgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKz4gICAgIGVzYWMKKz4gICBmaQorPiBkb25lCis+IGlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzU2NGExODkwLDE5MTIKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IGFjX2V4dD1jCis+IGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorPiAKKz4gCis+IAorPiBhY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGNvbW1vbi9pY3VjZmcuaCIKKz4gCis1NjgsNTY5YzE5MTYsMTkxNworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo1NzA6IGNoZWNraW5nIGZvciBJQ1UgdmVyc2lvbiBudW1iZXJzIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycy4uLiAiID4mNjsgfQorNTc4YzE5MjYsMTkyOAorPCAgICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzU4NmMxOTM2LDE5MzcKKzwgZWNobyAiJGFjX3QiInJlbGVhc2UgJFZFUlNJT04sIGxpYnJhcnkgJExJQl9WRVJTSU9OIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogcmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNQorPiAkYXNfZWNobyAicmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNjsgfQorNTk0YzE5NDUsMTk5MQorPCAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistLS0KKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKz4gZmkKKz4gZmkKKz4gQ0M9JGFjX2N2X3Byb2dfQ0MKKz4gaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorPiAgIGFjX2N0X0NDPSRDQworPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKzU5Niw1OTljMTk5MywyMDQ5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo1OTg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCis+IGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorPiAkYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KKz4gZWxzZQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKz4gZmkKKz4gCis+ICAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCis+ICAgICBDQz0iIgorPiAgIGVsc2UKKz4gICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKz4geWVzOikKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKz4gYWNfdG9vbF93YXJuZWQ9eWVzIDs7Cis+IGVzYWMKKz4gICAgIENDPSRhY19jdF9DQworPiAgIGZpCis+IGVsc2UKKz4gICBDQz0iJGFjX2N2X3Byb2dfQ0MiCis+IGZpCis+IAorPiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCis+ICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCis+ICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis2MDQsNjEzYzIwNTQsMjA2OAorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworPCAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKzwgICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorPCAgICAgICBhY19jdl9wcm9nX0NDPSJnY2MiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzYxNmMyMDcxCis8IENDPSIkYWNfY3ZfcHJvZ19DQyIKKy0tLQorPiBDQz0kYWNfY3ZfcHJvZ19DQworNjE4YzIwNzMsMjA3NAorPCAgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorNjIwYzIwNzYsMjA3NworPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorNjIyYTIwODAsMjA4MgorPiAKKz4gICBmaQorPiBmaQorNjI2LDYyOWMyMDg2LDIwODkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjYyODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorNjM0ZDIwOTMKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorNjM2LDY0OGMyMDk1LDIxMTMKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorPCAgICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCis8IAljb250aW51ZQorPCAgICAgICBmaQorPCAgICAgICBhY19jdl9wcm9nX0NDPSJjYyIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorPiAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKz4gICAgICAgIGNvbnRpbnVlCis+ICAgICAgZmkKKz4gICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzY1M2MyMTE4Cis8ICAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorLS0tCis+ICAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCis2NTgsNjYwYzIxMjMKKzwgICAgIHNldCBkdW1teSAiJGFjX2Rpci8kYWNfd29yZCIgIiRAIgorPCAgICAgc2hpZnQKKzwgICAgIGFjX2N2X3Byb2dfQ0M9IiRAIgorLS0tCis+ICAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKzY2NWMyMTI4Cis8IENDPSIkYWNfY3ZfcHJvZ19DQyIKKy0tLQorPiBDQz0kYWNfY3ZfcHJvZ19DQworNjY3YzIxMzAsMjEzMQorPCAgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorNjY5YzIxMzMsMjEzNAorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorNjcyLDY4MGMyMTM3LDIxNDgKKzwgICBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCis8ICAgICBjYXNlICJgdW5hbWUgLXNgIiBpbgorPCAgICAgKndpbjMyKiB8ICpXSU4zMiopCis8ICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgY2w7IGFjX3dvcmQ9JDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjY3OTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKz4gICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCis+ICAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCis+ICAgZG8KKz4gICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorNjg1LDY5NGMyMTUzLDIxNjcKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorPCAgIGFjX2R1bW15PSIkUEFUSCIKKzwgICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis2OTdjMjE3MAorPCBDQz0iJGFjX2N2X3Byb2dfQ0MiCistLS0KKz4gQ0M9JGFjX2N2X3Byb2dfQ0MKKzY5OWMyMTcyLDIxNzMKKzwgICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorPiAkYXNfZWNobyAiJENDIiA+JjY7IH0KKzcwMWMyMTc1LDIxNzYKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzcwMyw3MDRjMjE3OCwyMjA2Cis8ICA7OworPCAgICAgZXNhYworLS0tCis+IAorPiAKKz4gICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKz4gICBkb25lCis+IGZpCis+IGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKz4gICBhY19jdF9DQz0kQ0MKKz4gICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKz4gZG8KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKzcwNmMyMjA4LDIyMjAKKzwgICB0ZXN0IC16ICIkQ0MiICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorPiBmaQorPiBmaQorPiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworPiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Cis+IGVsc2UKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9Cis3MDksNzEwZDIyMjIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjcxMTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKKzcxMiw3MzBjMjIyNCwyMjI4Cis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworPCAKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKzwgCis8ICNsaW5lIDcyMiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IG1haW4oKXtyZXR1cm4oMCk7fQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Mjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9eWVzCis8ICAgIyBJZiB3ZSBjYW4ndCBydW4gYSB0cml2aWFsIHByb2dyYW0sIHdlIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLgorPCAgIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorPCAgICAgYWNfY3ZfcHJvZ19jY19jcm9zcz1ubworLS0tCis+ICAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworPiBkb25lCis+IAorPiAgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorPiAgICAgQ0M9IiIKKzczMmMyMjMwLDIyMzYKKzwgICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9eWVzCistLS0KKz4gICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKz4geWVzOikKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKz4gYWNfdG9vbF93YXJuZWQ9eWVzIDs7Cis+IGVzYWMKKz4gICAgIENDPSRhY19jdF9DQworNzM0LDczN2QyMjM3Cis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9bm8KKzczOSw3NDVkMjIzOAorPCBybSAtZnIgY29uZnRlc3QqCis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworNzQ3LDc0OWQyMjM5Cis8IGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY193b3JrcyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4KKzwgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorNzUxLDc1NGQyMjQwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjc1MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2NfY3Jvc3MiIDE+JjYKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCis3NTYsNzY3YzIyNDIsMjM2OAorPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo3NTg6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorPCAjaWZkZWYgX19HTlVDX18KKzwgICB5ZXM7Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgeyBhY190cnk9JyR7Q0MtY2N9IC1FIGNvbmZ0ZXN0LmMnOyB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2NzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH07IH0gfCBlZ3JlcCB5ZXMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgYWNfY3ZfcHJvZ19nY2M9eWVzCistLS0KKz4gCis+IHRlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICis+IFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKz4gCis+ICMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKz4gJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKKz4gc2V0IFggJGFjX2NvbXBpbGUKKz4gYWNfY29tcGlsZXI9JDIKKz4geyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9Cis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKz4geyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorPiAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCis+IGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKz4gIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorPiAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCis+ICMgb2YgZXhlZXh0LgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cis+IGFjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCis+IAorPiAjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6Cis+IGFjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCis+IAorPiBhY19ybWZpbGVzPQorPiBmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKKz4gZG8KKz4gICBjYXNlICRhY19maWxlIGluCis+ICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Cis+ICAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gcm0gLWYgJGFjX3JtZmlsZXMKKz4gCis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKz4gICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKz4gIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKz4gIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKz4gIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKz4gIyBBdXRvY29uZi4KKz4gZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCis+IGRvCis+ICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCis+ICAgY2FzZSAkYWNfZmlsZSBpbgorPiAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorPiAJOzsKKz4gICAgIFthYl0ub3V0ICkKKz4gCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0Cis+IAkjIGNlcnRhaW5seSByaWdodC4KKz4gCWJyZWFrOzsKKz4gICAgICouKiApCis+ICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87Cis+IAl0aGVuIDo7IGVsc2UKKz4gCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorPiAJZmkKKz4gCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorPiAJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCis+IAkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKz4gCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorPiAJIyBhY3R1YWxseSB3b3JraW5nLgorPiAJYnJlYWs7OworPiAgICAgKiApCis+IAlicmVhazs7Cis+ICAgZXNhYworPiBkb25lCis+IHRlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorPiAKKzc2OWMyMzcwCis8ICAgYWNfY3ZfcHJvZ19nY2M9bm8KKy0tLQorPiAgIGFjX2ZpbGU9JycKKzc3MGEyMzcyLDI0MjMKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KKz4gaWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKz4geyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Cis+ICAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9OyB9Cis+IGZpCis+IAorPiBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorPiAKKz4gIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKz4gIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KKz4gIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorPiAjIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgorPiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKz4gICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKz4gICB7IChjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY190cnkiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorPiAgICAgY3Jvc3NfY29tcGlsaW5nPW5vCis+ICAgZWxzZQorPiAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorPiAJY3Jvc3NfY29tcGlsaW5nPXllcworPiAgICAgZWxzZQorPiAJeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorPiBJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorPiBJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorPiAgICAgZmkKKz4gICBmaQorNzcxYTI0MjUsMjQyNgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorPiAkYXNfZWNobyAieWVzIiA+JjY7IH0KKzc3M2MyNDI4LDI1NDkKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorLS0tCis+IHJtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0Cis+IGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCis+ICMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCis+ICMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKz4gJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorPiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorPiAjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKz4gIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKz4gIyBgcm0nLgorPiBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKz4gICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKz4gICBjYXNlICRhY19maWxlIGluCis+ICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Cis+ICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKz4gCSAgYnJlYWs7OworPiAgICAgKiApIGJyZWFrOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gZWxzZQorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKz4geyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKz4gRVhFRVhUPSRhY19jdl9leGVleHQKKz4gYWNfZXhlZXh0PSRFWEVFWFQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorPiAgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCis+ICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworPiAgIGNhc2UgJGFjX2ZpbGUgaW4KKz4gICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7Cis+ICAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKz4gICAgICAgIGJyZWFrOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KKz4gT0JKRVhUPSRhY19jdl9vYmpleHQKKz4gYWNfb2JqZXh0PSRPQkpFWFQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzc3NWMyNTUxLDI1OTQKKzwgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+ICNpZm5kZWYgX19HTlVDX18KKz4gICAgICAgIGNob2tlIG1lCis+ICNlbmRpZgorPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgYWNfY29tcGlsZXJfZ251PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jb21waWxlcl9nbnU9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Cis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKz4gaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCis3NzlhMjU5OSwyNjU4Cis+IGFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKz4gYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCis+ICAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCis+ICAgIGFjX2N2X3Byb2dfY2NfZz1ubworPiAgICBDRkxBR1M9Ii1nIgorPiAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2NjX2c9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCUNGTEFHUz0iIgorPiAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis3ODEsNzg3YzI2NjAsMjY4MgorPCBhY190ZXN0X0NGTEFHUz0iJHtDRkxBR1Mrc2V0fSIKKzwgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCis8IENGTEFHUz0KKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjc4NjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY2NfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis3ODksNzkwYzI2ODQsMjcyMQorPCAgIGVjaG8gJ3ZvaWQgZigpe30nID4gY29uZnRlc3QuYworPCBpZiB0ZXN0IC16ICJgJHtDQy1jY30gLWcgLWMgY29uZnRlc3QuYyAyPiYxYCI7IHRoZW4KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCis+IAkgQ0ZMQUdTPSItZyIKKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzc5M2MyNzI0LDI3MjcKKzwgICBhY19jdl9wcm9nX2NjX2c9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAKKzc5NWQyNzI4Cis8IHJtIC1mIGNvbmZ0ZXN0KgorNzk2YTI3MzAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis3OTljMjczMywyNzQwCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Cis4MDFjMjc0MgorPCAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLS0tCis+ICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworODE0YTI3NTYsMjc5MAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCis+IGFjX3NhdmVfQ0M9JENDCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPHN0ZGFyZy5oPgorPiAjaW5jbHVkZSA8c3RkaW8uaD4KKz4gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorPiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKz4gLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworPiBzdHJ1Y3QgYnVmIHsgaW50IHg7IH07Cis+IEZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Cis+IHN0YXRpYyBjaGFyICplIChwLCBpKQorPiAgICAgIGNoYXIgKipwOworPiAgICAgIGludCBpOworPiB7Cis+ICAgcmV0dXJuIHBbaV07Cis+IH0KKz4gc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQorPiB7Cis+ICAgY2hhciAqczsKKz4gICB2YV9saXN0IHY7Cis+ICAgdmFfc3RhcnQgKHYscCk7Cis+ICAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKz4gICB2YV9lbmQgKHYpOworPiAgIHJldHVybiBzOworPiB9Cis4MTZjMjc5MiwyODIxCis8IGZvciBhY19wcm9nIGluICRDQ0MgYysrIGcrKyBnY2MgQ0MgY3h4IGNjKysgY2wKKy0tLQorPiAvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworPiAgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCis+ICAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorPiAgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Cis+ICAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKz4gICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCis+ICAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KKz4gaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKz4gCis+IC8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworPiAgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCis+ICNkZWZpbmUgRk9PKHgpICd4JworPiBpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKz4gCis+IGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworPiBzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKz4gc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Cis+IGludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworPiBpbnQgYXJnYzsKKz4gY2hhciAqKmFyZ3Y7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorPiAJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKKzgxOCw4MjNjMjgyMywyODk1Cis8ICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjgyMjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+ICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCis+ICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Cis+ICAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKKz4gZG9uZQorPiBybSAtZiBjb25mdGVzdC4kYWNfZXh0Cis+IENDPSRhY19zYXZlX0NDCis+IAorPiBmaQorPiAjIEFDX0NBQ0hFX1ZBTAorPiBjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorPiAgIHgpCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Cis+ICRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7Cis+ICAgeG5vKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorPiAkYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworPiAgICopCis+ICAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworPiBlc2FjCis+IAorPiAKKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IAorPiBhY19leHQ9Y3BwCis+IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IGlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCis+ICAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKz4gICAgIENYWD0kQ0NDCis+ICAgZWxzZQorPiAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorPiAgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCis+ICAgZG8KKz4gICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzgyOCw4MzdjMjkwMCwyOTE0Cis8ICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfcHJvZyIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis4NDBjMjkxNworPCBDWFg9IiRhY19jdl9wcm9nX0NYWCIKKy0tLQorPiBDWFg9JGFjX2N2X3Byb2dfQ1hYCis4NDJjMjkxOSwyOTIwCis8ICAgZWNobyAiJGFjX3QiIiRDWFgiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQorPiAkYXNfZWNobyAiJENYWCIgPiY2OyB9Cis4NDRjMjkyMiwyOTIzCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9Cis4NDdjMjkyNiwyOTU1Cis8IHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCistLS0KKz4gCis+ICAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworPiAgIGRvbmUKKz4gZmkKKz4gaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKz4gICBhY19jdF9DWFg9JENYWAorPiAgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCis+IGRvCis+ICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCis+IHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCis+IGVsc2UKKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis4NDljMjk1NywyOTY4Cis8IHRlc3QgLW4gIiRDWFgiIHx8IENYWD0iZ2NjIgorLS0tCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKKz4gaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorODUyLDg1M2MyOTcxLDI5NzIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6ODU0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CistLS0KKz4gICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworPiBkb25lCis4NTUsODczYzI5NzQsMjk3NQorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworPCAKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKzwgCis8ICNsaW5lIDg2NSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IGludCBtYWluKCl7cmV0dXJuKDApO30KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODcwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBhY19jdl9wcm9nX2N4eF93b3Jrcz15ZXMKKzwgICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCis8ICAgaWYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCis8ICAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz1ubworLS0tCis+ICAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorPiAgICAgQ1hYPSJnKysiCis4NzVjMjk3NywyOTgzCis8ICAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz15ZXMKKy0tLQorPiAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorPiB5ZXM6KQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorPiBhY190b29sX3dhcm5lZD15ZXMgOzsKKz4gZXNhYworPiAgICAgQ1hYPSRhY19jdF9DWFgKKzg3Nyw4ODBkMjk4NAorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBhY19jdl9wcm9nX2N4eF93b3Jrcz1ubworODgyLDg4OGQyOTg1Cis8IHJtIC1mciBjb25mdGVzdCoKKzwgYWNfZXh0PWMKKzwgIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorPCBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworPCBhY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCis4OTAsODkyYzI5ODcKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF93b3JrcyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF93b3JrcyA9IG5vOyB0aGVuCis8ICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBDKysgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgZmkKKzg5NCw4OTdjMjk4OSwzMDM3Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciAoJENYWCAkQ1hYRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6ODk2OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9jcm9zcyIgMT4mNgorPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCistLS0KKz4gIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorPiAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Cis+IHNldCBYICRhY19jb21waWxlCis+IGFjX2NvbXBpbGVyPSQyCis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorPiB7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9Cis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis4OTksOTA2YzMwMzksMzA0MworPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjkwMTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMrKyIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2d4eCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LkMgPDxFT0YKKzwgI2lmZGVmIF9fR05VQ19fCis8ICAgeWVzOworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gI2lmbmRlZiBfX0dOVUNfXworPiAgICAgICAgY2hva2UgbWUKKzkwOCw5MTZkMzA0NAorPCBFT0YKKzwgaWYgeyBhY190cnk9JyR7Q1hYLWcrK30gLUUgY29uZnRlc3QuQyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTEwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBhY19jdl9wcm9nX2d4eD15ZXMKKzwgZWxzZQorPCAgIGFjX2N2X3Byb2dfZ3h4PW5vCis8IGZpCis8IGZpCis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfZ3h4IiAxPiY2Cis5MThjMzA0NiwzMDgyCis8IGlmIHRlc3QgJGFjX2N2X3Byb2dfZ3h4ID0geWVzOyB0aGVuCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jb21waWxlcl9nbnU9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2NvbXBpbGVyX2dudT1ubworPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorPiAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQorPiBpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKzkyMmEzMDg3LDMxMDcKKz4gYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKz4gYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKz4gICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworPiAgICBhY19jdl9wcm9nX2N4eF9nPW5vCis+ICAgIENYWEZMQUdTPSItZyIKKz4gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworOTI0LDkzMGMzMTA5LDMxMzEKKzwgYWNfdGVzdF9DWFhGTEFHUz0iJHtDWFhGTEFHUytzZXR9IgorPCBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCis8IENYWEZMQUdTPQorPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7Q1hYLWcrK30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo5Mjk6IGNoZWNraW5nIHdoZXRoZXIgJHtDWFgtZysrfSBhY2NlcHRzIC1nIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY3h4X2cnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2N4eF9nPXllcworOTMyLDkzM2MzMTMzLDMyMDkKKzwgICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmNjCis8IGlmIHRlc3QgLXogImAke0NYWC1nKyt9IC1nIC1jIGNvbmZ0ZXN0LmNjIDI+JjFgIjsgdGhlbgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlDWFhGTEFHUz0iIgorPiAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworPiAJIENYWEZMQUdTPSItZyIKKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorOTM2YzMyMTIsMzIxOAorPCAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAKKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorOTM4ZDMyMTkKKzwgcm0gLWYgY29uZnRlc3QqCis5MzlhMzIyMQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzk0MmMzMjI0LDMyMjgKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9nIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQorOTQ0YzMyMzAKKzwgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistLS0KKz4gICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworOTU3YTMyNDQsMzI0OAorPiBhY19leHQ9YworPiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKzk2MCw5NjFjMzI1MSwzMjUyCis8IGZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCis8ICAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKy0tLQorPiBmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworPiAgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKzk2NWMzMjU2Cis8ICAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgorLS0tCis+ICAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCis5NjhhMzI2MCwzMjYzCis+ICAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKz4gICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorPiAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCis+ICAgICBicmVhaworOTcyYzMyNjcsMzI2OQorPCAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgMT4mMjsgZXhpdCAxOyB9CistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis5NzQsOTc2YzMyNzEsMzI3OQorPCBhY19jb25maWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzCis8IGFjX2NvbmZpZ19zdWI9JGFjX2F1eF9kaXIvY29uZmlnLnN1YgorPCBhY19jb25maWd1cmU9JGFjX2F1eF9kaXIvY29uZmlndXJlICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKy0tLQorPiAKKz4gIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCis+ICMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKz4gIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5Cis+ICMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKz4gYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorPiBhY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKz4gYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorPiAKKzk4NGEzMjg4Cis+ICMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworOTg3YTMyOTIKKz4gIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCis5ODksOTkwYzMyOTQsMzI5NgorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjk5MTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CistLS0KKz4gIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KKzk5Miw5OTNjMzI5OCwzMjk5Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX2luc3RhbGwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorOTk1LDEwMDVjMzMwMSwzMzE4Cis8ICAgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSI6IgorPCAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCis8ICAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKzwgICAgIGNhc2UgIiRhY19kaXIvIiBpbgorPCAgICAgL3wuL3wuLy98L2V0Yy8qfC91c3Ivc2Jpbi8qfC91c3IvZXRjLyp8L3NiaW4vKnwvdXNyL2Fmc3dzL2Jpbi8qfC91c3IvdWNiLyopIDs7Cis8ICAgICAqKQorPCAgICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorPCAgICAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKzwgICAgICAgIyBieSBkZWZhdWx0LgorPCAgICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCis8ICAgICAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY19wcm9nOyB0aGVuCistLS0KKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKz4gY2FzZSAkYXNfZGlyLyBpbgorPiAgIC4vIHwgLi8vIHwgL2NDLyogfCBcCis+ICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCis+ICAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCis+ICAgL3Vzci91Y2IvKiApIDs7Cis+ICAgKikKKz4gICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCis+ICAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKz4gICAgICMgYnkgZGVmYXVsdC4KKz4gICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKz4gICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+IAlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisxMDA3YzMzMjAKKzwgICAgICAgICAgICAgZ3JlcCBkc3Btc2cgJGFjX2Rpci8kYWNfcHJvZyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0tLQorPiAJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzEwMDlhMzMyMywzMzI2Cis+IAkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKz4gCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+IAkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCis+IAkgICAgOgorMTAxMSwxMDEyYzMzMjgsMzMzOQorPCAJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKzwgCSAgICBicmVhayAyCistLS0KKz4gCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKz4gCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorPiAJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCis+IAkgICAgbWtkaXIgY29uZnRlc3QuZGlyCis+IAkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKz4gCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCis+IAkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKz4gCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworPiAJICAgIHRoZW4KKz4gCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKz4gCSAgICAgIGJyZWFrIDMKKz4gCSAgICBmaQorMTAxNiwxMDE5YzMzNDMsMzM1MAorPCAgICAgICA7OworPCAgICAgZXNhYworPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX0lGUyIKKy0tLQorPiAgICAgZG9uZQorPiAgICAgOzsKKz4gZXNhYworPiAKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorPiBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKzEwMjNjMzM1NAorPCAgICAgSU5TVEFMTD0iJGFjX2N2X3BhdGhfaW5zdGFsbCIKKy0tLQorPiAgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisxMDI1LDEwMjZjMzM1NiwzMzU3Cis8ICAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCis8ICAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKy0tLQorPiAgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorPiAgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorMTAyOCwxMDI5YzMzNTksMzM2MAorPCAgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKzwgICAgIElOU1RBTEw9IiRhY19pbnN0YWxsX3NoIgorLS0tCis+ICAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCis+ICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisxMDMyYzMzNjMsMzM2NAorPCBlY2hvICIkYWNfdCIiJElOU1RBTEwiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Cis+ICRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisxMDM4YzMzNzAKKzwgdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMX1BST0dSQU19JworLS0tCis+IHRlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisxMDU0LDEwNTdjMzM4NiwzMzg5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMDU2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19TVFJJUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxMDYyLDEwNzFjMzM5NCwzNDA4Cis8ICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorPCAgICAgICBicmVhaworPCAgICAgZmkKKzwgICBkb25lCis8ICAgSUZTPSIkYWNfc2F2ZV9pZnMiCistLS0KKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19TVFJJUD0ic3RyaXAiCis+ICAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorPiAgICAgYnJlYWsgMgorPiAgIGZpCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorMTA3NWMzNDEyCis8IFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKy0tLQorPiBTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorMTA3N2MzNDE0LDM0MTUKKzwgICBlY2hvICIkYWNfdCIiJFNUUklQIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQorPiAkYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KKzEwNzljMzQxNywzNDE4Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9CisxMDgyYTM0MjIKKz4gCisxMDg1YzM0MjUKKzwgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistLS0KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKzEwODcsMTA5MGMzNDI3LDM0MzAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjEwODk6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX1VfTUFLRScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9VX01BS0Urc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTA5MiwxMDkzYzM0MzIsMzQzMworPCAgIGNhc2UgIiRVX01BS0UiIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRVX01BS0UgaW4KKz4gICBbXFwvXSogfCA/OltcXC9dKikKKzEwOTYsMTA5OGQzNDM1Cis8ICAgPzovKikJCQkgCis8ICAgYWNfY3ZfcGF0aF9VX01BS0U9IiRVX01BS0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTEwMCwxMTA5YzM0MzcsMzQ1MQorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9VX01BS0U9IiRhY19kaXIvJGFjX3dvcmQiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3BhdGhfVV9NQUtFPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzExMTNjMzQ1NQorPCBVX01BS0U9IiRhY19jdl9wYXRoX1VfTUFLRSIKKy0tLQorPiBVX01BS0U9JGFjX2N2X3BhdGhfVV9NQUtFCisxMTE1YzM0NTcsMzQ1OAorPCAgIGVjaG8gIiRhY190IiIkVV9NQUtFIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVV9NQUtFIiA+JjUKKz4gJGFzX2VjaG8gIiRVX01BS0UiID4mNjsgfQorMTExN2MzNDYwLDM0NjEKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzExMjBjMzQ2NCwzNDY1Cis8IHRlc3QgLW4gIiRVX01BS0UiICYmIGJyZWFrCistLS0KKz4gCis+ICAgdGVzdCAtbiAiJFVfTUFLRSIgJiYgYnJlYWsKKzExMjgsMTEzMWMzNDczLDM0NzYKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjExMzA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX0RPWFlHRU4nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRE9YWUdFTitzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxMTMzLDExMzRjMzQ3OCwzNDc5Cis8ICAgY2FzZSAiJERPWFlHRU4iIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRET1hZR0VOIGluCis+ICAgW1xcL10qIHwgPzpbXFwvXSopCisxMTM3LDExMzlkMzQ4MQorPCAgID86LyopCQkJIAorPCAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJERPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTE0MSwxMTUwYzM0ODMsMzQ5OAorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIOi91c3IvbG9jYWwvYmluOi91c3IvYmluIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9ET1hZR0VOPSIkYWNfZGlyLyRhY193b3JkIgorPCAgICAgICBicmVhaworPCAgICAgZmkKKzwgICBkb25lCis8ICAgSUZTPSIkYWNfc2F2ZV9pZnMiCistLS0KKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGFzX2R1bW15PSIkUEFUSDovdXNyL2xvY2FsL2JpbjovdXNyL2JpbiIKKz4gZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wYXRoX0RPWFlHRU49IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCis+ICAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorPiAgICAgYnJlYWsgMgorPiAgIGZpCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorMTE1NGMzNTAyCis8IERPWFlHRU49IiRhY19jdl9wYXRoX0RPWFlHRU4iCistLS0KKz4gRE9YWUdFTj0kYWNfY3ZfcGF0aF9ET1hZR0VOCisxMTU2YzM1MDQsMzUwNQorPCAgIGVjaG8gIiRhY190IiIkRE9YWUdFTiIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERPWFlHRU4iID4mNQorPiAkYXNfZWNobyAiJERPWFlHRU4iID4mNjsgfQorMTE1OGMzNTA3LDM1MDgKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzExNjQsMTE4MGMzNTE0LDM1NDMKKzwgaWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorPCBlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBydW4gJGFjX2NvbmZpZ19zdWIiIDE+JjI7IGV4aXQgMTsgfQorPCBmaQorPCAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMTcwOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKzwgCis8IGhvc3RfYWxpYXM9JGhvc3QKKzwgY2FzZSAiJGhvc3RfYWxpYXMiIGluCis8IE5PTkUpCis8ICAgY2FzZSAkbm9ub3B0IGluCis8ICAgTk9ORSkKKzwgICAgIGlmIGhvc3RfYWxpYXM9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfZ3Vlc3NgOyB0aGVuIDoKKzwgICAgIGVsc2UgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkgOzsKKzwgICAqKSBob3N0X2FsaWFzPSRub25vcHQgOzsKKzwgICBlc2FjIDs7CistLS0KKz4gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKKz4gdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCis+ICAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKKz4gdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCis+ICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBhY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Cis+ICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KKz4gY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKz4gKi0qLSopIDs7Cis+ICopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKzExODIsMTIxNmMzNTQ1LDM1NzAKKzwgCis8IGhvc3Q9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfc3ViICRob3N0X2FsaWFzYAorPCBob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCis8IGhvc3RfdmVuZG9yPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKzwgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCis8IGVjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorPCAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMTkxOiBjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2N5Z3dpbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTE5NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IGludCBtYWluKCkgeworPCAKKzwgI2lmbmRlZiBfX0NZR1dJTl9fCis8ICNkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKzwgI2VuZGlmCis8IHJldHVybiBfX0NZR1dJTl9fOworPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyMDc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY3lnd2luPXllcworPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY3lnd2luPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiBidWlsZD0kYWNfY3ZfYnVpbGQKKz4gYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworPiBzZXQgeCAkYWNfY3ZfYnVpbGQKKz4gc2hpZnQKKz4gYnVpbGRfY3B1PSQxCis+IGJ1aWxkX3ZlbmRvcj0kMgorPiBzaGlmdDsgc2hpZnQKKz4gIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCis+ICMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKz4gYnVpbGRfb3M9JCoKKz4gSUZTPSRhY19zYXZlX0lGUworPiBjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKz4gICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorPiBlbHNlCis+ICAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKz4gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzEyMTksMTI0NWQzNTcyCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2Cis8IENZR1dJTj0KKzwgdGVzdCAiJGFjX2N2X2N5Z3dpbiIgPSB5ZXMgJiYgQ1lHV0lOPXllcworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMjI0OiBjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9taW5ndzMyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxMjI5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAKKzwgaW50IG1haW4oKSB7Cis8IHJldHVybiBfX01JTkdXMzJfXzsKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjM2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X21pbmd3MzI9eWVzCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9taW5ndzMyPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBybSAtZiBjb25mdGVzdCoKKzEyNDZhMzU3NCwzNTkzCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KKz4gY2FzZSAkYWNfY3ZfaG9zdCBpbgorPiAqLSotKikgOzsKKz4gKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gZXNhYworPiBob3N0PSRhY19jdl9ob3N0Cis+IGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKz4gc2V0IHggJGFjX2N2X2hvc3QKKz4gc2hpZnQKKz4gaG9zdF9jcHU9JDEKKz4gaG9zdF92ZW5kb3I9JDIKKz4gc2hpZnQ7IHNoaWZ0Cis+ICMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorPiAjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Cis+IGhvc3Rfb3M9JCoKKz4gSUZTPSRhY19zYXZlX0lGUworPiBjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworMTI0OCwxMjc3ZDM1OTQKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9taW5ndzMyIiAxPiY2Cis8IE1JTkdXMzI9Cis8IHRlc3QgIiRhY19jdl9taW5ndzMyIiA9IHllcyAmJiBNSU5HVzMyPXllcworPCAKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMjU1OiBjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZXhlZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgaWYgdGVzdCAiJENZR1dJTiIgPSB5ZXMgfHwgdGVzdCAiJE1JTkdXMzIiID0geWVzOyB0aGVuCis8ICAgYWNfY3ZfZXhlZXh0PS5leGUKKzwgZWxzZQorPCAgIHJtIC1mIGNvbmZ0ZXN0KgorPCAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuJGFjX2V4dAorPCAgIGFjX2N2X2V4ZWV4dD0KKzwgICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyNjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH07IHRoZW4KKzwgICAgIGZvciBmaWxlIGluIGNvbmZ0ZXN0Lio7IGRvCis8ICAgICAgIGNhc2UgJGZpbGUgaW4KKzwgICAgICAgKi5jIHwgKi5vIHwgKi5vYmopIDs7Cis8ICAgICAgICopIGFjX2N2X2V4ZWV4dD1gZWNobyAkZmlsZSB8IHNlZCAtZSBzL2NvbmZ0ZXN0Ly9gIDs7Cis8ICAgICAgIGVzYWMKKzwgICAgIGRvbmUKKzwgICBlbHNlCis8ICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBleGl0IDE7IH0KKzwgICBmaQorPCAgIHJtIC1mIGNvbmZ0ZXN0KgorPCAgIHRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iID0geCAmJiBhY19jdl9leGVleHQ9bm8KKzwgZmkKKzwgZmkKKzEyNzksMTI4MmQzNTk1Cis8IEVYRUVYVD0iIgorPCB0ZXN0IHgiJHthY19jdl9leGVleHR9IiAhPSB4bm8gJiYgRVhFRVhUPSR7YWNfY3ZfZXhlZXh0fQorPCBlY2hvICIkYWNfdCIiJHthY19jdl9leGVleHR9IiAxPiY2Cis8IGFjX2V4ZWV4dD0kRVhFRVhUCisxMjg2LDEyODhjMzU5OSwzNjAxCis8ICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTI4ODogY2hlY2tpbmcgd2hldGhlciBzdHJpY3QgY29tcGlsaW5nIGlzIG9uIiA+JjUKKzwgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgb3IgLS1kaXNhYmxlLXN0cmljdCB3YXMgZ2l2ZW4uCistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24uLi4gIiA+JjY7IH0KKz4gICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgd2FzIGdpdmVuLgorMTI5MCwxMjkxYzM2MDMKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfc3RyaWN0IgorPCAgIAorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfc3RyaWN0OworMTI5OGMzNjEwCis8ICAgICAgIAorLS0tCis+IAorMTMwM2MzNjE1LDM2MTYKKzwgICAgIGVjaG8gIiRhY190IiIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiAxPiY2CistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY191c2Vfc3RyaWN0X29wdGlvbnMiID4mNQorPiAkYXNfZWNobyAiJGFjX3VzZV9zdHJpY3Rfb3B0aW9ucyIgPiY2OyB9CisxMzQzYzM2NTYsMzY1NworPCAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgb3IgLS1kaXNhYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorLS0tCis+IAorPiAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorMTM0NSwxMzQ2YzM2NTkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfNjRiaXRfbGlicyIKKzwgICBFTkFCTEVfNjRCSVRfTElCUz0ke2VuYWJsZXZhbH0KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlXzY0Yml0X2xpYnM7IEVOQUJMRV82NEJJVF9MSUJTPSR7ZW5hYmxldmFsfQorMTM0OWMzNjYyCis8ICAgICAKKy0tLQorPiAKKzEzNTIsMTM1M2MzNjY1LDM2NjYKKzwgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMzU0OiBjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIgPiY1CistLS0KKz4gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydC4uLiAiID4mNjsgfQorMTQwOGMzNzIxCis8ICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorLS0tCis+ICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPSBubzsgdGhlbgorMTQyMCwxNDIyYzM3MzMsMzczOAorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQyMiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0MjQsMTQyNmMzNzQwLDM3NjIKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQyNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDI5LDE0MzJjMzc2NSwzNzcwCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQzNGMzNzcyLDM3NzMKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQzNmEzNzc2Cis+IAorMTQ1MGMzNzkwCis8ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tCis+IAorMTQ1OCwxNDYwYzM3OTgsMzgwMworPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQ2MCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0NjIsMTQ2NGMzODA1LDM4MjcKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ2NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDY3LDE0NzBjMzgzMCwzODM1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQ3MmMzODM3LDM4MzgKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQ3NGEzODQxCis+IAorMTQ4MywxNDg1YzM4NTAsMzg1NQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQ4NSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0ODcsMTQ4OWMzODU3LDM4NzkKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ4OTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDkyLDE0OTVjMzg4MiwzODg3Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQ5N2MzODg5LDM4OTAKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQ5OWEzODkzCis+IAorMTUxMWMzOTA1LDM5MDYKKzwgICAgICAgICBlY2hvICIkYWNfdCIiJEVOQUJMRV82NEJJVF9MSUJTIiAxPiY2CistLS0KKz4gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRU5BQkxFXzY0QklUX0xJQlMiID4mNQorPiAkYXNfZWNobyAiJEVOQUJMRV82NEJJVF9MSUJTIiA+JjY7IH0KKzE1MTcsMTUyMGMzOTEyLDM5MTUKKzwgCWVjaG8gJGFjX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNTE5OiBjaGVja2luZyB3aGljaCBNYWtlZmlsZSBmcmFnbWVudCB0byB1c2UiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snaWN1X2N2X2hvc3RfZnJhZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2ljdV9jdl9ob3N0X2ZyYWcrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTUyMmMzOTE3Cis8ICAgCistLS0KKz4gCisxNTI1LDE1MjZjMzkyMCwzOTIxCis8IAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgkKKzwgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXNvbGFyaXMtZ2NjIAorLS0tCis+IAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorPiAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcy1nY2MKKzE1MzNjMzkyOAorPCAJZWxzZSAgCistLS0KKz4gCWVsc2UKKzE1ODcsMTU4OWQzOTgxCis8IAkJCis8IAkKKzwgZmkKKzE1OTFjMzk4MywzOTg2Cis8IGVjaG8gIiRhY190IiIkaWN1X2N2X2hvc3RfZnJhZyIgMT4mNgorLS0tCis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaWN1X2N2X2hvc3RfZnJhZyIgPiY1Cis+ICRhc19lY2hvICIkaWN1X2N2X2hvc3RfZnJhZyIgPiY2OyB9CisxNTk1LDE1OTljMzk5MCwzOTkzCis8IAkqLSotaHB1eCopIAllY2hvICRhY19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE1OTc6IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorPCBhY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAJKi0qLWhwdXgqKSAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbGliX21fZmxvb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTYwMWMzOTk1Cis8ICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0tLQorPiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKzE2MDMsMTYyOWMzOTk3LDQwNTUKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxNjA1ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIGZsb29yKCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgZmxvb3IoKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2MTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgTElCUz0iJGFjX3NhdmVfTElCUyIKKzwgCis8IGZpCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLS0tCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgZmxvb3IgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGZsb29yICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfbGliX21fZmxvb3I9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9saWJfbV9mbG9vciIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCisxNjMxLDE2MzJkNDA1NgorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisxNjM1LDE2NjZkNDA1OAorPCAJCis8IAkqKSAJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTYzODogY2hlY2tpbmcgZm9yIGZsb29yIGluIC1sbSIgPiY1Cis8IGFjX2xpYl92YXI9YGVjaG8gbSdfJ2Zsb29yIHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKzwgTElCUz0iLWxtICAkTElCUyIKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxNjQ2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIGZsb29yKCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgZmxvb3IoKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2NTc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgTElCUz0iJGFjX3NhdmVfTElCUyIKKzE2NjgsMTY3NWM0MDYwLDQxMjkKKzwgZmkKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBtIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCis8ICAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCis8ICNkZWZpbmUgJGFjX3RyX2xpYiAxCis8IEVPRgorLS0tCis+IAkqKQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZsb29yIGluIC1sbSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0uLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9saWJfbV9mbG9vcitzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCis+IExJQlM9Ii1sbSAgJExJQlMiCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgZmxvb3IgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGZsb29yICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfbGliX21fZmxvb3I9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9saWJfbV9mbG9vciIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCis+ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorPiAjZGVmaW5lIEhBVkVfTElCTSAxCis+IF9BQ0VPRgorMTY3OSwxNjgwZDQxMzIKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorMTY4MmM0MTM0Cis8ICAKKy0tLQorPiAKKzE2ODcsMTY4OGM0MTM5LDQxNDAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE2ODk6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorMTY5MGM0MTQyCis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgb3IgLS1kaXNhYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCisxNjkyLDE2OTNjNDE0NAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MDNjNDE1NCw0MTU1Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MDYsMTcwN2M0MTU4LDQxNTkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE3MDg6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorMTcwOWM0MTYxCis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgb3IgLS1kaXNhYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCisxNzExLDE3MTJjNDE2MworPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9zdGF0aWMiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MTljNDE3MCw0MTcxCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MjIsMTcyM2M0MTc0LDQxNzUKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTcyNDogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiID4mNQorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzLi4uICIgPiY2OyB9CisxNzI2YzQxNzgKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIG9yIC0tZGlzYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KKzE3MjgsMTcyOWM0MTgwCis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX2RlYnVnIgorPCAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MzVjNDE4Niw0MTg3Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MzgsMTczOWM0MTkwLDQxOTEKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNzQwOiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKzE3NDJjNDE5NAorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVsZWFzZSBvciAtLWRpc2FibGUtcmVsZWFzZSB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbGVhc2Ugd2FzIGdpdmVuLgorMTc0NCwxNzQ1YzQxOTYKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfcmVsZWFzZSIKKzwgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfcmVsZWFzZTsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3NTFjNDIwMiw0MjAzCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3NTQsMTc1OWM0MjA2LDQyMTIKKzwgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNzU4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19SQU5MSUInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE3NjQsMTc3NGM0MjE3LDQyMzEKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorPCAgIGFjX2R1bW15PSIkUEFUSCIKKzwgICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9InJhbmxpYiIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorPCAgIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19SQU5MSUI9IjoiCistLS0KKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzE3NzdjNDIzNAorPCBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKy0tLQorPiBSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCisxNzc5YzQyMzYsNDI5MworPCAgIGVjaG8gIiRhY190IiIkUkFOTElCIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKKz4gJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKz4gICBhY19jdF9SQU5MSUI9JFJBTkxJQgorPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCis+IGVsc2UKKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKz4gaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCis+ICAgICBSQU5MSUI9IjoiCis+ICAgZWxzZQorPiAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorPiB5ZXM6KQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorPiBhY190b29sX3dhcm5lZD15ZXMgOzsKKz4gZXNhYworPiAgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKz4gICBmaQorMTc4MWM0Mjk1Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKzE3ODYsMTc4OWM0MzAwLDQzMDMKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE3ODg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX0FSJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX0FSK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE3OTEsMTc5MmM0MzA1LDQzMDYKKzwgICBjYXNlICIkQVIiIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRBUiBpbgorPiAgIFtcXC9dKiB8ID86W1xcL10qKQorMTc5NSwxNzk3ZDQzMDgKKzwgICA/Oi8qKQkJCSAKKzwgICBhY19jdl9wYXRoX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTc5OSwxODA4YzQzMTAsNDMyNQorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIOi9iaW46L3Vzci9iaW46L3Vzci9jY3MvYmluIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9BUj0iJGFjX2Rpci8kYWNfd29yZCIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+ICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBhc19kdW1teT0iJFBBVEg6L2JpbjovdXNyL2JpbjovdXNyL2Njcy9iaW4iCis+IGZvciBhc19kaXIgaW4gJGFzX2R1bW15Cis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcGF0aF9BUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCisxODEzYzQzMzAKKzwgQVI9IiRhY19jdl9wYXRoX0FSIgorLS0tCis+IEFSPSRhY19jdl9wYXRoX0FSCisxODE1YzQzMzIsNDMzMworPCAgIGVjaG8gIiRhY190IiIkQVIiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1Cis+ICRhc19lY2hvICIkQVIiID4mNjsgfQorMTgxN2M0MzM1LDQzMzYKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzE4MjEsMTgyMmM0MzQwLDQzNDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODIzOiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzIiA+JjUKKy0tLQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIHJlbmFtaW5nIG9mIHN5bWJvbHMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzLi4uICIgPiY2OyB9CisxODI1YzQzNDUKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbmFtaW5nIG9yIC0tZGlzYWJsZS1yZW5hbWluZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbmFtaW5nIHdhcyBnaXZlbi4KKzE4MjcsMTgyOGM0MzQ3Cis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX3JlbmFtaW5nIgorPCAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9yZW5hbWluZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE4MzVjNDM1NCw0MzU1Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE4MzgsMTgzOWM0MzU4LDQzNTkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODQwOiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBmdW5jdGlvbiBhbmQgZGF0YSB0cmFjaW5nIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcuLi4gIiA+JjY7IH0KKzE4NDJjNDM2MgorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdHJhY2luZyBvciAtLWRpc2FibGUtdHJhY2luZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRyYWNpbmcgd2FzIGdpdmVuLgorMTg0NCwxODQ1YzQzNjQKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfdHJhY2luZyIKKzwgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfdHJhY2luZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE4NTJjNDM3MSw0MzcyCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE4NTVjNDM3NQorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggb3IgLS1kaXNhYmxlLXJwYXRoIHdhcyBnaXZlbi4KKy0tLQorPiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgorMTg1NywxODU4YzQzNzcKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfcnBhdGgiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMTg3MSwxODc0YzQzOTAsNDM5MworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODczOiBjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2lubGluZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQy4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE4NzgsMTg4MGM0Mzk3LDQ0MDIKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDE4ODAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisxODgyYzQ0MDQsNDQwNgorPCBpbnQgbWFpbigpIHsKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7CisxODg0LDE4ODdjNDQwOCw0NDI5Cis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTg4NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzE4OTAsMTg5MWM0NDMyLDQ0MzUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMTg5M2M0NDM3LDQ0MzgKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTg5NSwxODk2ZDQ0MzkKKzwgICAKKzwgZmkKKzE4OThjNDQ0MSw0NDQzCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfY19pbmxpbmUiIDE+JjYKKy0tLQorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2NfaW5saW5lIiA+JjY7IH0KKzE5MDhjNDQ1MworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyBvciAtLWRpc2FibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRocmVhZHMgd2FzIGdpdmVuLgorMTkxMCwxOTExYzQ0NTUKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfdGhyZWFkcyIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV90aHJlYWRzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisxOTE0YzQ0NTgsNDQ2MAorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGhyZWFkcyIgMT4mMjsgZXhpdCAxOyB9IDs7CistLS0KKz4gCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGhyZWFkcyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10aHJlYWRzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzE5MzAsMTkzNWM0NDc2LDQ0ODEKKzwgICAgICAgICAgICAKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9hdHRyX2luaXQgaW4gLWxwdGhyZWFkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE5MzM6IGNoZWNraW5nIGZvciBwdGhyZWFkX2F0dHJfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorPCBhY19saWJfdmFyPWBlY2hvIHB0aHJlYWQnXydwdGhyZWFkX2F0dHJfaW5pdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRocmVhZF9hdHRyX2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE5MzdjNDQ4MworPCAgIGFjX3NhdmVfTElCUz0iJExJQlMiCistLS0KKz4gICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisxOTM5LDE5NzBjNDQ4NSw0NTQ2Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTk0MSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX2F0dHJfaW5pdCgpOworPCAKKzwgaW50IG1haW4oKSB7Cis8IHB0aHJlYWRfYXR0cl9pbml0KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IExJQlM9IiRhY19zYXZlX0xJQlMiCis8IAorPCBmaQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKzwgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKzwgI2RlZmluZSAkYWNfdHJfbGliIDEKKzwgRU9GCistLS0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwdGhyZWFkX2F0dHJfaW5pdCAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9hdHRyX2luaXQgKCk7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdD1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0IiA+JjY7IH0KKz4gaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgSEFWRV9MSUJQVEhSRUFEIDEKKz4gX0FDRU9GCisxOTc0LDE5NzVkNDU0OQorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisxOTgxLDE5ODZjNDU1NSw0NTYwCis8ICAgICAgICAgICAgICAgIAorPCAgICAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTk4NTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcHRocmVhZF9tdXRleF9kZXN0cm95Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxOTkyLDIwMDVjNDU2Niw0NjA4Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTk5NCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKTsKKzwgCis8IGludCBtYWluKCkgeworPCBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwMDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzIwMDksMjAxMGM0NjEyLDQ2MTUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjAxMmM0NjE3LDQ2MjAKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMDE1LDIwMjhjNDYyMyw0NjY1Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjAxNyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKTsKKzwgCis8IGludCBtYWluKCkgeworPCBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwMjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzIwMzEsMjAzMmM0NjY4LDQ2NzEKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjAzNGM0NjczLDQ2NzYKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMDM4LDIwMzljNDY4MCw0NjgxCis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY2OyB9CisyMDQyYzQ2ODQKKzwgICAKKy0tLQorPiAKKzIwNDRjNDY4NgorPCAgIAorLS0tCis+IAorMjA1MCwyMDU0YzQ2OTIsNDY5NgorPCAgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIwNTI6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKzwgYWNfbGliX3Zhcj1gZWNobyBwdGhyZWFkJ18ncHRocmVhZF9tdXRleF9pbml0IHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyMDU2YzQ2OTgKKzwgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLS0tCis+ICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworMjA1OCwyMDg5YzQ3MDAsNDc2MQorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIwNjAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgcHRocmVhZF9tdXRleF9pbml0KCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgcHRocmVhZF9tdXRleF9pbml0KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDcxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IExJQlM9IiRhY19zYXZlX0xJQlMiCis8IAorPCBmaQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKzwgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKzwgI2RlZmluZSAkYWNfdHJfbGliIDEKKzwgRU9GCistLS0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwdGhyZWFkX211dGV4X2luaXQgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIHB0aHJlYWRfbXV0ZXhfaW5pdCAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0IiA+JjY7IH0KKz4gaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQiID0geCIieWVzOyB0aGVuCis+ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorPiAjZGVmaW5lIEhBVkVfTElCUFRIUkVBRCAxCis+IF9BQ0VPRgorMjA5MywyMDk0ZDQ3NjQKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorMjEwMiwyMTA5YzQ3NzIsNDc4NgorPCAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9sb2NrIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIxMDQ6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2snK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIxMDkgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9sb2NrLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAvKiBEZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgcHRocmVhZF9tdXRleF9sb2NrLgorPiAgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKz4gI2RlZmluZSBwdGhyZWFkX211dGV4X2xvY2sgaW5ub2N1b3VzX3B0aHJlYWRfbXV0ZXhfbG9jaworPiAKKzIxMTEsMjExNmM0Nzg4LDQ3OTYKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcHRocmVhZF9tdXRleF9sb2NrKCk7IGJlbG93LiAgKi8KKzwgI2luY2x1ZGUgPGFzc2VydC5oPgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jaygpOworLS0tCis+ICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworPiAKKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjExOGM0Nzk4Cis8IGludCBtYWluKCkgeworLS0tCis+ICN1bmRlZiBwdGhyZWFkX211dGV4X2xvY2sKKzIxMTlhNDgwMCw0ODA2Cis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgcHRocmVhZF9tdXRleF9sb2NrICgpOworMjEyM2M0ODEwCis8ICNpZiBkZWZpbmVkIChfX3N0dWJfcHRocmVhZF9tdXRleF9sb2NrKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wdGhyZWFkX211dGV4X2xvY2spCistLS0KKz4gI2lmIGRlZmluZWQgX19zdHViX3B0aHJlYWRfbXV0ZXhfbG9jayB8fCBkZWZpbmVkIF9fc3R1Yl9fX3B0aHJlYWRfbXV0ZXhfbG9jaworMjEyNSwyMTI2ZDQ4MTEKKzwgI2Vsc2UKKzwgcHRocmVhZF9tdXRleF9sb2NrKCk7CisyMTI5LDIxNDdjNDgxNCw0ODUzCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjEzMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3B0aHJlYWRfbXV0ZXhfbG9ja2BcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgOgorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2s9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMTQ4YTQ4NTUsNDg1NgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2siID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjY7IH0KKzIxNTZjNDg2NAorPCAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorLS0tCis+ICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IG5vOyB0aGVuCisyMTgwLDIxODhjNDg4OCw0ODk5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBtbWFwIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIxODI6IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfbW1hcF9vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjE4NyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgICAgIAorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW1hcCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBtbWFwLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCisyMTkzLDIxOTRjNDkwNCw0OTA3Cis8ICAgICAKKzwgaW50IG1haW4oKSB7CistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKzIxOTYsMjE5OWM0OTA5LDQ5MzMKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTk5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyMjAyLDIyMDVjNDkzNiw0OTM5Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfZnVuY19tbWFwX29rPW5vCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X2Z1bmNfbW1hcF9vaz1ubworMjIwN2M0OTQxLDQ5NDQKKzwgcm0gLWYgY29uZnRlc3QqIAorLS0tCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjIxMGM0OTQ3LDQ5NDgKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9mdW5jX21tYXBfb2siIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX29rIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfb2siID4mNjsgfQorMjIyNywyMjI4YzQ5NjUsNDk3MQorPCBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyMjI5OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CistLS0KKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisyMjM0LDIyMzVjNDk3Nyw1MDg0Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NQUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorPiAgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKz4gICAgIGRvCis+ICAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCis+IGRvCis+ICAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworPiAgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorPiAgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorPiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorPiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCis+ICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaWZkZWYgX19TVERDX18KKz4gIyBpbmNsdWRlIDxsaW1pdHMuaD4KKz4gI2Vsc2UKKz4gIyBpbmNsdWRlIDxhc3NlcnQuaD4KKz4gI2VuZGlmCis+IAkJICAgICBTeW50YXggZXJyb3IKKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBmaQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gCis+ICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKz4gICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Cis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorPiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCis+IGNvbnRpbnVlCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICAjIFBhc3NlcyBib3RoIHRlc3RzLgorPiBhY19wcmVwcm9jX29rPToKKz4gYnJlYWsKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiBkb25lCis+ICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiAgICAgZG9uZQorPiAgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorPiAKKz4gZmkKKz4gICBDUFA9JGFjX2N2X3Byb2dfQ1BQCisyMjM3LDIyMzljNTA4Niw1MDk2Cis8ICAgICAjIFRoaXMgbXVzdCBiZSBpbiBkb3VibGUgcXVvdGVzLCBub3Qgc2luZ2xlIHF1b3RlcywgYmVjYXVzZSBDUFAgbWF5IGdldAorPCAgICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCis8ICAgQ1BQPSIke0NDLWNjfSAtRSIKKy0tLQorPiAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1Cis+ICRhc19lY2hvICIkQ1BQIiA+JjY7IH0KKz4gYWNfcHJlcHJvY19vaz1mYWxzZQorPiBmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisyMjQxLDIyNTFjNTA5OCw1MTI4Cis8ICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIyNDQgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxhc3NlcnQuaD4KKzwgU3ludGF4IEVycm9yCis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjIyNTA6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorPiAJCSAgICAgU3ludGF4IGVycm9yCis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorMjI1NCwyMjY4YzUxMzEsNTE4MworPCAgIGVjaG8gIiRhY19lcnIiID4mNQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIyNjEgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxhc3NlcnQuaD4KKzwgU3ludGF4IEVycm9yCis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjIyNjc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKz4gY29udGludWUKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCis+ICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKz4gYWNfcHJlcHJvY19vaz06Cis+IGJyZWFrCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gZG9uZQorPiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKzIyNzEsMjI4NWM1MTg2LDU0MDAKKzwgICBlY2hvICIkYWNfZXJyIiA+JjUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBDUFA9IiR7Q0MtY2N9IC1ub2xvZ28gLUUiCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyMjc4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IFN5bnRheCBFcnJvcgorPCBFT0YKKzwgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKzwgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjg0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorPCBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCis8IGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCis+IFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKz4gZmkKKz4gCis+IGFjX2V4dD1jCis+IGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCis+ICAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCis+ICAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKz4gICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCis+ICAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKz4gIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorPiAgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCis+IGNhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKz4gKkdOVSopCis+ICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7Cis+ICopCis+ICAgYWNfY291bnQ9MAorPiAgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorPiAgIHdoaWxlIDoKKz4gICBkbworPiAgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKz4gICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKz4gICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorPiAgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKz4gICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCis+ICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCis+ICAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorPiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorPiAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKz4gICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorPiAgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorPiAgICAgZmkKKz4gICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKz4gICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworPiAgIGRvbmUKKz4gICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKz4gZXNhYworPiAKKz4gICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCis+ICAgICBkb25lCis+ICAgZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorPiAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+ICAgZmkKKz4gZWxzZQorPiAgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorPiBmaQorPiAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKz4gIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCis+IAorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKz4gICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKz4gICAgZWxzZQorPiAgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKz4gICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCis+ICAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCis+ICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKz4gICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCis+ICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCis+ICAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCis+IGNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCis+ICpHTlUqKQorPiAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworPiAqKQorPiAgIGFjX2NvdW50PTAKKz4gICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKz4gICB3aGlsZSA6Cis+ICAgZG8KKz4gICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCis+ICAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCis+ICAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKz4gICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorPiAgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCis+ICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCis+ICAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorPiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKz4gICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCis+ICAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorPiAgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKz4gICAgIGZpCis+ICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCis+ICAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKz4gICBkb25lCis+ICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Cis+IGVzYWMKKz4gCis+ICAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKz4gICAgIGRvbmUKKz4gICBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorPiAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gICBmaQorPiBlbHNlCis+ICAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKKz4gZmkKKz4gCis+ICAgIGZpCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKz4gIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKz4gCis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPHN0ZGxpYi5oPgorPiAjaW5jbHVkZSA8c3RkYXJnLmg+Cis+ICNpbmNsdWRlIDxzdHJpbmcuaD4KKz4gI2luY2x1ZGUgPGZsb2F0Lmg+Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKz4gICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8c3RyaW5nLmg+Cis+IAorPiBfQUNFT0YKKz4gaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPiAgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzIyODgsMjI5MmM1NDAzCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgQ1BQPS9saWIvY3BwCistLS0KKz4gICBhY19jdl9oZWFkZXJfc3RkYz1ubworMjI5NGE1NDA2LDU0MjQKKz4gCis+IGZpCis+IAorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxzdGRsaWIuaD4KKz4gCis+IF9BQ0VPRgorPiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis+ICAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBhY19jdl9oZWFkZXJfc3RkYz1ubworMjI5NmE1NDI3LDU1MDEKKz4gCis+IGZpCis+IAorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKz4gICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGN0eXBlLmg+Cis+ICNpbmNsdWRlIDxzdGRsaWIuaD4KKz4gI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorPiAjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCis+ICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKz4gI2Vsc2UKKz4gIyBkZWZpbmUgSVNMT1dFUihjKSBcCis+IAkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKz4gCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKz4gCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorPiAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorPiAjZW5kaWYKKz4gCis+ICNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCis+IGludAorPiBtYWluICgpCis+IHsKKz4gICBpbnQgaTsKKz4gICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCis+ICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCis+IAl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKz4gICAgICAgcmV0dXJuIDI7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAoIGV4aXQgJGFjX3N0YXR1cyApCis+IGFjX2N2X2hlYWRlcl9zdGRjPW5vCis+IGZpCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiAKKz4gCisyMjk4LDIyOTlkNTUwMgorPCBybSAtZiBjb25mdGVzdCoKKzwgICBhY19jdl9wcm9nX0NQUD0iJENQUCIKKzIzMDEsMjMwM2M1NTA0LDU1MTEKKzwgICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKKzwgZWxzZQorPCAgIGFjX2N2X3Byb2dfQ1BQPSIkQ1BQIgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKz4gI2RlZmluZSBTVERDX0hFQURFUlMgMQorPiBfQUNFT0YKKz4gCisyMzA1ZDU1MTIKKzwgZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKzIzMDdjNTUxNCw1NTI1Cis8IGZvciBhY19oZHIgaW4gaW50dHlwZXMuaAorLS0tCis+ICMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorPiAJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorMjMwOSwyMzMzYzU1MjcsNTU4MQorPCBhY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjMxMjogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyMzE3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8JGFjX2hkcj4KKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjMyMjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICIgPiY2OyB9Cis+IGlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiAKKz4gI2luY2x1ZGUgPCRhY19oZWFkZXI+Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IGFjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorPiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Cis+IGFzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorPiBfQUNFT0YKKz4gCisyMzM1LDIzNDNjNTU4Myw1NzI4Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorPCAgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCis8ICNkZWZpbmUgJGFjX3RyX2hkciAxCis8IEVPRgorPCAgCis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAKKz4gZG9uZQorPiAKKz4gCis+IAorPiBmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKKz4gZG8KKz4gYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorPiBpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gIiA+JjY7IH0KKz4gaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGZpCis+IGFjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorPiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Cis+IGVsc2UKKz4gICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiAjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19oZWFkZXJfY29tcGlsZXI9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorPiAKKz4gIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAiID4mNjsgfQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDwkYWNfaGVhZGVyPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorPiAkYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKz4gCis+ICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworPiBjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCis+ICAgeWVzOm5vOiApCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Cis+ICAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKz4gICAgIDs7Cis+ICAgbm86eWVzOiogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Cis+IAorPiAgICAgOzsKKz4gZXNhYworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAiID4mNjsgfQorPiBpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKz4gZmkKKz4gYWNfcmVzPWBldmFsICdhc192YWw9JHsnJGFzX2FjX0hlYWRlcid9Cis+IAkJICRhc19lY2hvICIkYXNfdmFsIidgCis+IAkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Cis+ICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKz4gCis+IGZpCis+IGFzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorPiBfQUNFT0YKKz4gCisyMzQ0YTU3MzAKKz4gCisyMzUzYzU3MzksNTc0MAorPCAgZWNobyAiJGFjX3QiIiJDIGNvbXBpbGVyIHNldCB0byBDQ0MgJHtDQ30iICIgMT4mNgorLS0tCis+ICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY1Cis+ICRhc19lY2hvICJcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY2OyB9CisyMzYxYzU3NDgsNTc0OQorPCAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWlvc3RyZWFtIG9yIC0td2l0aG91dC1pb3N0cmVhbSB3YXMgZ2l2ZW4uCistLS0KKz4gCis+ICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW9zdHJlYW0gd2FzIGdpdmVuLgorMjM2MywyMzY0YzU3NTEKKzwgICB3aXRodmFsPSIkd2l0aF9pb3N0cmVhbSIKKzwgICBjYXNlICIke3dpdGh2YWx9IiBpbgorLS0tCis+ICAgd2l0aHZhbD0kd2l0aF9pb3N0cmVhbTsgY2FzZSAiJHt3aXRodmFsfSIgaW4KKzIzNjljNTc1Niw1NzU4Cis8IAkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworMjM3OSwyMzgxYzU3NjgsNTc2OQorPCAgICAgCis8ICAgICBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy0tLQorPiAKKz4gICAgIGFjX2V4dD1jcHAKKzIzODMsMjM4NWM1NzcxLDU3NzMKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLS0tCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisyMzkzLDIzOTdjNTc4MSw1Nzg5Cis8ICAgICBlY2hvICRhY19uICJjaGVja2luZyBpb3N0cmVhbSB1c2FiaWxpdHkiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjM5NTogY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiA+JjUKKzwgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjM5NyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorPiAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjM5OWM1NzkxLDU3OTMKKzwgaW50IG1haW4oKSB7CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworMjQwMSwyNDA0YzU3OTUsNTgxNgorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0MDQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzI0MDcsMjQxMGM1ODE5LDU4MjIKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9oZWFkZXJfaW9zdHJlYW09bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaGVhZGVyX2lvc3RyZWFtPW5vCisyNDEyYzU4MjQsNTgyNQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisyNDE3YzU4MzAsNTgzMQorPCAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iIDE+JjYKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtIiA+JjY7IH0KKzI0MjMsMjQyNGM1ODM3LDU4NDMKKzwgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjI0MjU6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQorLS0tCis+ICAgICAgICAgYWNfZXh0PWNwcAorPiBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworPiBhY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKzI0MjYsMjQyN2M1ODQ1LDU4NDYKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYQ1BQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+ICAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWENQUCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyNDI5LDI0NDRjNTg0OCw1ODg5Cis8ICAgYWNfZXh0PUMKKzwgIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCis8IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis8IGFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKzwgICBDWFhDUFA9IiR7Q1hYLWcrK30gLUUiCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNDM4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0NDM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKz4gICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKz4gICAgIGRvCis+ICAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCis+ICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKz4gICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKz4gCQkgICAgIFN5bnRheCBlcnJvcgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCisyNDQ3LDI0NTFjNTg5Miw1ODk2Cis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgQ1hYQ1BQPS9saWIvY3BwCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCis+IGNvbnRpbnVlCisyNDUzLDI0ODhjNTg5OCw1OTM2Cis8IHJtIC1mIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSIkQ1hYQ1BQIgorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworPCBmaQorPCBmaQorPCBDWFhDUFA9IiRhY19jdl9wcm9nX0NYWENQUCIKKzwgZWNobyAiJGFjX3QiIiRDWFhDUFAiIDE+JjYKKzwgCis8IGFjX3NhZmU9YGVjaG8gImlvc3RyZWFtLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNDY5OiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI0NzQgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxpb3N0cmVhbS5oPgorPCBFT0YKKzwgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKzwgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDc5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorPCBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCis8IGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCis8IGVsc2UKKzwgICBlY2hvICIkYWNfZXJyIiA+JjUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCistLS0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCis+ICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKz4gY29udGludWUKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCis+IGFjX3ByZXByb2Nfb2s9OgorPiBicmVhaworMjQ5MGM1OTM4LDYwMDMKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiBkb25lCis+ICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiAgICAgZG9uZQorPiAgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorPiAKKz4gZmkKKz4gICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCis+IGVsc2UKKz4gICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQorPiAkYXNfZWNobyAiJENYWENQUCIgPiY2OyB9Cis+IGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCis+ICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKz4gICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKz4gCQkgICAgIFN5bnRheCBlcnJvcgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorPiBjb250aW51ZQorMjQ5MiwyNDkzYzYwMDUsNjA1MQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKy0tLQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gCis+ICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKz4gICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Cis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKz4gYWNfcHJlcHJvY19vaz06Cis+IGJyZWFrCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gZG9uZQorPiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKzI0OTZjNjA1NCw2MTk1Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBhY19leHQ9Y3BwCis+IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IAorPiAKKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2grc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2giID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjY7IH0KKz4gZWxzZQorPiAgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCB1c2FiaWxpdHkiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBpb3N0cmVhbS5oIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+ICNpbmNsdWRlIDxpb3N0cmVhbS5oPgorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKz4gCis+ICMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorPiAKKz4gIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Cis+IGNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbgorPiAgIHllczpubzogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorPiAgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+ICAgICA7OworPiAgIG5vOnllczoqICkKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlvc3RyZWFtLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorPiAKKz4gICAgIDs7Cis+IGVzYWMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpb3N0cmVhbS5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19jdl9oZWFkZXJfaW9zdHJlYW1faD0kYWNfaGVhZGVyX3ByZXByb2MKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY2OyB9Cis+IAorMjQ5OGE2MTk4Cis+IAorMjUwMCwyNTA3YzYyMDAsNjIxMAorPCAgICAgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjUwMjogY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiA+JjUKKzwgICAgICAgICAgICAgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2lvc3RyZWFtX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNTA3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQuLi4gIiA+JjY7IH0KKz4gICAgICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9pb3N0cmVhbV9vaytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyNTA5YzYyMTIsNjIxNAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7CisyNTExLDI1MTRjNjIxNiw2MjQwCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjUxNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyNTE3LDI1MjBjNjI0Myw2MjQ2Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaW9zdHJlYW1fb2s9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaW9zdHJlYW1fb2s9bm8KKzI1MjJjNjI0OCw2MjUxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjUyNWM2MjU0LDYyNTUKKzwgICAgICAgICAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9pb3N0cmVhbV9vayIgMT4mNgorLS0tCis+ICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9pb3N0cmVhbV9vayIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaW9zdHJlYW1fb2siID4mNjsgfQorMjU0NWM2Mjc1LDYyNzcKKzwgICAgICAgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAke3dpdGh2YWx9IGlvc3RyZWFtIGlzIG5vdCBhdmFpbGFibGUiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgICAgICAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAke3dpdGh2YWx9IGlvc3RyZWFtIGlzIG5vdCBhdmFpbGFibGUiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzI1NTFkNjI4MgorPCAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisyNTUzLDI1NTVjNjI4NCw2Mjg3Cis8IGFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKy0tLQorPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKz4gCisyNTU4LDI1NjFjNjI5MCw2MjkzCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjU2MDogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2JpZ2VuZGlhbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMjU2NCwyNTY3YzYyOTYsNjM0OQorPCAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI1NjcgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKz4gICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2lmbmRlZiBfX0FQUExFX0NDX18KKz4gCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorPiAJICAgICAjZW5kaWYKKz4gCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7Cis+IAorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gCis+IAkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworPiAJIyB0aGVyZSBhcmUgc29tZSAtYXJjaCBmbGFncy4gIE5vdGUgdGhhdCAqcHBjKiBhbHNvIG1hdGNoZXMKKz4gCSMgcHBjNjQuICBUaGlzIGNoZWNrIGlzIGFsc28gcmF0aGVyIGxlc3MgdGhhbiBpZGVhbC4KKz4gCWNhc2UgIiR7Q0N9ICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IiBpbiAgIygKKz4gCSAgKi1hcmNoKnBwYyp8Ki1hcmNoKmkzODYqfCotYXJjaCp4ODZfNjQqKSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWw7OworPiAJZXNhYworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKz4gICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKz4gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjU2OSwyNTcwYzYzNTEKKzwgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisyNTcyLDI1NzhjNjM1Myw2MzgzCis8ICNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgorPCAgYm9ndXMgZW5kaWFuIG1hY3JvcworPCAjZW5kaWYKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTc4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorPiAJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCis+IAkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorPiAJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworPiAJICAgICAjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorMjU4MCwyNTgyYzYzODUsNjM5MAorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI1ODIgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyNTg0LDI1ODVjNjM5MgorPCAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cis8IGludCBtYWluKCkgeworLS0tCis+IAkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorMjU4NmE2Mzk0LDYzOTYKKz4gaW50Cis+IG1haW4gKCkKKz4geworMjU4OCwyNTkzYzYzOTgsNjQyMgorPCAgbm90IGJpZyBlbmRpYW4KKzwgI2VuZGlmCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjU5MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAJCSBub3QgYmlnIGVuZGlhbgorPiAJCSNlbmRpZgorPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisyNTk2LDI1OTljNjQyNSw2NDI4Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfY19iaWdlbmRpYW49bm8KKzI2MDFjNjQzMCw2NDMxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI2MDMsMjYwNGM2NDMzLDY0MzYKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjYwNiwyNjIyYzY0MzgsNjQ1OQorPCBybSAtZiBjb25mdGVzdCoKKzwgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCis8IGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCis8ICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmciIDE+JjI7IGV4aXQgMTsgfQorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNjEzICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCBtYWluICgpIHsKKzwgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCis8ICAgdW5pb24KKzwgICB7Cis8ICAgICBsb25nIGw7Cis8ICAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07Cis8ICAgfSB1OworPCAgIHUubCA9IDE7Cis8ICAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgICBmaQorPiAgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCis+ICAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCis+ICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGxpbWl0cy5oPgorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorPiAJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworPiAJICAgICAjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworMjYyNCwyNjMxYzY0NjEsNjUxNworPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjI2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCis8IHRoZW4KKzwgICBhY19jdl9jX2JpZ2VuZGlhbj1ubworPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCis+IAkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8bGltaXRzLmg+Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+ICNpZm5kZWYgX0JJR19FTkRJQU4KKz4gCQkgbm90IGJpZyBlbmRpYW4KKz4gCQkjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorMjYzMmE2NTE5LDY1MzEKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjYzNGM2NTMzLDY2MDMKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gICAgIGZpCis+ICAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKz4gICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgorPiAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorPiAgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorPiAJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gc2hvcnQgaW50IGFzY2lpX21tW10gPQorPiAJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Cis+IAkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorPiAJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Cis+IAkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKz4gCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworPiAJCX0KKz4gCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorPiAJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07Cis+IAkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KKz4gCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworPiAJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworPiAJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKKz4gCQl9Cis+IAkJZXh0ZXJuIGludCBmb287Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCis+IAkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKz4gCSAgICBmaQorPiAJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKz4gCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCis+IAkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gCSAgICAgIGVsc2UKKz4gCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKz4gCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCis+IAkgICAgICBmaQorPiAJICAgIGZpCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCisyNjM2YTY2MDYsNjY2MQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworPiAJICAgICB1bmlvbgorPiAJICAgICB7Cis+IAkgICAgICAgbG9uZyBpbnQgbDsKKz4gCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworPiAJICAgICB9IHU7Cis+IAkgICAgIHUubCA9IDE7Cis+IAkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCis+ICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKzI2MzdhNjY2Myw2NjY0Cis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMjY0MCwyNjQ0ZDY2NjYKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9jX2JpZ2VuZGlhbiIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHllczsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorPCAjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCis8IEVPRgorMjY0NWE2NjY4Cis+ICAgICBmaQorMjY0NmE2NjcwLDY2OTMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9Cis+ICBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorPiAgICB5ZXMpCis+ICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKz4gI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorPiBfQUNFT0YKKz4gOzsgIygKKz4gICAgbm8pCis+ICAgICAgIDs7ICMoCis+ICAgIHVuaXZlcnNhbCkKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCis+ICNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEKKz4gX0FDRU9GCis+IAorPiAgICAgIDs7ICMoCis+ICAgICopCis+ICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcworPiAgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCis+ICBwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis+ICBlc2FjCisyNjU5LDI2NjZjNjcwNiw2NzIwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNjYxOiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8iID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19ubF9sYW5naW5mbycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjY2NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19ubF9sYW5naW5mbytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IC8qIERlZmluZSBubF9sYW5naW5mbyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIG5sX2xhbmdpbmZvLgorPiAgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKz4gI2RlZmluZSBubF9sYW5naW5mbyBpbm5vY3VvdXNfbmxfbGFuZ2luZm8KKz4gCisyNjY4LDI2NzNjNjcyMiw2NzI0Cis8ICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIG5sX2xhbmdpbmZvKCk7IGJlbG93LiAgKi8KKzwgI2luY2x1ZGUgPGFzc2VydC5oPgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIG5sX2xhbmdpbmZvKCk7CistLS0KKz4gICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8gKCk7IGJlbG93LgorPiAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorPiAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKzI2NzVjNjcyNiw2NzMwCis8IGludCBtYWluKCkgeworLS0tCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKzI2NzZhNjczMiw2NzQwCis+ICN1bmRlZiBubF9sYW5naW5mbworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBubF9sYW5naW5mbyAoKTsKKzI2ODBjNjc0NAorPCAjaWYgZGVmaW5lZCAoX19zdHViX25sX2xhbmdpbmZvKSB8fCBkZWZpbmVkIChfX3N0dWJfX19ubF9sYW5naW5mbykKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfbmxfbGFuZ2luZm8gfHwgZGVmaW5lZCBfX3N0dWJfX19ubF9sYW5naW5mbworMjY4MiwyNjgzZDY3NDUKKzwgI2Vsc2UKKzwgbmxfbGFuZ2luZm8oKTsKKzI2ODYsMjcwMWM2NzQ4LDY3OTEKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjg5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19ubF9sYW5naW5mbz15ZXMiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ25sX2xhbmdpbmZvYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBubF9sYW5naW5mbyAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfZnVuY19ubF9sYW5naW5mbz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19ubF9sYW5naW5mbz1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID0geCIieWVzOyB0aGVuCisyNzA0LDI3MDVjNjc5NAorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorPCBVX0hBVkVfTkxfTEFOR0lORk89MAorLS0tCis+ICAgVV9IQVZFX05MX0xBTkdJTkZPPTAKKzI3MTAsMjcxM2M2Nzk5LDY4MDIKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8ncyBhcmd1bWVudCB0byBvYnRhaW4gdGhlIGNvZGVzZXQiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjcxMjogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyNzE3LDI3MTljNjgwNiw2ODExCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNzE5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjcyMWM2ODEzLDY4MTUKKzwgaW50IG1haW4oKSB7CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworMjcyMywyNzI2YzY4MTcsNjg0MQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3MjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzI3MjksMjczMGM2ODQ0LDY4NDcKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjczMmM2ODQ5LDY4NTIKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyNzM1LDI3MzZjNjg1NSw2ODU2Cis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY2OyB9CisyNzQ2LDI3NDdjNjg2NgorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy0tLQorPiBhY19leHQ9Y3BwCisyNzQ5LDI3NjBjNjg2OCw2ODgyCis8IGFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBuYW1lc3BhY2Ugc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNzU1OiBjaGVja2luZyBmb3IgbmFtZXNwYWNlIHN1cHBvcnQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbmFtZXNwYWNlX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNzYwICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbmFtZXNwYWNlX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzI3NjQsMjc2NWM2ODg2LDY4ODkKKzwgICAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMjc2NywyNzcwYzY4OTEsNjkxNQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3NzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorMjc3MywyNzc2YzY5MTgsNjkyMQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X25hbWVzcGFjZV9vaz1ubworLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9uYW1lc3BhY2Vfb2s9bm8KKzI3NzhjNjkyMyw2OTI2Cis8IHJtIC1mIGNvbmZ0ZXN0KiAKKy0tLQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI3ODFjNjkyOSw2OTMwCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfbmFtZXNwYWNlX29rIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X25hbWVzcGFjZV9vayIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbmFtZXNwYWNlX29rIiA+JjY7IH0KKzI3ODksMjc5MGM2OTM4LDY5MzkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6Mjc5MTogY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiID4mNQorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHJvcGVybHkgb3ZlcnJpZGluZyBuZXcgYW5kIGRlbGV0ZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBwcm9wZXJseSBvdmVycmlkaW5nIG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9CisyNzkzLDI3OTRjNjk0Miw2OTQzCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9vdmVycmlkZV9jeHhfYWxsb2NhdGlvbl9vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiBpZiB0ZXN0ICIke2FjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzI3OTYsMjc5OGM2OTQ1LDY5NTAKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI3OTggImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyODA3LDI4MTNjNjk1OSw2OTg4Cis8ICAgICAKKzwgaW50IG1haW4oKSB7Cis8ICAgICAKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyODE2LDI4MTljNjk5MSw2OTk0Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKzI4MjFjNjk5Niw2OTk5Cis8IHJtIC1mIGNvbmZ0ZXN0KiAKKy0tLQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI4MjRjNzAwMiw3MDAzCis8IGVjaG8gIiRhY190IiIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rIiA+JjY7IH0KKzI4MjgsMjgzNWM3MDA3LDcwMTcKKzwgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjgzMDogY2hlY2tpbmcgZm9yIHBsYWNlbWVudCBuZXcgYW5kIGRlbGV0ZSIgPiY1Cis8ICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjgzNSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9Cis+ICAgICBpZiB0ZXN0ICIke2FjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2src2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjg0NiwyODUyYzcwMjgsNzA1NworPCAgICAgICAgIAorPCBpbnQgbWFpbigpIHsKKzwgICAgICAgICAKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyODU1LDI4NThjNzA2MCw3MDYzCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaz1ubworLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rPW5vCisyODYwYzcwNjUsNzA2OAorPCBybSAtZiBjb25mdGVzdCogCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyODYzYzcwNzEsNzA3MgorPCAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiAxPiY2CistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiA+JjY7IH0KKzI4NzNkNzA4MQorPCAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisyODc1LDI4ODZjNzA4Myw3MTAxCis8IGFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwb3BlbiIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyODgxOiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wb3Blbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjg4NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcG9wZW4uLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX3BvcGVuK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gLyogRGVmaW5lIHBvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgcG9wZW4uCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIHBvcGVuIGlubm9jdW91c19wb3BlbgorPiAKKzI4ODgsMjg5M2M3MTAzLDcxMTEKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcG9wZW4oKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgcG9wZW4oKTsKKy0tLQorPiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBwb3BlbiAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworPiAKKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjg5NWM3MTEzCis8IGludCBtYWluKCkgeworLS0tCis+ICN1bmRlZiBwb3BlbgorMjg5NmE3MTE1LDcxMjEKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwb3BlbiAoKTsKKzI5MDBjNzEyNQorPCAjaWYgZGVmaW5lZCAoX19zdHViX3BvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wb3BlbikKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfcG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19wb3BlbgorMjkwMiwyOTAzZDcxMjYKKzwgI2Vsc2UKKzwgcG9wZW4oKTsKKzI5MDYsMjkyNGM3MTI5LDcxNjgKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyOTA5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj15ZXMiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX3BvcGVuPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3BvcGVuYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICA6Cis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBwb3BlbiAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfZnVuY19wb3Blbj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19wb3Blbj1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI5MjVhNzE3MCw3MTcxCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3BvcGVuIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9mdW5jX3BvcGVuIiA+JjY7IH0KKzI5MzUsMjk0MmM3MTgxLDcxOTUKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR6c2V0IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjI5Mzc6IGNoZWNraW5nIGZvciB0enNldCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyOTQyICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdHpzZXQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpzZXQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX3R6c2V0K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gLyogRGVmaW5lIHR6c2V0IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgdHpzZXQuCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIHR6c2V0IGlubm9jdW91c190enNldAorPiAKKzI5NDQsMjk0OWM3MTk3LDcxOTkKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgdHpzZXQoKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgdHpzZXQoKTsKKy0tLQorPiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworMjk1MWM3MjAxLDcyMDUKKzwgaW50IG1haW4oKSB7CistLS0KKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjk1MmE3MjA3LDcyMTUKKz4gI3VuZGVmIHR6c2V0Cis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHR6c2V0ICgpOworMjk1NmM3MjE5Cis8ICNpZiBkZWZpbmVkIChfX3N0dWJfdHpzZXQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3R6c2V0KQorLS0tCis+ICNpZiBkZWZpbmVkIF9fc3R1Yl90enNldCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3R6c2V0CisyOTU4LDI5NTlkNzIyMAorPCAjZWxzZQorPCB0enNldCgpOworMjk2MiwyOTgwYzcyMjMsNzI2MgorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5NjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX3R6c2V0PXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9bm8iCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBmaQorPCAKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ndHpzZXRgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorPCAgIDoKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIHR6c2V0ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9mdW5jX3R6c2V0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9mdW5jX3R6c2V0PW5vCis+IGZpCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjk4MWE3MjY0LDcyNjUKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfdHpzZXQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfdHpzZXQiID4mNjsgfQorMjk4OSwyOTk2YzcyNzMsNzI4NworPCAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF90enNldCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyOTkxOiBjaGVja2luZyBmb3IgX3R6c2V0IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyOTk2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90enNldCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpzZXQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX190enNldCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IC8qIERlZmluZSBfdHpzZXQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfdHpzZXQuCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIF90enNldCBpbm5vY3VvdXNfX3R6c2V0Cis+IAorMjk5OCwzMDAzYzcyODksNzI5NworPCAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfdHpzZXQoKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgX3R6c2V0KCk7CistLS0KKz4gICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX3R6c2V0ICgpOyBiZWxvdy4KKz4gICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKz4gICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCis+IAorPiAjaWZkZWYgX19TVERDX18KKz4gIyBpbmNsdWRlIDxsaW1pdHMuaD4KKz4gI2Vsc2UKKz4gIyBpbmNsdWRlIDxhc3NlcnQuaD4KKz4gI2VuZGlmCiszMDA1YzcyOTkKKzwgaW50IG1haW4oKSB7CistLS0KKz4gI3VuZGVmIF90enNldAorMzAwNmE3MzAxLDczMDcKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBfdHpzZXQgKCk7CiszMDEwYzczMTEKKzwgI2lmIGRlZmluZWQgKF9fc3R1Yl9fdHpzZXQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX190enNldCkKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfX3R6c2V0IHx8IGRlZmluZWQgX19zdHViX19fX3R6c2V0CiszMDEyLDMwMTNkNzMxMgorPCAjZWxzZQorPCBfdHpzZXQoKTsKKzMwMTYsMzAzNGM3MzE1LDczNTQKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDE5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19fdHpzZXQ9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19fdHpzZXQ9bm8iCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBmaQorPCAKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nX3R6c2V0YFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICA6Cis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBfdHpzZXQgKCk7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2N2X2Z1bmNfX3R6c2V0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9mdW5jX190enNldD1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzMwMzVhNzM1Niw3MzU3Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX190enNldCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfZnVuY19fdHpzZXQiID4mNjsgfQorMzA0NywzMDU0YzczNjksNzM3OQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMwNDk6IGNoZWNraW5nIGZvciB0em5hbWUiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdmFyX3R6bmFtZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzA1NCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0em5hbWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfdHpuYW1lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMwNjNjNzM4OCw3MzkwCis8IGludCBtYWluKCkgeworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKzMwNjUsMzA2OGM3MzkyLDc0MTYKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDY4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCiszMDcxLDMwNzZjNzQxOSw3NDIyCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdmFyX3R6bmFtZT1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdmFyX3R6bmFtZT1ubworMzA3OWM3NDI1LDc0MzAKKzwgZWNobyAiJGFjX3QiIiRhY19jdl92YXJfdHpuYW1lIiAxPiY2CistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl90em5hbWUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Zhcl90em5hbWUiID4mNjsgfQorMzA4NCwzMDkxYzc0MzUsNzQ0NQorPCAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMwODY6IGNoZWNraW5nIGZvciBfdHpuYW1lIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fdHpuYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMDkxICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfdHpuYW1lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF90em5hbWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiszMDk1LDMwOTZjNzQ0OSw3NDUyCis8ICAgCis8IGludCBtYWluKCkgeworLS0tCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7CiszMDk4LDMxMDFjNzQ1NCw3NDc4Cis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEwMTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorMzEwNCwzMTA5Yzc0ODEsNzQ4NAorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3Zhcl9fdHpuYW1lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfX3R6bmFtZT1ubworMzExMmM3NDg3LDc0OTIKKzwgZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX3R6bmFtZSIgMT4mNgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl92YXJfX3R6bmFtZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX190em5hbWUiID4mNjsgfQorMzEyMSwzMTI4Yzc1MDEsNzUxMQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzEyMzogY2hlY2tpbmcgZm9yIHRpbWV6b25lIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl90aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzEyOCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRpbWV6b25lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWV6b25lLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdmFyX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMxMzdjNzUyMCw3NTIyCis8IGludCBtYWluKCkgeworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKzMxMzksMzE0MmM3NTI0LDc1NDgKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTQyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCiszMTQ1LDMxNTBjNzU1MSw3NTU0Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdmFyX3RpbWV6b25lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfdGltZXpvbmU9bm8KKzMxNTNjNzU1Nyw3NTYyCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX3RpbWV6b25lIiAxPiY2CistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl90aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX3RpbWV6b25lIiA+JjY7IH0KKzMxNTksMzE2NmM3NTY4LDc1NzgKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX190aW1lem9uZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMTYxOiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX190aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzE2NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX3RpbWV6b25lLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdmFyX19fdGltZXpvbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMzE2OCwzMTY5Yzc1ODAsNzU4MworPCAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMzE3MSwzMTc0Yzc1ODUsNzYwOQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxNzQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzMxNzcsMzE4MmM3NjEyLDc2MTUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl92YXJfX190aW1lem9uZT1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdmFyX19fdGltZXpvbmU9bm8KKzMxODVjNzYxOCw3NjIzCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX19fdGltZXpvbmUiIDE+JjYKKy0tLQorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX19fdGltZXpvbmUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjY7IH0KKzMxOTAsMzE5N2M3NjI4LDc2MzgKKzwgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzE5MjogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX3RpbWV6b25lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMTk3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdGltZXpvbmUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMxOTksMzIwMGM3NjQwLDc2NDMKKzwgICAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMzIwMiwzMjA1Yzc2NDUsNzY2OQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzMyMDgsMzIxM2M3NjcyLDc2NzUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl92YXJfX3RpbWV6b25lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfX3RpbWV6b25lPW5vCiszMjE2Yzc2NzgsNzY4MworPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl9fdGltZXpvbmUiIDE+JjYKKy0tLQorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY2OyB9CiszMjI2LDMyNDRjNzY5Myw3Njk2Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMyMjg6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zdGRjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjMzICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRhcmcuaD4KKzwgI2luY2x1ZGUgPHN0cmluZy5oPgorPCAjaW5jbHVkZSA8ZmxvYXQuaD4KKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzI0MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDhfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQ4X3QuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDhfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszMjQ2LDMyNjJjNzY5OCw3NzY2Cis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IAorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjU4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RyaW5nLmg+Cis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistLS0KKz4gICBhY19jdl90eXBlX2ludDhfdD1ubworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoaW50OF90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKGludDhfdCkpKQorPiAJICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiszMjY1LDMyNjhjNzc2OSw3NzcwCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzMyNjlhNzc3MgorPiAJYWNfY3ZfdHlwZV9pbnQ4X3Q9eWVzCiszMjcyLDMyODFjNzc3NQorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjc2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIDoKKy0tLQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzMyODMsMzI4NmM3Nzc3LDc3NzkKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzMyOTAsMzI5MmM3NzgzLDc3ODcKKzwgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKzwgICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCis8IGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDhfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50OF90IiA9IHgiInllczsgdGhlbgorMzI5NSwzMzA0ZDc3ODkKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDMyOTcgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxjdHlwZS5oPgorPCAjZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKzwgI2RlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCis8ICNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCis8IGludCBtYWluICgpIHsgaW50IGk7IGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKzwgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKSB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkgZXhpdCgyKTsKKzwgZXhpdCAoMCk7IH0KKzMzMDYsMzMxN2M3NzkxLDc3OTMKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzMwODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCis8ICAgOgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorPCBmaQorLS0tCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKz4gX0FDRU9GCiszMzIwZDc3OTUKKzwgZmkKKzMzMjIsMzMyNmM3Nzk3LDc4NzQKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfc3RkYyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorPCAjZGVmaW5lIFNURENfSEVBREVSUyAxCis8IEVPRgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDhfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50OF90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50OF90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2N2X3R5cGVfdWludDhfdD1ubworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDhfdCkpCis+ICAgICAgICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKCh1aW50OF90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorMzMyN2E3ODc2Cis+IAlhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCiszMzMwLDMzMzNjNzg3OQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMzMzI6IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszMzM1LDMzNTJjNzg4MSw3ODgyCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMzM3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKWludDhfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDhfdD15ZXMKKzwgZWxzZQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDhfdD1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiszMzU0LDMzNTlkNzg4MworPCBmaQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50OF90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfaW50OF90ID0gbm87IHRoZW4KKzwgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKzwgI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKzwgRU9GCiszMzYzLDMzODNjNzg4NworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDhfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMzY1OiBjaGVja2luZyBmb3IgdWludDhfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDMzNzAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDhfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCis8IGVsc2UKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50OF90PW5vCistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszMzg1Yzc4ODksNzg5MworPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50OF90IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpbnQ4X3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDhfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKzMzODcsMzM5MGM3ODk1Cis8IGZpCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV91aW50OF90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDhfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzM5MmM3ODk3Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzM5NiwzNDEzYzc5MDEsNzkwNAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50MTZfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMzk4OiBjaGVja2luZyBmb3IgaW50MTZfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDE2X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM0MDMgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50MTZfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDE2X3Q9eWVzCistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludDE2X3QuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMzQxNWQ3OTA1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorMzQxNmE3OTA3LDc5ODAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKGludDE2X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgoaW50MTZfdCkpKQorPiAJICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl90eXBlX2ludDE2X3Q9eWVzCiszNDE4Yzc5ODIsNzk4NworPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzM0MjEsMzQyM2M3OTkwLDc5OTkKKzwgZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX2ludDE2X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQxNl90ID0gbm87IHRoZW4KKzwgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDE2X3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50MTZfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQxNl90IiA9IHgiInllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzQyNWM4MDAxCis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzQyOSwzNDQ2YzgwMDUsODAwOAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDE2X3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzQzMTogY2hlY2tpbmcgZm9yIHVpbnQxNl90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDE2X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM0MzYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDE2X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50MTZfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQxNl90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQxNl90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNDQ4ZDgwMDkKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNDQ5YTgwMTEsODA4NAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDE2X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgodWludDE2X3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV91aW50MTZfdD15ZXMKKzM0NTFjODA4Niw4MDkxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorMzQ1NCwzNDU2YzgwOTQsODEwMworPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDE2X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MTZfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM0NThjODEwNQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM0NjIsMzQ3OWM4MTA5LDgxMTIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGludDMyX3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzQ2NDogY2hlY2tpbmcgZm9yIGludDMyX3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQzMl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNDY5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKWludDMyX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV9pbnQzMl90PXllcworLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MzJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQzMl90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzM0ODFkODExMworPCAgIHJtIC1yZiBjb25mdGVzdCoKKzM0ODJhODExNSw4MTg4Cis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mIChpbnQzMl90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKGludDMyX3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV9pbnQzMl90PXllcworMzQ4NGM4MTkwLDgxOTUKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCiszNDg3LDM0ODljODE5OCw4MjA3Cis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9pbnQzMl90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MzJfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl90eXBlX2ludDMyX3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50MzJfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM0OTFjODIwOQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM0OTUsMzUxMmM4MjEzLDgyMTYKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHVpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM0OTc6IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQzMl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNTAyICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKXVpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3R5cGVfdWludDMyX3Q9eWVzCistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50MzJfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDMyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMzUxNGQ4MjE3Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorMzUxNWE4MjE5LDgyOTIKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKHVpbnQzMl90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKHVpbnQzMl90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X3R5cGVfdWludDMyX3Q9eWVzCiszNTE3YzgyOTQsODI5OQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzM1MjAsMzUyMmM4MzAyLDgzMTEKKzwgZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQzMl90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDMyX3QgPSBubzsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDMyX3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDMyX3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDMyX3QiID0geCIieWVzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+IAorPiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiszNTI0YzgzMTMKKzwgRU9GCistLS0KKz4gX0FDRU9GCiszNTI4LDM1NDVjODMxNyw4MzIwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQ2NF90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM1MzA6IGNoZWNraW5nIGZvciBpbnQ2NF90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfaW50NjRfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzUzNSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorPCAjaWYgU1REQ19IRUFERVJTCis8ICNpbmNsdWRlIDxzdGRsaWIuaD4KKzwgI2luY2x1ZGUgPHN0ZGRlZi5oPgorPCAjZW5kaWYKKzwgRU9GCis8IGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKzwgICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQ2NF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3R5cGVfaW50NjRfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50NjRfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNTQ3ZDgzMjEKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNTQ4YTgzMjMsODQwNAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoaW50NjRfdCkpCis+ICAgICAgICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKChpbnQ2NF90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X3R5cGVfaW50NjRfdD15ZXMKKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMzU1MGQ4NDA1Cis8IHJtIC1mIGNvbmZ0ZXN0KgorMzU1MWE4NDA3Cis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMzU1MywzNTU1Yzg0MDksODQxNQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50NjRfdCIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl90eXBlX2ludDY0X3QgPSBubzsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDY0X3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50NjRfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ2NF90IiA9IHgiInllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzU1N2M4NDE3Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzU2MSwzNTc4Yzg0MjEsODQyNAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDY0X3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzU2MzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM1NjggImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDY0X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQ2NF90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNTgwZDg0MjUKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNTgxYTg0MjcsODUwMAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDY0X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgodWludDY0X3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKzM1ODNjODUwMiw4NTA3Cis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorMzU4NiwzNTg4Yzg1MTAsODUxOQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDY0X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50NjRfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM1OTBjODUyMQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM2NTEsMzY1OWM4NTgyLDg2MDAKKzwgYWNfc2FmZT1gZWNobyAid2NoYXIuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB3Y2hhci5oIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM2NTQ6IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzY1OSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93Y2hhcl9oK3NldH0iID0gc2V0OyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorPiBlbHNlCis+ICAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3Y2hhci5oIHVzYWJpbGl0eSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggdXNhYmlsaXR5Li4uICIgPiY2OyB9Cis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKzM2NjEsMzY3OWM4NjAyLDg3MDEKKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzY2NDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgOgorLS0tCis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKz4gCis+ICMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2NoYXIuaCBwcmVzZW5jZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8d2NoYXIuaD4KKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICBhY19oZWFkZXJfcHJlcHJvYz1ubworPiBmaQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Cis+IAorPiAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKz4gY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorPiAgIHllczpubzogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorPiAgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+ICAgICA7OworPiAgIG5vOnllczoqICkKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorPiAKKz4gICAgIDs7Cis+IGVzYWMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNjgxYzg3MDMsODcwNworPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgYWNfY3ZfaGVhZGVyX3djaGFyX2g9JGFjX2hlYWRlcl9wcmVwcm9jCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorPiAKKzM2ODNhODcxMAorPiAKKzM2ODljODcxNgorPCAgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiszNjkxYzg3MTgKKzwgRU9GCistLS0KKz4gX0FDRU9GCiszNjk0LDM3MTljODcyMSw4NzgyCis8ICAgICAgICAgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM2OTc6IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NlYXJjaF93Y3NjcHknK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorPCBhY19jdl9zZWFyY2hfd2NzY3B5PSJubyIKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNzA0ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIHdjc2NweSgpOworPCAKKzwgaW50IG1haW4oKSB7Cis8IHdjc2NweSgpCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzcxNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3NlYXJjaF93Y3NjcHk9Im5vbmUgcmVxdWlyZWQiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB3Y3NjcHkuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHdjc2NweSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gd2NzY3B5ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gZm9yIGFjX2xpYiBpbiAnJyB3Y3MgdzsgZG8KKz4gICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorPiAgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorPiAgIGVsc2UKKz4gICAgIGFjX3Jlcz0tbCRhY19saWIKKz4gICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKz4gICBmaQorPiAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3Zfc2VhcmNoX3djc2NweT0kYWNfcmVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCiszNzIxLDM3NDJjODc4NCw4Nzg5Cis8IHJtIC1mIGNvbmZ0ZXN0KgorPCB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgPSAibm8iICYmIGZvciBpIGluIHdjcyB3OyBkbworPCBMSUJTPSItbCRpICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM3MjYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgd2NzY3B5KCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgd2NzY3B5KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzM3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfc2VhcmNoX3djc2NweT0iLWwkaSIKKzwgYnJlYWsKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorPiAgIGJyZWFrCiszNzQ0ZDg3OTAKKzwgcm0gLWYgY29uZnRlc3QqCiszNzQ2Yzg3OTIsODc5OAorPCBMSUJTPSIkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorLS0tCis+IGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGFjX2N2X3NlYXJjaF93Y3NjcHk9bm8KKz4gZmkKKz4gcm0gY29uZnRlc3QuJGFjX2V4dAorPiBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKKzM3NDdhODgwMCw4ODA0Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfd2NzY3B5IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA+JjY7IH0KKz4gYWNfcmVzPSRhY19jdl9zZWFyY2hfd2NzY3B5Cis+IGlmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuCis+ICAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKzM3NDksMzc1NGQ4ODA1Cis8IGVjaG8gIiRhY190IiIkYWNfY3Zfc2VhcmNoX3djc2NweSIgMT4mNgorPCBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgIT0gIm5vIjsgdGhlbgorPCAgIHRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3djc2NweSAkTElCUyIKKzwgICAKKzwgZWxzZSA6Cis8ICAgCiszNzU1YTg4MDcKKz4gCiszNzY2LDM3NjljODgxOCw4ODIxCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozNzY4OiBjaGVja2luZyBzaXplIG9mIHdjaGFyX3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2l6ZW9mX3djaGFyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzM3NzQsMzc3NmM4ODI2LDg4MzEKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM3NzYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiszNzkyLDM3OTRjODg0Nyw4ODY5Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM3OTQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKzwgdGhlbgorLS0tCis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKz4gICB7IChjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY190cnkiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorMzc5NywzODAwYzg4NzIsODg3NworPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLWZyIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3NpemVvZl93Y2hhcl90PTAKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBhY19jdl9zaXplb2Zfd2NoYXJfdD0wCiszODAyYzg4NzksODg4MAorPCBybSAtZnIgY29uZnRlc3QqCistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszODA0YTg4ODMKKz4gCiszODA2LDM4MDdjODg4NSw4ODg3Cis8IGVjaG8gIiRhY190IiIkYWNfY3Zfc2l6ZW9mX3djaGFyX3QiIDE+JjYKKzwgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3djaGFyX3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjY7IH0KKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzgwOWM4ODg5Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzgxNWM4ODk1LDg4OTcKKzwgCSAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAJICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoZXJlIGlzIHdjaGFyLmggYnV0IHRoZSBzaXplIG9mIHdjaGFyX3QgaXMgMCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBUaGVyZSBpcyB3Y2hhci5oIGJ1dCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGlzIDAiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorMzgyNmM4OTA4Cis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgb3IgLS1kaXNhYmxlLWV4dHJhcyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4dHJhcyB3YXMgZ2l2ZW4uCiszODI4LDM4MjljODkxMAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9leHRyYXMiCis8ICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfZXh0cmFzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCiszODMyYzg5MTMsODkxNQorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM4NDRjODkyNworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorMzg0NiwzODQ3Yzg5MjkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfZXh0cmFzIgorPCAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzg1MGM4OTMyLDg5MzQKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CiszODYzYzg5NDcKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxheW91dCBvciAtLWRpc2FibGUtbGF5b3V0IHdhcyBnaXZlbi4KKy0tLQorPiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGF5b3V0IHdhcyBnaXZlbi4KKzM4NjUsMzg2NmM4OTQ5Cis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX2xheW91dCIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9sYXlvdXQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzM4NjljODk1Miw4OTU0Cis8IAkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sYXlvdXQiIDE+JjI7IGV4aXQgMTsgfSA7OworLS0tCis+IAkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxheW91dCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sYXlvdXQiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworMzg4MmM4OTY3LDg5NjgKKzwgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYXRhLXBhY2thZ2luZyBvciAtLXdpdGhvdXQtZGF0YS1wYWNrYWdpbmcgd2FzIGdpdmVuLgorLS0tCis+IAorPiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRhdGEtcGFja2FnaW5nIHdhcyBnaXZlbi4KKzM4ODQsMzg4NWM4OTcwCis8ICAgd2l0aHZhbD0iJHdpdGhfZGF0YV9wYWNrYWdpbmciCis8ICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKy0tLQorPiAgIHdpdGh2YWw9JHdpdGhfZGF0YV9wYWNrYWdpbmc7IGNhc2UgIiR7d2l0aHZhbH0iIGluCiszODkxYzg5NzYsODk3OAorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgMT4mMjsgZXhpdCAxOyB9IDs7CistLS0KKz4gCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM5MTBjODk5NworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFwcGVkIG9yIC0tZGlzYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorMzkxMiwzOTEzYzg5OTkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfbWFwcGVkIgorPCAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX21hcHBlZDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzkxNmM5MDAyLDkwMDQKKzwgICAgICAgICAgICAgICAgKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAgICAgICAgICAgICAgICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbWFwcGVkOyB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nIG5vdyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM5MjZjOTAxNCw5MDE1Cis8ICAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiAxPiYyCistLS0KKz4gICAgIAkgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiYyO30KKzM5MjljOTAxOCw5MDE5Cis8ICAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgMT4mMgorLS0tCis+ICAgICAJICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nPWxpYnJhcnkgaW5zdGVhZCBvZiAtLWRpc2FibGUtbWFwcGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiYyO30KKzM5MzNjOTAyMyw5MDI1Cis8IAl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAJeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzM5NTksMzk2MWM5MDUxLDkwNTQKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM5NjE6IGNoZWNraW5nIGZvciBhIGxpYnJhcnkgc3VmZml4IHRvIHVzZSIgPiY1Cis8ICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicmFyeS1zdWZmaXggb3IgLS13aXRob3V0LWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlLi4uICIgPiY2OyB9Cis+IAorPiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKzM5NjMsMzk2NGM5MDU2Cis8ICAgd2l0aHZhbD0iJHdpdGhfbGlicmFyeV9zdWZmaXgiCis8ICAgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorLS0tCis+ICAgd2l0aHZhbD0kd2l0aF9saWJyYXJ5X3N1ZmZpeDsgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorMzk3M2M5MDY1LDkwNjYKKzwgZWNobyAiJGFjX3QiIiRtc2ciIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbXNnIiA+JjUKKz4gJGFzX2VjaG8gIiRtc2ciID4mNjsgfQorMzk4NWM5MDc4Cis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyBvciAtLWRpc2FibGUtdGVzdHMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyB3YXMgZ2l2ZW4uCiszOTg3LDM5ODhjOTA4MAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV90ZXN0cyIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzk5MWM5MDgzLDkwODUKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0cyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis0MDA0YzkwOTgKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNhbXBsZXMgb3IgLS1kaXNhYmxlLXNhbXBsZXMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zYW1wbGVzIHdhcyBnaXZlbi4KKzQwMDYsNDAwN2M5MTAwCis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX3NhbXBsZXMiCis8ICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfc2FtcGxlczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorNDAxMGM5MTAzLDkxMDUKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNhbXBsZXMiIDE+JjI7IGV4aXQgMTsgfSA7OworLS0tCis+IAkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNhbXBsZXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc2FtcGxlcyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis0MDY3YzkxNjIKKzwgCSotKi1ocHV4KikgCQorLS0tCis+IAkqLSotaHB1eCopCis0MTEzLDQxMTRjOTIwOCw5MjEwCis8IHRyYXAgJycgMSAyIDE1Cis8IGNhdCA+IGNvbmZjYWNoZSA8PFxFT0YKKy0tLQorPiBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaWN1ZGVmcy5tayBNYWtlZmlsZSBkYXRhL2ljdXBrZy5pbmMgY29uZmlnL01ha2VmaWxlLmluYyBkYXRhL01ha2VmaWxlIHN0dWJkYXRhL01ha2VmaWxlIGNvbW1vbi9NYWtlZmlsZSBpMThuL01ha2VmaWxlIGxheW91dC9NYWtlZmlsZSBsYXlvdXRleC9NYWtlZmlsZSBpby9NYWtlZmlsZSBleHRyYS9NYWtlZmlsZSBleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZSB0b29scy9NYWtlZmlsZSB0b29scy9jdGVzdGZ3L01ha2VmaWxlIHRvb2xzL21ha2Vjb252L01ha2VmaWxlIHRvb2xzL2dlbnJiL01ha2VmaWxlIHRvb2xzL2dlbnVjYS9NYWtlZmlsZSB0b29scy9nZW5jY29kZS9NYWtlZmlsZSB0b29scy9nZW5jbW4vTWFrZWZpbGUgdG9vbHMvZ2VuY252YWwvTWFrZWZpbGUgdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUgdG9vbHMvZ2VudGVzdC9NYWtlZmlsZSB0b29scy9nZW5ub3JtL01ha2VmaWxlIHRvb2xzL2dlbnByb3BzL01ha2VmaWxlIHRvb2xzL2dlbmNhc2UvTWFrZWZpbGUgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUgdG9vbHMvZ2VuYnJrL01ha2VmaWxlIHRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSB0b29scy90b29sdXRpbC9NYWtlZmlsZSB0b29scy9kdW1wY2UvTWFrZWZpbGUgdGVzdC9NYWtlZmlsZSB0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvcGtnZGF0YS5pbmMgdGVzdC9oZHJ0c3QvTWFrZWZpbGUgdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSB0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIHRlc3QvaW90ZXN0L01ha2VmaWxlIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgdGVzdC90ZXN0bWFwL01ha2VmaWxlIHRlc3QvbGV0ZXN0L01ha2VmaWxlIHRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBjb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIgorPiAKKz4gY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCis0MTE3LDQxMThjOTIxMyw5MjE1Cis8ICMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMuICBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuCis8ICMgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorLS0tCis+ICMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCis+ICMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKz4gIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCis0MTIwLDQxMjdjOTIxNyw5MjE4Cis8ICMgQnkgZGVmYXVsdCwgY29uZmlndXJlIHVzZXMgLi9jb25maWcuY2FjaGUgYXMgdGhlIGNhY2hlIGZpbGUsCis8ICMgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFlvdSBjYW4gZ2l2ZSBjb25maWd1cmUKKzwgIyB0aGUgLS1jYWNoZS1maWxlPUZJTEUgb3B0aW9uIHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZSBmaWxlOyB0aGF0IGlzCis8ICMgd2hhdCBjb25maWd1cmUgZG9lcyB3aGVuIGl0IGNhbGxzIGNvbmZpZ3VyZSBzY3JpcHRzIGluCis8ICMgc3ViZGlyZWN0b3JpZXMsIHNvIHRoZXkgc2hhcmUgdGhlIGNhY2hlLgorPCAjIEdpdmluZyAtLWNhY2hlLWZpbGU9L2Rldi9udWxsIGRpc2FibGVzIGNhY2hpbmcsIGZvciBkZWJ1Z2dpbmcgY29uZmlndXJlLgorPCAjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdCB0aGUKKzwgIyAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKy0tLQorPiAjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorPiAjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKzQxMjljOTIyMCw5MjI1Cis8IEVPRgorLS0tCis+ICMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorPiAjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCis+ICMgZm9sbG93aW5nIHZhbHVlcy4KKz4gCis+IF9BQ0VPRgorPiAKKzQxMzJjOTIyOAorPCAjIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCistLS0KKz4gIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKzQxMzUsNDE1NGM5MjMxLDkyNzcKKzwgKHNldCkgMj4mMSB8Cis8ICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKzwgICAqYWNfc3BhY2U9XCAqKQorPCAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZSBzdWJzdGl0dXRpb24KKzwgICAgICMgdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCis8ICAgICBzZWQgLW4gXAorPCAgICAgICAtZSAicy8nLydcXFxcJycvZyIgXAorPCAgICAgICAtZSAicy9eXFwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXFwpPVxcKC4qXFwpL1xcMT1cJHtcXDE9J1xcMid9L3AiCis8ICAgICA7OworPCAgICopCis8ICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorPCAgICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipcKS9cMT0ke1wxPVwyfS9wJworPCAgICAgOzsKKzwgICBlc2FjID4+IGNvbmZjYWNoZQorPCBpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuCis8ICAgOgorPCBlbHNlCis8ICAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorPCAgICAgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCis8ICAgICBjYXQgY29uZmNhY2hlID4gJGNhY2hlX2ZpbGUKKy0tLQorPiAoCis+ICAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworPiAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCis+ICAgICBjYXNlICRhY192YWwgaW4gIygKKz4gICAgICoke2FzX25sfSopCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworPiAgICAgICBlc2FjCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCis+ICAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCis+ICAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7Cis+ICAgICAgIGVzYWMgOzsKKz4gICAgIGVzYWMKKz4gICBkb25lCis+IAorPiAgIChzZXQpIDI+JjEgfAorPiAgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorPiAgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorPiAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCis+ICAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorPiAgICAgICBzZWQgLW4gXAorPiAJInMvJy8nXFxcXCcnL2c7Cis+IAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKz4gICAgICAgOzsgIygKKz4gICAgICopCis+ICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCis+ICAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCis+ICAgICAgIDs7Cis+ICAgICBlc2FjIHwKKz4gICAgIHNvcnQKKz4gKSB8Cis+ICAgc2VkICcKKz4gICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKz4gICAgICB0IGNsZWFyCis+ICAgICAgOmNsZWFyCis+ICAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworPiAgICAgIHQgZW5kCis+ICAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCis+ICAgICAgOmVuZCcgPj5jb25mY2FjaGUKKz4gaWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorPiAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorPiAgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorNDE1NmM5Mjc5LDkyODAKKzwgICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKzQxNjEsNDE2MmQ5Mjg0Cis8IHRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1Cis8IAorNDE2Nyw0MTcyYzkyODkKKzwgIyBBbnkgYXNzaWdubWVudCB0byBWUEFUSCBjYXVzZXMgU3VuIG1ha2UgdG8gb25seSBleGVjdXRlCis8ICMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJlbW92ZSBpdCBpZiBub3QgbmVlZGVkLgorPCAjIElmIHRoZXJlIGlzIGEgY29sb24gaW4gdGhlIHBhdGgsIHdlIG5lZWQgdG8ga2VlcCBpdC4KKzwgaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKzwgICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnCis8IGZpCistLS0KKz4gREVGUz0tREhBVkVfQ09ORklHX0gKKzQxNzRjOTI5MSw5MzAyCis8IHRyYXAgJ3JtIC1mICRDT05GSUdfU1RBVFVTIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKKy0tLQorPiBhY19saWJvYmpzPQorPiBhY19sdGxpYm9ianM9Cis+IGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorPiAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKz4gICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKz4gICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKz4gICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCis+ICAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCis+ICAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCis+ICAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCis+IGRvbmUKKz4gTElCT0JKUz0kYWNfbGlib2JqcworNDE3NmM5MzA0Cis8IERFRlM9LURIQVZFX0NPTkZJR19ICistLS0KKz4gTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKzQxNzgsNDE3OWQ5MzA1Cis8ICMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorPCA6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9Cis0MTgxLDQxODVjOTMwNyw5MzE3Cis8IGVjaG8gY3JlYXRpbmcgJENPTkZJR19TVEFUVVMKKzwgcm0gLWYgJENPTkZJR19TVEFUVVMKKzwgY2F0ID4gJENPTkZJR19TVEFUVVMgPDxFT0YKKzwgIyEgL2Jpbi9zaAorPCAjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KKy0tLQorPiAKKz4gCis+IDogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKz4gYWNfd3JpdGVfZmFpbD0wCis+IGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCis+IGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorPiBjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAjISAkU0hFTEwKKz4gIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorNDE4Nyw0MTkxZDkzMTgKKzwgIyBUaGlzIGRpcmVjdG9yeSB3YXMgY29uZmlndXJlZCBhcyBmb2xsb3dzLAorPCAjIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorPCAjCis8ICMgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzCis8ICMKKzQxOTNjOTMyMAorPCAjIGNvbmZpZ3VyZSwgaXMgaW4gLi9jb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKy0tLQorPiAjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCis0MTk1LDQxOTZjOTMyMiw5NDIwCis8IGFjX2NzX3VzYWdlPSJVc2FnZTogJENPTkZJR19TVEFUVVMgWy0tcmVjaGVja10gWy0tdmVyc2lvbl0gWy0taGVscF0iCis8IGZvciBhY19vcHRpb24KKy0tLQorPiBkZWJ1Zz1mYWxzZQorPiBhY19jc19yZWNoZWNrPWZhbHNlCis+IGFjX2NzX3NpbGVudD1mYWxzZQorPiBTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorPiBfQUNFT0YKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCis+ICMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gCis+ICMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorPiBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCis+IGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGVtdWxhdGUgc2gKKz4gICBOVUxMQ01EPToKKz4gICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKz4gICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorPiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworPiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCis+IGVsc2UKKz4gICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKz4gICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKz4gZXNhYworPiAKKz4gZmkKKz4gCis+IAorPiAKKz4gCis+ICMgUEFUSCBuZWVkcyBDUgorPiAjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCis+IGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworPiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKz4gYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCis+IGFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKz4gYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCis+IAorPiBhc19ubD0nCis+ICcKKz4gZXhwb3J0IGFzX25sCis+ICMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCis+IGFzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCis+IGFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworPiBhc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworPiBpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorPiAgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworPiAgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworPiBlbHNlCis+ICAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCis+ICAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworPiAgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworPiAgIGVsc2UKKz4gICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCis+ICAgICBhc19lY2hvX25fYm9keT0nZXZhbAorPiAgICAgICBhcmc9JDE7Cis+ICAgICAgIGNhc2UgJGFyZyBpbgorPiAgICAgICAqIiRhc19ubCIqKQorPiAJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7Cis+IAlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworPiAgICAgICBlc2FjOworPiAgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCis+ICAgICAnCis+ICAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKz4gICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCis+ICAgZmkKKz4gICBleHBvcnQgYXNfZWNob19ib2R5Cis+ICAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworPiBmaQorPiAKKz4gIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCis+IGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCis+ICAgUEFUSF9TRVBBUkFUT1I9OgorPiAgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKz4gICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Cis+ICAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworPiAgIH0KKz4gZmkKKz4gCis+ICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorPiBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBhc191bnNldD11bnNldAorPiBlbHNlCis+ICAgYXNfdW5zZXQ9ZmFsc2UKKz4gZmkKKz4gCis+IAorPiAjIElGUworPiAjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworPiAjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKz4gIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCis+ICMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKz4gSUZTPSIgIiIJJGFzX25sIgorPiAKKz4gIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKz4gY2FzZSAkMCBpbgorPiAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKz4gICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKzQxOTgsNDIwOGM5NDIyLDk0MjQKKzwgICBjYXNlICJcJGFjX29wdGlvbiIgaW4KKzwgICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKzwgICAgIGVjaG8gInJ1bm5pbmcgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKzwgICAgIGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworPCAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12KQorPCAgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKKzwgICAgIGV4aXQgMCA7OworPCAgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLS1oKQorPCAgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OworPCAgICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDEgOzsKKzwgICBlc2FjCistLS0KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworNDIwOWE5NDI2Cis+IElGUz0kYXNfc2F2ZV9JRlMKKzQyMTEsNDIxMmM5NDI4LDk0MzgKKzwgYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKzwgYWNfZ2l2ZW5fSU5TVEFMTD0iJElOU1RBTEwiCistLS0KKz4gICAgICA7OworPiBlc2FjCis+ICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKz4gIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCis+IGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKz4gICBhc19teXNlbGY9JDAKKz4gZmkKKz4gaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorPiAgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCis+ICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IGZpCis0MjE0LDQzOTNjOTQ0MCw5NTc3Cis8IHRyYXAgJ3JtIC1mciBgZWNobyAiaWN1ZGVmcy5tayBcCis8IAkJTWFrZWZpbGUgXAorPCAJCWRhdGEvaWN1cGtnLmluYyBcCis8IAkJY29uZmlnL01ha2VmaWxlLmluYyBcCis8IAkJZGF0YS9NYWtlZmlsZSBcCis8IAkJc3R1YmRhdGEvTWFrZWZpbGUgXAorPCAJCWNvbW1vbi9NYWtlZmlsZSBcCis8IAkJaTE4bi9NYWtlZmlsZSBcCis8IAkJbGF5b3V0L01ha2VmaWxlIFwKKzwgCQlsYXlvdXRleC9NYWtlZmlsZSBcCis8IAkJaW8vTWFrZWZpbGUgXAorPCAJCWV4dHJhL01ha2VmaWxlIFwKKzwgCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZSBcCis8IAkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSBcCis8IAkJdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnJiL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jbW4vTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5uYW1lcy9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VudGVzdC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNhc2UvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnBuYW1lL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIFwKKzwgCQl0b29scy9pY3Vzd2FwL01ha2VmaWxlIFwKKzwgCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKzwgCQl0b29scy90b29sdXRpbC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZHVtcGNlL01ha2VmaWxlIFwKKzwgCQl0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RkYXRhL3BrZ2RhdGEuaW5jIFwKKzwgCQl0ZXN0L2hkcnRzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9jaW50bHRzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9pb3Rlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGVzdG1hcC9NYWtlZmlsZSBcCis8IAkJdGVzdC9sZXRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCis8IAkJc2FtcGxlcy9NYWtlZmlsZSBzYW1wbGVzL2RhdGUvTWFrZWZpbGUgXAorPCAJCXNhbXBsZXMvY2FsL01ha2VmaWxlIHNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIFwKKzwgCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIGNvbW1vbi9pY3VjZmcuaCIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorPCBFT0YKKzwgY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCis8IAorPCAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorPCBzZWQgJ3MvJUAvQEAvOyBzL0AlL0BALzsgcy8lZ1wkL0BnLzsgL0BnXCQvcy9bXFxcXCYlXS9cXFxcJi9nOworPCAgcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKzwgJGFjX3Zwc3ViCis8ICRleHRyYXN1YgorPCBzJUBTSEVMTEAlJFNIRUxMJWcKKzwgcyVAQ0ZMQUdTQCUkQ0ZMQUdTJWcKKzwgcyVAQ1BQRkxBR1NAJSRDUFBGTEFHUyVnCis8IHMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworPCBzJUBGRkxBR1NAJSRGRkxBR1MlZworPCBzJUBERUZTQCUkREVGUyVnCis8IHMlQExERkxBR1NAJSRMREZMQUdTJWcKKzwgcyVATElCU0AlJExJQlMlZworPCBzJUBleGVjX3ByZWZpeEAlJGV4ZWNfcHJlZml4JWcKKzwgcyVAcHJlZml4QCUkcHJlZml4JWcKKzwgcyVAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAlJHByb2dyYW1fdHJhbnNmb3JtX25hbWUlZworPCBzJUBiaW5kaXJAJSRiaW5kaXIlZworPCBzJUBzYmluZGlyQCUkc2JpbmRpciVnCis8IHMlQGxpYmV4ZWNkaXJAJSRsaWJleGVjZGlyJWcKKzwgcyVAZGF0YWRpckAlJGRhdGFkaXIlZworPCBzJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCis8IHMlQHNoYXJlZHN0YXRlZGlyQCUkc2hhcmVkc3RhdGVkaXIlZworPCBzJUBsb2NhbHN0YXRlZGlyQCUkbG9jYWxzdGF0ZWRpciVnCis8IHMlQGxpYmRpckAlJGxpYmRpciVnCis8IHMlQGluY2x1ZGVkaXJAJSRpbmNsdWRlZGlyJWcKKzwgcyVAb2xkaW5jbHVkZWRpckAlJG9sZGluY2x1ZGVkaXIlZworPCBzJUBpbmZvZGlyQCUkaW5mb2RpciVnCis8IHMlQG1hbmRpckAlJG1hbmRpciVnCis8IHMlQFBBQ0tBR0VAJSRQQUNLQUdFJWcKKzwgcyVAVkVSU0lPTkAlJFZFUlNJT04lZworPCBzJUBMSUJfVkVSU0lPTkAlJExJQl9WRVJTSU9OJWcKKzwgcyVATElCX1ZFUlNJT05fTUFKT1JAJSRMSUJfVkVSU0lPTl9NQUpPUiVnCis8IHMlQFVOSUNPREVfVkVSU0lPTkAlJFVOSUNPREVfVkVSU0lPTiVnCis8IHMlQENDQCUkQ0MlZworPCBzJUBDWFhAJSRDWFglZworPCBzJUBJTlNUQUxMX1BST0dSQU1AJSRJTlNUQUxMX1BST0dSQU0lZworPCBzJUBJTlNUQUxMX1NDUklQVEAlJElOU1RBTExfU0NSSVBUJWcKKzwgcyVASU5TVEFMTF9EQVRBQCUkSU5TVEFMTF9EQVRBJWcKKzwgcyVAU1RSSVBAJSRTVFJJUCVnCis8IHMlQFVfTUFLRUAlJFVfTUFLRSVnCis8IHMlQERPWFlHRU5AJSRET1hZR0VOJWcKKzwgcyVAaG9zdEAlJGhvc3QlZworPCBzJUBob3N0X2FsaWFzQCUkaG9zdF9hbGlhcyVnCis8IHMlQGhvc3RfY3B1QCUkaG9zdF9jcHUlZworPCBzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKKzwgcyVAaG9zdF9vc0AlJGhvc3Rfb3MlZworPCBzJUBFWEVFWFRAJSRFWEVFWFQlZworPCBzJUBBUkZMQUdTQCUkQVJGTEFHUyVnCis8IHMlQENPTVBJTEVfTElOS19FTlZWQVJAJSRDT01QSUxFX0xJTktfRU5WVkFSJWcKKzwgcyVATElCX01AJSRMSUJfTSVnCis8IHMlQEVOQUJMRV9TSEFSRURAJSRFTkFCTEVfU0hBUkVEJWcKKzwgcyVARU5BQkxFX1NUQVRJQ0AlJEVOQUJMRV9TVEFUSUMlZworPCBzJUBFTkFCTEVfREVCVUdAJSRFTkFCTEVfREVCVUclZworPCBzJUBFTkFCTEVfUkVMRUFTRUAlJEVOQUJMRV9SRUxFQVNFJWcKKzwgcyVAUkFOTElCQCUkUkFOTElCJWcKKzwgcyVAQVJAJSRBUiVnCis8IHMlQFVfRElTQUJMRV9SRU5BTUlOR0AlJFVfRElTQUJMRV9SRU5BTUlORyVnCis8IHMlQFVfRU5BQkxFX1RSQUNJTkdAJSRVX0VOQUJMRV9UUkFDSU5HJWcKKzwgcyVARU5BQkxFX1JQQVRIQCUkRU5BQkxFX1JQQVRIJWcKKzwgcyVAVV9JTkxJTkVAJSRVX0lOTElORSVnCis8IHMlQFRIUkVBRFNfVFJVRUAlJFRIUkVBRFNfVFJVRSVnCis8IHMlQElDVV9VU0VfVEhSRUFEU0AlJElDVV9VU0VfVEhSRUFEUyVnCis8IHMlQEhBVkVfTU1BUEAlJEhBVkVfTU1BUCVnCis8IHMlQEdFTkNDT0RFX0FTU0VNQkxZQCUkR0VOQ0NPREVfQVNTRU1CTFklZworPCBzJUBDUFBAJSRDUFAlZworPCBzJUBVX0hBVkVfSU5UVFlQRVNfSEAlJFVfSEFWRV9JTlRUWVBFU19IJWcKKzwgcyVAQ1hYQ1BQQCUkQ1hYQ1BQJWcKKzwgcyVAVV9JT1NUUkVBTV9TT1VSQ0VAJSRVX0lPU1RSRUFNX1NPVVJDRSVnCis8IHMlQFVfSVNfQklHX0VORElBTkAlJFVfSVNfQklHX0VORElBTiVnCis8IHMlQFVfSEFWRV9OTF9MQU5HSU5GT0AlJFVfSEFWRV9OTF9MQU5HSU5GTyVnCis8IHMlQFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUQCUkVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQlZworPCBzJUBVX05MX0xBTkdJTkZPX0NPREVTRVRAJSRVX05MX0xBTkdJTkZPX0NPREVTRVQlZworPCBzJUBVX0hBVkVfTkFNRVNQQUNFQCUkVV9IQVZFX05BTUVTUEFDRSVnCis8IHMlQFVfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT05AJSRVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OJWcKKzwgcyVAVV9IQVZFX1BMQUNFTUVOVF9ORVdAJSRVX0hBVkVfUExBQ0VNRU5UX05FVyVnCis8IHMlQFVfSEFWRV9QT1BFTkAlJFVfSEFWRV9QT1BFTiVnCis8IHMlQFVfSEFWRV9UWlNFVEAlJFVfSEFWRV9UWlNFVCVnCis8IHMlQFVfVFpTRVRAJSRVX1RaU0VUJWcKKzwgcyVAVV9IQVZFX1RaTkFNRUAlJFVfSEFWRV9UWk5BTUUlZworPCBzJUBVX1RaTkFNRUAlJFVfVFpOQU1FJWcKKzwgcyVAVV9IQVZFX1RJTUVaT05FQCUkVV9IQVZFX1RJTUVaT05FJWcKKzwgcyVAVV9USU1FWk9ORUAlJFVfVElNRVpPTkUlZworPCBzJUBIQVZFX0lOVDhfVEAlJEhBVkVfSU5UOF9UJWcKKzwgcyVASEFWRV9VSU5UOF9UQCUkSEFWRV9VSU5UOF9UJWcKKzwgcyVASEFWRV9JTlQxNl9UQCUkSEFWRV9JTlQxNl9UJWcKKzwgcyVASEFWRV9VSU5UMTZfVEAlJEhBVkVfVUlOVDE2X1QlZworPCBzJUBIQVZFX0lOVDMyX1RAJSRIQVZFX0lOVDMyX1QlZworPCBzJUBIQVZFX1VJTlQzMl9UQCUkSEFWRV9VSU5UMzJfVCVnCis8IHMlQEhBVkVfSU5UNjRfVEAlJEhBVkVfSU5UNjRfVCVnCis8IHMlQEhBVkVfVUlOVDY0X1RAJSRIQVZFX1VJTlQ2NF9UJWcKKzwgcyVAVV9IQVZFX1dDSEFSX0hAJSRVX0hBVkVfV0NIQVJfSCVnCis8IHMlQFVfSEFWRV9XQ1NDUFlAJSRVX0hBVkVfV0NTQ1BZJWcKKzwgcyVAVV9TSVpFT0ZfV0NIQVJfVEAlJFVfU0laRU9GX1dDSEFSX1QlZworPCBzJUBFWFRSQVNfVFJVRUAlJEVYVFJBU19UUlVFJWcKKzwgcyVASUNVSU9fVFJVRUAlJElDVUlPX1RSVUUlZworPCBzJUBMQVlPVVRfVFJVRUAlJExBWU9VVF9UUlVFJWcKKzwgcyVAdGhlc3lzY29uZmRpckAlJHRoZXN5c2NvbmZkaXIlZworPCBzJUB0aGVkYXRhZGlyQCUkdGhlZGF0YWRpciVnCis8IHMlQHRoZWxpYmRpckAlJHRoZWxpYmRpciVnCis8IHMlQHBrZ2ljdWRhdGFkaXJAJSRwa2dpY3VkYXRhZGlyJWcKKzwgcyVAdGhlcGtnaWN1ZGF0YWRpckAlJHRoZXBrZ2ljdWRhdGFkaXIlZworPCBzJUBEQVRBX1BBQ0tBR0lOR19DUFBGTEFHU0AlJERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTJWcKKzwgcyVAREFUQV9QQUNLQUdJTkdfTU9ERUAlJERBVEFfUEFDS0FHSU5HX01PREUlZworPCBzJUBJQ1VMSUJTVUZGSVhAJSRJQ1VMSUJTVUZGSVglZworPCBzJUBVX0hBVkVfTElCX1NVRkZJWEAlJFVfSEFWRV9MSUJfU1VGRklYJWcKKzwgcyVASUNVTElCU1VGRklYQ05BTUVAJSRJQ1VMSUJTVUZGSVhDTkFNRSVnCis8IHMlQFRFU1RTX1RSVUVAJSRURVNUU19UUlVFJWcKKzwgcyVAU0FNUExFU19UUlVFQCUkU0FNUExFU19UUlVFJWcKKzwgcyVASUNVREFUQV9DSEFSQCUkSUNVREFUQV9DSEFSJWcKKzwgcyVAcGxhdGZvcm1AJSRwbGF0Zm9ybSVnCis8IHMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZUAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZSVnCis8IHMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRAJSRwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50JWcKKzwgcyVAbGRfcnBhdGhfc3VmQCUkbGRfcnBhdGhfc3VmJWcKKzwgcyVAQUlYX1NITElCQCUkQUlYX1NITElCJWcKKzwgCis8IENFT0YKKzwgRU9GCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IAorPCAjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorPCAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKzwgYWNfbWF4X3NlZF9jbWRzPTkwICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2VkIHNjcmlwdC4KKzwgYWNfZmlsZT0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KKzwgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCis8IGFjX2VuZD0kYWNfbWF4X3NlZF9jbWRzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKzwgYWNfbW9yZV9saW5lcz06Cis8IGFjX3NlZF9jbWRzPSIiCis8IHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworPCAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorPCAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKy0tLQorPiAjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKz4gZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorPiBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorPiBkb25lCis+IFBTMT0nJCAnCis+IFBTMj0nPiAnCis+IFBTND0nKyAnCis+IAorPiAjIE5MUyBudWlzYW5jZXMuCis+IExDX0FMTD1DCis+IGV4cG9ydCBMQ19BTEwKKz4gTEFOR1VBR0U9QworPiBleHBvcnQgTEFOR1VBR0UKKz4gCis+ICMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorPiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCis+IGVsc2UKKz4gICBhc19iYXNlbmFtZT1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKz4gYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Cis+ICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCis+IAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWC8iJDAiIHwKKz4gICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcL1woXC9cL1wpJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwvXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gCis+ICMgQ0RQQVRILgorPiAkYXNfdW5zZXQgQ0RQQVRICis+IAorPiAKKz4gCis+ICAgYXNfbGluZW5vXzE9JExJTkVOTworPiAgIGFzX2xpbmVub18yPSRMSU5FTk8KKz4gICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKz4gICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKz4gCis+ICAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworPiAgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKz4gICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKz4gICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorPiAgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKz4gICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCis+ICAgIyBjYXNlIGF0IGxpbmUgZW5kLgorPiAgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorPiAgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorPiAgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCis+ICAgc2VkIC1uICcKKz4gICAgIHAKKz4gICAgIC9bJF1MSU5FTk8vPQorPiAgICcgPCRhc19teXNlbGYgfAorPiAgICAgc2VkICcKKz4gICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKz4gICAgICAgdCBsaW5lbm8KKz4gICAgICAgYgorPiAgICAgICA6bGluZW5vCis+ICAgICAgIE4KKz4gICAgICAgOmxvb3AKKz4gICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCis+ICAgICAgIHQgbG9vcAorPiAgICAgICBzLy1cbi4qLy8KKz4gICAgICcgPiRhc19tZS5saW5lbm8gJiYKKz4gICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IAorPiAgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCis+ICAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCis+ICAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKz4gICAuICIuLyRhc19tZS5saW5lbm8iCis+ICAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCis+ICAgZXhpdAorPiB9Cis+IAorPiAKKz4gaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+ICAgYXNfZGlybmFtZT1kaXJuYW1lCis+IGVsc2UKKz4gICBhc19kaXJuYW1lPWZhbHNlCis+IGZpCis+IAorPiBFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorPiBjYXNlIGBlY2hvIC1uIHhgIGluCis+IC1uKikKKz4gICBjYXNlIGBlY2hvICd4XGMnYCBpbgorPiAgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorPiAgICopICAgRUNIT19DPSdcYyc7OworPiAgIGVzYWM7OworPiAqKQorPiAgIEVDSE9fTj0nLW4nOzsKKz4gZXNhYworPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKz4gaWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCis+ICAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorPiBlbHNlCis+ICAgcm0gLWYgY29uZiQkLmRpcgorPiAgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKz4gZmkKKz4gaWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorPiAgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorPiAgICAgYXNfbG5fcz0nbG4gLXMnCis+ICAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorPiAgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKz4gICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorPiAgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKz4gICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKz4gICAgICAgYXNfbG5fcz0nY3AgLXAnCis+ICAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKz4gICAgIGFzX2xuX3M9bG4KKzQzOTVjOTU3OQorPCAgICAgc2VkICIke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCistLS0KKz4gICAgIGFzX2xuX3M9J2NwIC1wJworNDM5Nyw0NDcyYzk1ODEsOTU4NQorPCAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5zJGFjX2ZpbGU7IHRoZW4KKzwgICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKzwgICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorPCAgIGVsc2UKKzwgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKzwgICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCis8ICAgICBlbHNlCis8ICAgICAgIGFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgY29uZnRlc3QucyRhY19maWxlIgorPCAgICAgZmkKKzwgICAgIGFjX2ZpbGU9YGV4cHIgJGFjX2ZpbGUgKyAxYAorPCAgICAgYWNfYmVnPSRhY19lbmQKKzwgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKzwgICBmaQorPCBkb25lCis8IGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKzwgICBhY19zZWRfY21kcz1jYXQKKzwgZmkKKzwgRU9GCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKzwgCis8IENPTkZJR19GSUxFUz1cJHtDT05GSUdfRklMRVMtImljdWRlZnMubWsgXAorPCAJCU1ha2VmaWxlIFwKKzwgCQlkYXRhL2ljdXBrZy5pbmMgXAorPCAJCWNvbmZpZy9NYWtlZmlsZS5pbmMgXAorPCAJCWRhdGEvTWFrZWZpbGUgXAorPCAJCXN0dWJkYXRhL01ha2VmaWxlIFwKKzwgCQljb21tb24vTWFrZWZpbGUgXAorPCAJCWkxOG4vTWFrZWZpbGUgXAorPCAJCWxheW91dC9NYWtlZmlsZSBcCis8IAkJbGF5b3V0ZXgvTWFrZWZpbGUgXAorPCAJCWlvL01ha2VmaWxlIFwKKzwgCQlleHRyYS9NYWtlZmlsZSBcCis8IAkJZXh0cmEvdWNvbnYvTWFrZWZpbGUgZXh0cmEvc2NycHRydW4vTWFrZWZpbGUgXAorPCAJCXRvb2xzL01ha2VmaWxlIHRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUgXAorPCAJCXRvb2xzL21ha2Vjb252L01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VudWNhL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jY29kZS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jbnZhbC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbm5vcm0vTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnByb3BzL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jYXNlL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VuYnJrL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5zcHJlcC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvdG9vbHV0aWwvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCis8IAkJdGVzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSBcCis8IAkJdGVzdC90ZXN0ZGF0YS9wa2dkYXRhLmluYyBcCis8IAkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvaW50bHRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvY2ludGx0c3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RtYXAvTWFrZWZpbGUgXAorPCAJCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUgXAorPCAJCXNhbXBsZXMvTWFrZWZpbGUgc2FtcGxlcy9kYXRlL01ha2VmaWxlIFwKKzwgCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCis8IAkJY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCJ9Cis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IGZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCis8ICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorPCAgIGNhc2UgIiRhY19maWxlIiBpbgorPCAgICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCis8ICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKzwgICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworPCAgIGVzYWMKKy0tLQorPiBlbHNlCis+ICAgYXNfbG5fcz0nY3AgLXAnCis+IGZpCis+IHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKz4gcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorNDQ3NGM5NTg3LDk1OTIKKzwgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2RpciwgdG9wX3NyY2RpciwgYW5kIElOU1RBTEwgZm9yIHN1YmRpcmVjdG9yaWVzLgorLS0tCis+IGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19ta2Rpcl9wPToKKz4gZWxzZQorPiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCis+ICAgYXNfbWtkaXJfcD1mYWxzZQorPiBmaQorNDQ3Niw0NDgzYzk1OTQsOTU5OAorPCAgICMgUmVtb3ZlIGxhc3Qgc2xhc2ggYW5kIGFsbCB0aGF0IGZvbGxvd3MgaXQuICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLgorPCAgIGFjX2Rpcj1gZWNobyAkYWNfZmlsZXxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCis8ICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCis8ICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorPCAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKzwgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKzwgICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCis8ICAgICBhY19kb3RzPWBlY2hvICRhY19kaXJfc3VmZml4fHNlZCAncyUvW14vXSolLi4vJWcnYAorLS0tCis+IGlmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBhc190ZXN0X3g9J3Rlc3QgLXgnCis+IGVsc2UKKz4gICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICAgIGFzX2xzX0xfb3B0aW9uPUwKKzQ0ODVjOTYwMAorPCAgICAgYWNfZGlyX3N1ZmZpeD0gYWNfZG90cz0KKy0tLQorPiAgICAgYXNfbHNfTF9vcHRpb249Cis0NDg2YTk2MDIsOTYzNworPiAgIGFzX3Rlc3RfeD0nCis+ICAgICBldmFsIHNoIC1jICdcJycKKz4gICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCis+IAl0ZXN0IC1kICIkMS8uIjsKKz4gICAgICAgZWxzZQorPiAJY2FzZSAkMSBpbgorPiAJLSopc2V0ICIuLyQxIjs7Cis+IAllc2FjOworPiAJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKz4gCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKz4gICAgICdcJycgc2gKKz4gICAnCis+IGZpCis+IGFzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94Cis+IAorPiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCis+IGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCis+IAorPiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKz4gYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKz4gCis+IAorPiBleGVjIDY+JjEKKz4gCis+ICMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCis+ICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorPiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorPiBhY19sb2c9IgorPiBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCis+IGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworPiAKKz4gICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCis+ICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCis+ICAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworPiAgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKz4gICAkICQwICRACis0NDg4LDQ0OTZjOTYzOSw5NjUwCis8ICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKzwgICAuKSAgc3JjZGlyPS4KKzwgICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorPCAgICAgICBlbHNlIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYDsgZmkgOzsKKzwgICAvKikgc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiOyB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworPCAgICopICMgUmVsYXRpdmUgcGF0aC4KKzwgICAgIHNyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiCis8ICAgICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7Cis8ICAgZXNhYworLS0tCis+IG9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorPiAiCis+IAorPiBfQUNFT0YKKz4gCis+IGNhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorPiAiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Cis+IGVzYWMKKz4gCis+IGNhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCis+ICIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Cis+IGVzYWMKKzQ0OTgsNDUwMWQ5NjUxCis8ICAgY2FzZSAiJGFjX2dpdmVuX0lOU1RBTEwiIGluCis8ICAgWy8kXSopIElOU1RBTEw9IiRhY19naXZlbl9JTlNUQUxMIiA7OworPCAgICopIElOU1RBTEw9IiRhY19kb3RzJGFjX2dpdmVuX0lOU1RBTEwiIDs7Cis8ICAgZXNhYworNDUwMyw0NTA5Yzk2NTMsOTcxOAorPCAgIGVjaG8gY3JlYXRpbmcgIiRhY19maWxlIgorPCAgIHJtIC1mICIkYWNfZmlsZSIKKzwgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gYGVjaG8gJGFjX2ZpbGVfaW58c2VkICdzJS4qLyUlJ2AgYnkgY29uZmlndXJlLiIKKzwgICBjYXNlICIkYWNfZmlsZSIgaW4KKzwgICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKzwgIyAkY29uZmlndXJlX2lucHV0IiA7OworPCAgICopIGFjX2NvbXN1Yj0gOzsKKy0tLQorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorPiBjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCis+IGNvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCis+IAorPiBfQUNFT0YKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gYWNfY3NfdXNhZ2U9IlwKKz4gXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCis+IGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKz4gCis+IFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbRklMRV0uLi4KKz4gCis+ICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorPiAgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorPiAgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorPiAgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCis+ICAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCis+ICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworPiAgICAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCis+ICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKz4gICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCis+ICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorPiAKKz4gQ29uZmlndXJhdGlvbiBmaWxlczoKKz4gJGNvbmZpZ19maWxlcworPiAKKz4gQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorPiAkY29uZmlnX2hlYWRlcnMKKz4gCis+IFJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorPiAKKz4gX0FDRU9GCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBhY19jc192ZXJzaW9uPSJcXAorPiBjb25maWcuc3RhdHVzCis+IGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MywKKz4gICB3aXRoIG9wdGlvbnMgXFwiYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKz4gCis+IENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKz4gVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCis+IGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCis+IAorPiBhY19wd2Q9JyRhY19wd2QnCis+IHNyY2Rpcj0nJHNyY2RpcicKKz4gSU5TVEFMTD0nJElOU1RBTEwnCis+IHRlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCis+IF9BQ0VPRgorPiAKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCis+IGFjX25lZWRfZGVmYXVsdHM9OgorPiB3aGlsZSB0ZXN0ICQjICE9IDAKKz4gZG8KKz4gICBjYXNlICQxIGluCis+ICAgLS0qPSopCis+ICAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorPiAgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorPiAgICAgYWNfc2hpZnQ9OgorPiAgICAgOzsKKz4gICAqKQorPiAgICAgYWNfb3B0aW9uPSQxCis+ICAgICBhY19vcHRhcmc9JDIKKz4gICAgIGFjX3NoaWZ0PXNoaWZ0Cis+ICAgICA7OworNDUxMiw0NTIwYzk3MjEsOTc2MAorPCAgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCis8ICAgc2VkIC1lICIkYWNfY29tc3ViCis8IHMlQGNvbmZpZ3VyZV9pbnB1dEAlJGNvbmZpZ3VyZV9pbnB1dCVnCis8IHMlQHNyY2RpckAlJHNyY2RpciVnCis8IHMlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKzwgcyVASU5TVEFMTEAlJElOU1RBTEwlZworPCAiICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+ICRhY19maWxlCis8IGZpOyBkb25lCis8IHJtIC1mIGNvbmZ0ZXN0LnMqCistLS0KKz4gICBjYXNlICRhY19vcHRpb24gaW4KKz4gICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorPiAgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorPiAgICAgYWNfY3NfcmVjaGVjaz06IDs7Cis+ICAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorPiAgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworPiAgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCis+ICAgICBkZWJ1Zz06IDs7Cis+ICAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKz4gICAgICRhY19zaGlmdAorPiAgICAgY2FzZSAkYWNfb3B0YXJnIGluCis+ICAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworPiAgICAgZXNhYworPiAgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICckYWNfb3B0YXJnJyIKKz4gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworPiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKz4gICAgICRhY19zaGlmdAorPiAgICAgY2FzZSAkYWNfb3B0YXJnIGluCis+ICAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworPiAgICAgZXNhYworPiAgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAnJGFjX29wdGFyZyciCis+ICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKz4gICAtLWhlIHwgLS1oKQorPiAgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKz4gICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7Cis+ICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKz4gICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCis+ICAgICBhY19jc19zaWxlbnQ9OiA7OworPiAKKz4gICAjIFRoaXMgaXMgYW4gZXJyb3IuCis+ICAgLSopIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis+IAorPiAgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiCis+ICAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworNDUyMiw0NTUzZDk3NjEKKzwgIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKzwgIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorPCAjCis8ICMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKzwgYWNfZEE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCis8IGFjX2RCPSdcKFsgCV1bIAldKlwpW14gCV0qJVwxI1wyJworPCBhY19kQz0nXDMnCis8IGFjX2REPSclZycKKzwgIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKzwgYWNfdUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCis8IGFjX3VCPSdcKFsgCV1cKSVcMSNcMmRlZmluZVwzJworPCBhY191Qz0nICcKKzwgYWNfdUQ9J1w0JWcnCis8ICMgYWNfZSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCis8IGFjX2VBPSdzJV5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworPCBhY19lQj0nJCVcMSNcMmRlZmluZVwzJworPCBhY19lQz0nICcKKzwgYWNfZUQ9JyVnJworPCAKKzwgaWYgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiAhPSBzZXQ7IHRoZW4KKzwgRU9GCis8IGNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorPCAgIENPTkZJR19IRUFERVJTPSJjb21tb24vaWN1Y2ZnLmgiCis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IGZpCis8IGZvciBhY19maWxlIGluIC4uICRDT05GSUdfSEVBREVSUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KKzwgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCis8ICAgY2FzZSAiJGFjX2ZpbGUiIGluCis8ICAgKjoqKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJVteOl0qOiUlJ2AKKzwgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworPCAgICopIGFjX2ZpbGVfaW49IiR7YWNfZmlsZX0uaW4iIDs7Cis0NTU0YTk3NjMsOTc2NgorPiAgIHNoaWZ0Cis+IGRvbmUKKz4gCis+IGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorNDU1NmM5NzY4LDk3ODIKKzwgICBlY2hvIGNyZWF0aW5nICRhY19maWxlCistLS0KKz4gaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorPiAgIGV4ZWMgNj4vZGV2L251bGwKKz4gICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorPiBmaQorPiAKKz4gX0FDRU9GCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKz4gICBzZXQgWCAnJFNIRUxMJyAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCis+ICAgc2hpZnQKKz4gICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorPiAgIENPTkZJR19TSEVMTD0nJFNIRUxMJworPiAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKz4gICBleGVjICJcJEAiCis+IGZpCis0NTU4LDQ1ODRjOTc4NCw5Nzk3Cis8ICAgcm0gLWYgY29uZnRlc3QuZnJhZyBjb25mdGVzdC5pbiBjb25mdGVzdC5vdXQKKzwgICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorPCAgIGNhdCAkYWNfZmlsZV9pbnB1dHMgPiBjb25mdGVzdC5pbgorPCAKKzwgRU9GCis8IAorPCAjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBzZWQgc2NyaXB0IGNvbmZ0ZXN0LnZhbHMgdGhhdCBzdWJzdGl0dXRlcworPCAjIHRoZSBwcm9wZXIgdmFsdWVzIGludG8gY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIEFuZCBmaXJzdDoKKzwgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKzwgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLgorPCBybSAtZiBjb25mdGVzdC52YWxzCis8IGNhdCA+IGNvbmZ0ZXN0LmhkciA8PFxFT0YKKzwgcy9bXFwmJV0vXFwmL2cKKzwgcyVbXFwkYF0lXFwmJWcKKzwgcyUjZGVmaW5lIFwoW0EtWmEtel9dW0EtWmEtejAtOV9dKlwpICpcKC4qXCklJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0lZ3AKKzwgcyVhY19kJWFjX3UlZ3AKKzwgcyVhY191JWFjX2UlZ3AKKzwgRU9GCis8IHNlZCAtbiAtZiBjb25mdGVzdC5oZHIgY29uZmRlZnMuaCA+IGNvbmZ0ZXN0LnZhbHMKKzwgcm0gLWYgY29uZnRlc3QuaGRyCis8IAorPCAjIFRoaXMgc2VkIGNvbW1hbmQgcmVwbGFjZXMgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCis8ICMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKzwgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCis8IGNhdCA+PiBjb25mdGVzdC52YWxzIDw8XEVPRgorPCBzJV5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiUvKiAmICovJQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBleGVjIDU+PmNvbmZpZy5sb2cKKz4geworPiAgIGVjaG8KKz4gICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorPiAjIyBSdW5uaW5nICRhc19tZS4gIyMKKz4gX0FTQk9YCis+ICAgJGFzX2VjaG8gIiRhY19sb2ciCis+IH0gPiY1Cis+IAorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+IF9BQ0VPRgorNDU4Niw0NTg3Yzk3OTkKKzwgIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCis8ICMgdGhlIHNpemUgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28uCistLS0KKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorNDU4OSw0NTkwYzk4MDEsOTgwMgorPCBybSAtZiBjb25mdGVzdC50YWlsCis8IHdoaWxlIDoKKy0tLQorPiAjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KKz4gZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCis0NTkyLDQ2MTZjOTgwNCwxMDA3NgorPCAgIGFjX2xpbmVzPWBncmVwIC1jIC4gY29uZnRlc3QudmFsc2AKKzwgICAjIGdyZXAgLWMgZ2l2ZXMgZW1wdHkgb3V0cHV0IGZvciBhbiBlbXB0eSBmaWxlIG9uIHNvbWUgQUlYIHN5c3RlbXMuCis8ICAgaWYgdGVzdCAteiAiJGFjX2xpbmVzIiB8fCB0ZXN0ICIkYWNfbGluZXMiIC1lcSAwOyB0aGVuIGJyZWFrOyBmaQorPCAgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byBjb25mdGVzdC5mcmFnLgorPCAgIGVjaG8gJyAgY2F0ID4gY29uZnRlc3QuZnJhZyA8PENFT0YnID4+ICRDT05GSUdfU1RBVFVTCis8ICAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzID4+ICRDT05GSUdfU1RBVFVTCis8ICAgZWNobyAnQ0VPRgorPCAgIHNlZCAtZiBjb25mdGVzdC5mcmFnIGNvbmZ0ZXN0LmluID4gY29uZnRlc3Qub3V0Cis8ICAgcm0gLWYgY29uZnRlc3QuaW4KKzwgICBtdiBjb25mdGVzdC5vdXQgY29uZnRlc3QuaW4KKzwgJyA+PiAkQ09ORklHX1NUQVRVUworPCAgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorPCAgIHJtIC1mIGNvbmZ0ZXN0LnZhbHMKKzwgICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnZhbHMKKzwgZG9uZQorPCBybSAtZiBjb25mdGVzdC52YWxzCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8ICAgcm0gLWYgY29uZnRlc3QuZnJhZyBjb25mdGVzdC5oCis8ICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiBjb25mdGVzdC5oCis8ICAgY2F0IGNvbmZ0ZXN0LmluID4+IGNvbmZ0ZXN0LmgKKzwgICBybSAtZiBjb25mdGVzdC5pbgorPCAgIGlmIGNtcCAtcyAkYWNfZmlsZSBjb25mdGVzdC5oIDI+L2Rldi9udWxsOyB0aGVuCis8ICAgICBlY2hvICIkYWNfZmlsZSBpcyB1bmNoYW5nZWQiCis8ICAgICBybSAtZiBjb25mdGVzdC5oCistLS0KKz4gICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCis+ICAgICAiY29tbW9uL2ljdWNmZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb21tb24vaWN1Y2ZnLmgiIDs7Cis+ICAgICAiaWN1ZGVmcy5tayIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpY3VkZWZzLm1rIiA7OworPiAgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworPiAgICAgImRhdGEvaWN1cGtnLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL2ljdXBrZy5pbmMiIDs7Cis+ICAgICAiY29uZmlnL01ha2VmaWxlLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb25maWcvTWFrZWZpbGUuaW5jIiA7OworPiAgICAgImRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJzdHViZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzdHViZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJjb21tb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL01ha2VmaWxlIiA7OworPiAgICAgImkxOG4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaTE4bi9NYWtlZmlsZSIgOzsKKz4gICAgICJsYXlvdXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGF5b3V0L01ha2VmaWxlIiA7OworPiAgICAgImxheW91dGV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dGV4L01ha2VmaWxlIiA7OworPiAgICAgImlvL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGlvL01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL3Vjb252L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3Vjb252L01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9tYWtlY29udi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9tYWtlY29udi9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5yYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5yYi9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW51Y2EvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VudWNhL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbmNtbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbW4vTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VuY252YWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VuY252YWwvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VudGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW50ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbm5vcm0vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5wcm9wcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5wcm9wcy9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5jYXNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmNhc2UvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VuYnJrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmJyay9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9pY3Vzd2FwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvcGtnZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9wa2dkYXRhL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2R1bXBjZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9kdW1wY2UvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRlc3QvdGVzdGRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3Rlc3RkYXRhL3BrZ2RhdGEuaW5jIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGVzdGRhdGEvcGtnZGF0YS5pbmMiIDs7Cis+ICAgICAidGVzdC9oZHJ0c3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9oZHJ0c3QvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC9pbnRsdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2ludGx0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRlc3QvY2ludGx0c3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9jaW50bHRzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L2lvdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2lvdGVzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC90ZXN0bWFwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGVzdG1hcC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L2xldGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2xldGVzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90aHJlYWR0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9NYWtlZmlsZSIgOzsKKz4gICAgICJzYW1wbGVzL2RhdGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9kYXRlL01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvY2FsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvY2FsL01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIiA7OworPiAgICAgImNvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCIgOzsKKz4gCis+ICAgKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworPiAgIGVzYWMKKz4gZG9uZQorPiAKKz4gCis+ICMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKz4gIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCis+ICMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKz4gIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KKz4gaWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKz4gICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworPiAgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCis+IGZpCis+IAorPiAjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKz4gIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorPiAjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCis+ICMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKz4gIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorPiAjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKz4gJGRlYnVnIHx8Cis+IHsKKz4gICB0bXA9Cis+ICAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKz4gICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworPiAnIDAKKz4gICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorPiB9Cis+ICMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorPiAKKz4geworPiAgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorPiAgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCis+IH0gIHx8Cis+IHsKKz4gICB0bXA9Li9jb25mJCQtJFJBTkRPTQorPiAgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorPiB9IHx8Cis+IHsKKz4gICAgJGFzX2VjaG8gIiRhc19tZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiB9Cis+IAorPiAjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCis+ICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCis+ICMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgorPiBpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorPiAKKz4gCis+IGFjX2NyPScKKycKKz4gYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAorPiBpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorPiAgIGFjX2NzX2F3a19jcj0nXFxyJworPiBlbHNlCis+ICAgYWNfY3NfYXdrX2NyPSRhY19jcgorPiBmaQorPiAKKz4gZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKKz4gX0FDRU9GCis+IAorPiAKKz4geworPiAgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCis+ICAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorPiAgIGVjaG8gIl9BQ0VPRiIKKz4gfSA+Y29uZiQkc3Vicy5zaCB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IGFjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCis+IGFjX2RlbGltPSclIV8hIyAnCis+IGZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworPiAgIC4gLi9jb25mJCRzdWJzLnNoIHx8Cis+ICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorPiAgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCis+ICAgICBicmVhaworPiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCis+ICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgIGVsc2UKKz4gICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCis+ICAgZmkKKz4gZG9uZQorPiBybSAtZiBjb25mJCRzdWJzLnNoCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorPiBfQUNFT0YKKz4gc2VkIC1uICcKKz4gaAorPiBzL14vU1siLzsgcy8hLiovIl09LworPiBwCis+IGcKKz4gcy9eW14hXSohLy8KKz4gOnJlcGwKKz4gdCByZXBsCis+IHMvJyIkYWNfZGVsaW0iJyQvLworPiB0IGRlbGltCis+IDpubAorPiBoCis+IHMvXCguXHsxNDhcfVwpLiovXDEvCis+IHQgbW9yZTEKKz4gcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworPiBwCis+IG4KKz4gYiByZXBsCis+IDptb3JlMQorPiBzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCis+IHAKKz4gZworPiBzLy5cezE0OFx9Ly8KKz4gdCBubAorPiA6ZGVsaW0KKz4gaAorPiBzL1woLlx7MTQ4XH1cKS4qL1wxLworPiB0IG1vcmUyCis+IHMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCis+IHAKKz4gYgorPiA6bW9yZTIKKz4gcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworPiBwCis+IGcKKz4gcy8uXHsxNDhcfS8vCis+IHQgZGVsaW0KKz4gJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworPiAvXlteIiJdL3sKKz4gICBOCis+ICAgcy9cbi8vCis+IH0KKz4gJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBybSAtZiBjb25mJCRzdWJzLmF3aworPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gX0FDQVdLCis+IGNhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCis+ICAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKz4gICBGUyA9ICIHIgorPiAKKz4gfQorPiB7Cis+ICAgbGluZSA9ICQgMAorPiAgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorPiAgIHN1YnN0ZWQgPSAwCis+ICAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorPiAgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKz4gICAgIGtleSA9IGZpZWxkW2ldCis+ICAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorPiAgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKz4gICAgICAgdmFsdWUgPSBTW2tleV0KKz4gICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorPiAgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorPiAgICAgICBzdWJzdGVkID0gMQorPiAgICAgfSBlbHNlCis+ICAgICAgIGxlbiArPSAxICsga2V5bGVuCis+ICAgfQorPiAKKz4gICBwcmludCBsaW5lCis+IH0KKz4gCis+IF9BQ0FXSworPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorPiBlbHNlCis+ICAgY2F0Cis+IGZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCis+ICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gX0FDRU9GCis+IAorPiAjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKz4gIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKz4gIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKz4gIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorPiBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorPiAgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworPiBzLzoqXCQoc3JjZGlyKToqLzovCis+IHMvOipcJHtzcmNkaXJ9OiovOi8KKz4gcy86KkBzcmNkaXJAOiovOi8KKz4gcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCis+IHMvOiokLy8KKz4gcy9eW149XSo9WwkgXSokLy8KKz4gfScKKz4gZmkKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorPiAKKz4gIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCis+ICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKz4gIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCis+IGlmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KKz4gY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8Cis+IEJFR0lOIHsKKz4gX0FDRU9GCis+IAorPiAjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworPiAjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCis+ICMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKz4gCis+ICMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKz4gIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorPiBhY19kZWxpbT0nJSFfISMgJworPiBmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKz4gICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKz4gICBpZiB0ZXN0IC16ICIkYWNfdCI7IHRoZW4KKz4gICAgIGJyZWFrCis+ICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKz4gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ2MTgsNDYyMmMxMDA3OCwxMDQ1MQorPCAgICAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCis8ICAgICAgIGFjX2Rpcj1gZWNobyAkYWNfZmlsZXxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCis8ICAgICAgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorPCAgICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorPCAgICAgICB0ZXN0ICEgLWQgIiRhY19kaXIiICYmIG1rZGlyICIkYWNfZGlyIgorLS0tCis+ICAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorPiAgIGZpCis+IGRvbmUKKz4gCis+ICMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorPiAjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKz4gIyBuZXdsaW5lIHNlcXVlbmNlcy4KKz4gCis+IGFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCis+IHNlZCAtbiAnCis+IHMvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZworPiB0IHJzZXQKKz4gOnJzZXQKKz4gcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KKz4gdCBkZWYKKz4gZAorPiA6ZGVmCis+IHMvXFwkLy8KKz4gdCBic25sCis+IHMvWyJcXF0vXFwmL2cKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCis+IERbIlwxIl09IiBcMyIvcAorPiBzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorPiBkCis+IDpic25sCis+IHMvWyJcXF0vXFwmL2cKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCis+IERbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAorPiB0IGNvbnQKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKKz4gdCBjb250Cis+IGQKKz4gOmNvbnQKKz4gbgorPiBzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKKz4gdCBjbGVhcgorPiA6Y2xlYXIKKz4gcy9cXCQvLworPiB0IGJzbmxjCis+IHMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAorPiBkCis+IDpic25sYworPiBzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKKz4gYiBjb250Cis+ICcgPGNvbmZkZWZzLmggfCBzZWQgJworPiBzLyciJGFjX2RlbGltIicvIlxcXAorPiAiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorPiAgIEZTID0gIgciCis+IH0KKz4gL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7Cis+ICAgbGluZSA9IFwkIDAKKz4gICBzcGxpdChsaW5lLCBhcmcsICIgIikKKz4gICBpZiAoYXJnWzFdID09ICIjIikgeworPiAgICAgZGVmdW5kZWYgPSBhcmdbMl0KKz4gICAgIG1hYzEgPSBhcmdbM10KKz4gICB9IGVsc2UgeworPiAgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorPiAgICAgbWFjMSA9IGFyZ1syXQorPiAgIH0KKz4gICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCis+ICAgbWFjcm8gPSBtYWMyWzFdCis+ICAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCis+ICAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworPiAgICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KKz4gICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKz4gICAgIG5leHQKKz4gICB9IGVsc2UgeworPiAgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorPiAgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorPiAgICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCis+ICAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworPiAgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCis+ICAgICAgIG5leHQKKz4gICAgIH0KKz4gICB9Cis+IH0KKz4geyBwcmludCB9Cis+IF9BQ0FXSworPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKz4gCis+IAorPiBldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICAiCis+IHNoaWZ0Cis+IGZvciBhY190YWcKKz4gZG8KKz4gICBjYXNlICRhY190YWcgaW4KKz4gICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKz4gICBlc2FjCis+ICAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKz4gICA6W0ZITF0qOiopOzsKKz4gICA6TCogfCA6Qyo6KikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdGFnICRhY190YWciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgJGFjX3RhZyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICA6W0ZIXS0pIGFjX3RhZz0tOi07OworPiAgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7Cis+ICAgZXNhYworPiAgIGFjX3NhdmVfSUZTPSRJRlMKKz4gICBJRlM9OgorPiAgIHNldCB4ICRhY190YWcKKz4gICBJRlM9JGFjX3NhdmVfSUZTCis+ICAgc2hpZnQKKz4gICBhY19maWxlPSQxCis+ICAgc2hpZnQKKz4gCis+ICAgY2FzZSAkYWNfbW9kZSBpbgorPiAgIDpMKSBhY19zb3VyY2U9JDE7OworPiAgIDpbRkhdKQorPiAgICAgYWNfZmlsZV9pbnB1dHM9Cis+ICAgICBmb3IgYWNfZgorPiAgICAgZG8KKz4gICAgICAgY2FzZSAkYWNfZiBpbgorPiAgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7Cis+ICAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCis+IAkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCis+IAkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKz4gCSB0ZXN0IC1mICIkYWNfZiIgfHwKKz4gCSAgIGNhc2UgJGFjX2YgaW4KKz4gCSAgIFtcXC8kXSopIGZhbHNlOzsKKz4gCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKz4gCSAgIGVzYWMgfHwKKz4gCSAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICAgICAgZXNhYworPiAgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCis+ICAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJyRhY19mJyIKKz4gICAgIGRvbmUKKz4gCis+ICAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorPiAgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorPiAgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKz4gICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKz4gCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCis+IAlgJyBieSBjb25maWd1cmUuJworPiAgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorPiAgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Cis+ICAgICBmaQorPiAgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKz4gICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorPiAgICAgKlwmKiB8ICpcfCogfCAqXFwqICkKKz4gICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorPiAgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCis+ICAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKKz4gICAgIGVzYWMKKz4gCis+ICAgICBjYXNlICRhY190YWcgaW4KKz4gICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCis+ICAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworPiAgICAgZXNhYworPiAgICAgOzsKKz4gICBlc2FjCis+IAorPiAgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorPiAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorPiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCis+IAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorPiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXClbXi9dLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXC9cKSQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXCkuKi97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIHMvLiovLi87IHEnYAorPiAgIHsgYXNfZGlyPSIkYWNfZGlyIgorPiAgIGNhc2UgJGFzX2RpciBpbiAjKAorPiAgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKz4gICBlc2FjCis+ICAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworPiAgICAgYXNfZGlycz0KKz4gICAgIHdoaWxlIDo7IGRvCis+ICAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorPiAgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKz4gICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKz4gICAgICAgZXNhYworPiAgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorPiAgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorPiAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCis+IAkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorPiAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorPiAkYXNfZWNobyBYIiRhc19kaXIiIHwKKz4gICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXCkkL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKz4gICAgIGRvbmUKKz4gICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKz4gICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorPiAgIGFjX2J1aWxkZGlyPS4KKz4gCis+IGNhc2UgIiRhY19kaXIiIGluCis+IC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworPiAqKQorPiAgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCis+ICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorPiAgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorPiAgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKz4gICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Cis+ICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Cis+ICAgZXNhYyA7OworPiBlc2FjCis+IGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorPiBhY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4Cis+ICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Cis+IGFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorPiAKKz4gY2FzZSAkc3JjZGlyIGluCis+ICAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorPiAgICAgYWNfc3JjZGlyPS4KKz4gICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKz4gICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKz4gICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCis+ICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworPiAgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCis+ICAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Cis+ICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorPiAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Cis+ICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorPiAgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Cis+IGVzYWMKKz4gYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorPiAKKz4gCis+ICAgY2FzZSAkYWNfbW9kZSBpbgorPiAgIDpGKQorPiAgICMKKz4gICAjIENPTkZJR19GSUxFCis+ICAgIworPiAKKz4gICBjYXNlICRJTlNUQUxMIGluCis+ICAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworPiAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworPiAgIGVzYWMKKz4gX0FDRU9GCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+ICMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKz4gIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCis+IGFjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorPiAKKz4gYWNfc2VkX2RhdGFyb290PScKKz4gL2RhdGFyb290ZGlyLyB7Cis+ICAgcAorPiAgIHEKKz4gfQorPiAvQGRhdGFkaXJAL3AKKz4gL0Bkb2NkaXJAL3AKKz4gL0BpbmZvZGlyQC9wCis+IC9AbG9jYWxlZGlyQC9wCis+IC9AbWFuZGlyQC9wCis+ICcKKz4gY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorPiAqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7Cis+ICpAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9Cis+IF9BQ0VPRgorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKz4gICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCis+ICAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKz4gICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCis+ICAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKz4gICBzJkBtYW5kaXJAJiRtYW5kaXImZworPiAgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKz4gZXNhYworPiBfQUNFT0YKKz4gCis+ICMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKz4gIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCis+ICMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+IGFjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCis+ICRleHRyYXN1YgorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiA6dAorPiAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCis+IHN8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKKz4gcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0Cis+IHMmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKKz4gcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKKz4gcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorPiBzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0Cis+IHMmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorPiBzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKz4gcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKKz4gcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorPiBzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0Cis+ICRhY19kYXRhcm9vdGRpcl9oYWNrCis+ICIKKz4gZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKz4gICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gCis+IHRlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCis+ICAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKz4gICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCis+IHdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKz4gd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiYyO30KKz4gCis+ICAgcm0gLWYgIiR0bXAvc3RkaW4iCis+ICAgY2FzZSAkYWNfZmlsZSBpbgorPiAgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworPiAgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKz4gICBlc2FjIFwKKz4gICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gIDs7Cis+ICAgOkgpCis+ICAgIworPiAgICMgQ09ORklHX0hFQURFUgorPiAgICMKKz4gICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCis+ICAgICB7Cis+ICAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorPiAgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKz4gICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCis+ICAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKz4gICAgIGVsc2UKKz4gICAgICAgcm0gLWYgIiRhY19maWxlIgorPiAgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCis+IAl8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ2MjQsNDYyNWMxMDQ1MywxMDQ1OAorPCAgICAgcm0gLWYgJGFjX2ZpbGUKKzwgICAgIG12IGNvbmZ0ZXN0LmggJGFjX2ZpbGUKKy0tLQorPiAgIGVsc2UKKz4gICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorPiAgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorPiAgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAtIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgLSIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0NjI3YzEwNDYwLDEwNDYxCis8IGZpOyBkb25lCistLS0KKz4gIDs7Cis+IAorNDYyOSw0NjMwYzEwNDYzLDEwNDY1Cis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKy0tLQorPiAgIGVzYWMKKz4gCis+IGRvbmUgIyBmb3IgYWNfdGFnCis0NjMyLDQ2MzNkMTA0NjYKKzwgRU9GCis8IGNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKzQ2MzUsNDYzNmMxMDQ2OCwxMDQ2OQorPCBleGl0IDAKKzwgRU9GCistLS0KKz4geyAoZXhpdCAwKTsgZXhpdCAwOyB9Cis+IF9BQ0VPRgorNDYzOCw0NjM5YzEwNDcxLDEwNTAyCis8IHJtIC1mciBjb25mZGVmcyogJGFjX2NsZWFuX2ZpbGVzCis8IHRlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorLS0tCis+IGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCis+IAorPiB0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHdyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gCis+ICMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKz4gIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCis+ICMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCis+ICMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworPiAjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorPiAjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCis+ICMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorPiAjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorPiBpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKz4gICBhY19jc19zdWNjZXNzPToKKz4gICBhY19jb25maWdfc3RhdHVzX2FyZ3M9Cis+ICAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKz4gICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorPiAgIGV4ZWMgNT4vZGV2L251bGwKKz4gICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCis+ICAgZXhlYyA1Pj5jb25maWcubG9nCis+ICAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKz4gICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKz4gICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKz4gZmkKKz4gaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9Cis+IGZpCmRpZmYgLS1naXQgYS9tdWx0aS9jL3BhdGNoLzNfNF8xIGIvbXVsdGkvYy9wYXRjaC8zXzRfMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZlZDJiCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9wYXRjaC8zXzRfMQpAQCAtMCwwICsxLDE3IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitPbmx5IGluIDNfMC9pY3Uvc291cmNlOiBiaW4KK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmRlZnMuaAorZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luIDNfMC9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4KKy0tLSAzXzAub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4JMjAwOC0xMC0yMCAxNDo1Nzo1Mi4wMDAwMDAwMDAgLTA3MDAKKysrKyAzXzAvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luCTIwMDgtMTAtMjAgMTU6NTc6MjguMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNiArMTUsOCBAQAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKyBHRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisgR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobworK0dFTl9ERVBTLmNjPQllY2hvCisgCisgIyMgQ29tbWFuZHMgdG8gY29tcGlsZQorIENPTVBJTEUuYz0JJChDQykgJChERUZTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWZuby1jb21tb24gLWMKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmNhY2hlCitPbmx5IGluIDNfMC5vcmlnL2ljdS9zb3VyY2U6IGNvbmZpZy5sb2cKZGlmZiAtLWdpdCBhL211bHRpL2MvcGF0Y2gvcmVhZG1lLnR4dCBiL211bHRpL2MvcGF0Y2gvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTkyMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9wYXRjaC9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2NhdAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKworQ29udGFpbnMgSUNVNEMgcGF0Y2hlcyB0byBtYWtlIG9sZCB2ZXJzaW9ucyBidWlsZC4KZGlmZiAtLWdpdCBhL211bHRpL2Mvc3VwZXJjb25mLnNoIGIvbXVsdGkvYy9zdXBlcmNvbmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmM5NGIzMAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2Mvc3VwZXJjb25mLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgU2FtcGxlICJzdXBlciBjb25maWd1cmUiIAorIyB0aGlzIHNjcmlwdCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgSUNVLgorCisjIGlucHV0IHZhcmlhYmxlczsKKyMgJElDVV9WRVIgIC0gdGhlIElDVSB2ZXJzaW9uIGluIHVuZGVyc2NvcmUgZm9ybWF0ICg0XzJfMF8xKQorCitJQ1VfU1JDPSIkMSIKK0lDVV9WRVI9IiQyIgorCitVX0hPU1Q9YGhvc3RuYW1lYAorVV9TWVM9YHVuYW1lIHx8IGVjaG8gdW5rbm93bmAKKyNlY2hvICRIT1NUCisKK2V4cG9ydCByY3M9bm9uZQorCitjYXNlICRVX1NZUyBpbgorCUFJWCkKKwkJIyB0aGUgcHJlZmVycmVkICdBSVgnIHR5cGUgdG8gdXNlCisJCUFJWD1BSVgKKwkJY2FzZSAkSUNVX1ZFUiBpbiAKKwkJNCopCisJCQkjQUlYPUFJWDQuM1ZBCisJCQlBSVg9QUlYCisJCQk7OworCQkqKQorCQkJQUlYPUFJWDQuM1ZBCisJCQk7OworCSAgICAgICAgMSp8Mip8M18wKnwzXzEqKQorCQkJQUlYPUFJWDQuM3hsQworCQkJUEFUSD0vdXNyL3ZhY3BwL2Jpbi86JFBBVEgKKwkJCTs7CisJCWVzYWMKKwkJcmNzPSR7QUlYfQorCQk7OworCSopCisJCXJjcz1ub25lCisJCTs7Citlc2FjCisKKworCitjYXNlICRIT1NUIGluCisgICAgICAgIHN5czk4KikKKyAgICAgICAgICAgICAgICByY3M9JEFJWAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGhwKikKKyAgICAgICAgICAgICAgICByY3M9J0hQLVVYL0FDQycKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBtZXJpbGwqfHJlZGhhdCp8c3VubGlnaHQqKQorICAgICAgICAgICAgICAgIHJjcz0nTGludXhSZWRIYXQnCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKwkJZWNobyBzaCAke0lDVV9TUkN9L2NvbmZpZ3VyZQorICAgICAgICAgICAgICAgICNlY2hvIFVua25vd24gaG9zdCAkSE9TVCwgZWRpdCAkMAorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7Citlc2FjCisKK2VjaG8gc2ggJHtJQ1VfU1JDfS9ydW5Db25maWd1cmVJQ1UgIiR7cmNzfSIKKworCisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvY29tbW9uL01ha2VmaWxlLW11bHRpLmluYyBiL211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzYzE2NQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitDX1JPT1Q9JChNVUxUSUNVX1JPT1QpL2MKK0pfUk9PVD0kKE1VTFRJQ1VfUk9PVCkvagorTV9UTVA9JChNVUxUSUNVX1JPT1QpL3RtcAorQ19JTlM9JChNX1RNUCkvaW5zCitDX0JMRD0kKE1fVE1QKS9idWlsZAorQ19TUkM9JChNX1RNUCkvc3JjCisKKyMgQyBkZWZzCitTX0lOUz1pbmNsdWRlL3VuaWNvZGUvdXR5cGVzLmgKK1NfU1JDRElSPWljdS9zb3VyY2UKK1NfQkxEPSQoU19TUkNESVIpL2NvbmZpZy5zdGF0dXMKK1NfU1JDPSQoU19TUkNESVIpL2NvbmZpZ3VyZQorCistaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvY29tbW9uL01ha2VmaWxlLWxvY2FsLmluYworCitJQ1VTPSQoTVVMVElDVV9ST09UKS9wYWNrYWdlcworCitUT1A9JChzaGVsbCBwd2QpCisKKyMgSiBkZWZzCmRpZmYgLS1naXQgYS9tdWx0aS9qL01ha2VmaWxlLWouaW5jIGIvbXVsdGkvai9NYWtlZmlsZS1qLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTIyNzVhCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvai9NYWtlZmlsZS1qLmluYwpAQCAtMCwwICsxLDggQEAKKyMgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAoraW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvY29tbW9uL01ha2VmaWxlLW11bHRpLmluYworSUNVUz0kKE1VTFRJQ1VfUk9PVCkvcGFja2FnZXMKK0pfR09PRDo9JChzaGVsbCBbIC1kICQoSUNVUykgXSAmJiAoY2QgJChJQ1VTKSA7ICBscyAtZCBpY3U0ai0qLmphciB8IGN1dCAtZC0gLWYyIHwgY3V0IC1kLiAtZjEpKQorI0pfR09PRD0kKElDVTRKVkVSUzolPSQoSUNVUykvaWN1NGotJS5qYXIpCisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvai9qdm0vYWRkamF2YS5zaCBiL211bHRpL2ovanZtL2FkZGphdmEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTAyMjcwYgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2ovanZtL2FkZGphdmEuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOC0yMDEzIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitpZiBbICEgLXggJDEgXTsKK3RoZW4KKwllY2hvIHVzYWdlOiAkMCBwYXRoL3RvL2Jpbi9qYXZhCisJZXhpdCAxCitmaQorCitpZiAhICQxIC12ZXJzaW9uID4gL2Rldi9udWxsIDsKK3RoZW4KKwllY2hvIGNvdWxkIG5vdCBydW4gJDEKKwlleGl0IDIKK2ZpCisKK2lmICEgKCAkMSAtdmVyc2lvbiAyPiYxIHwgZ3JlcCAtcSAiamF2YSB2ZXJzaW9uIiApOwordGhlbgorCWVjaG8gY291bGQgbm90IGdldCBqYXZhIHZlcnNpb24gZnJvbSAkMQorCWV4aXQgMworZmkKKworVkVSPWAkMSAtdmVyc2lvbiAyPiYxIHwgZ3JlcCAiamF2YSB2ZXJzaW9uIiB8IGhlYWQgLTEgfCBzZWQgLWUgJ3MlXmphdmEgdmVyc2lvbiAiXChbXiJdKlwpXCIuKiQlXDElJ2AKK1ZFUkQ9YGVjaG8gJFZFUiB8IHRyIC4gX2AKKworZWNobyAkMSA9ICRWRVIgLyAkVkVSRAorCitGSUxFPSIkVkVSRC5zaCIKKworaWYgWyAtZiAkRklMRSBdOwordGhlbgorCUZJTEU9IiR7VkVSRH1fJCQuc2giCisJZWNobyAiJFZFUkQuc2ggZXhpc3RlZCwgcmVuYW1pbmcgdG8gJEZJTEUgLSByZW5hbWUgdG8gc29tZXRoaW5nIHNhbmUgaWYgeW91IHdhbnQiCitmaQorCitKSE9NRT1gZGlybmFtZSAkMWAKK0pIT01FPWBkaXJuYW1lICRKSE9NRWAKKworZWNobyAiIyEvYmluL3NoIiA+ICRGSUxFCitlY2hvICIjIGF1dG8gZ2VuZXJhdGVkIGZvciAkVkVSIGZyb20gJDEgLyBhZGRqYXZhLnNoIiA+PiAkRklMRQorZWNobyAiSkFWQV9IT01FPSRKSE9NRSIgPj4gJEZJTEUKK2VjaG8gPj4gJEZJTEUKK2VjaG8gPj4gJEZJTEUKKyQxIC12ZXJzaW9uIDI+JjEgfCBzZWQgLWUgJ3MlXiUjJScgPj4gJEZJTEUKKworY2htb2QgYStyeCAkRklMRQorCitlY2hvIAorZWNobyAiQ3JlYXRlZDogJEZJTEUiCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvai9qdm0vY2xlYW4uc2ggYi9tdWx0aS9qL2p2bS9jbGVhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOTg2MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvai9qdm0vY2xlYW4uc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTMgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKK3NldCAteAorcm0gKi5qdm0uc2gKZGlmZiAtLWdpdCBhL211bHRpL2ovanZtL2RldGVjdC1tYWMuc2ggYi9tdWx0aS9qL2p2bS9kZXRlY3QtbWFjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyYjQ2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9qL2p2bS9kZXRlY3QtbWFjLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMyBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorVkVSPS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0phdmFWTS5mcmFtZXdvcmsvVmVyc2lvbnMKK2lmIFsgISAtZCAiJHtWRVJ9IiBdOwordGhlbgorCWVjaG8gZXJyLCBjYW50IGZpbmQgJHtWRVJ9ICAgLSBhcmUgeW91IHJlYWxseSBvbiBhIG1hYz8KKwlleGl0IDEKK2ZpCisKK1ZFUlM9YGNkICR7VkVSfTtscyAtZCBbMC05XSpgCisKK2ZvciBhdmVyIGluICR7VkVSU307CitkbworCWlmIFsgISAteCAke1ZFUn0vJHthdmVyfS9Ib21lL2Jpbi9qYXZhIF07IHRoZW4KKwkJY29udGludWUKKwlmaQorCWlmICEgJHtWRVJ9LyR7YXZlcn0vSG9tZS9iaW4vamF2YSAtdmVyc2lvbiAyPiAvZGV2L251bGw7IHRoZW4KKwkJY29udGludWUKKwlmaQorCVZFUk5VTT1gZWNobyAiJHthdmVyfSIgfCB0ciAnLicgJ18nYAorCUY9JHtWRVJOVU19Lmp2bS5zaAorCWVjaG8gIiMgJHtGfSBmcm9tICR7VkVSfS8ke2F2ZXJ9IgorCWNhdCA+ICR7Rn0gPDxFT0YKK0pBVkFfSE9NRT0ke1ZFUn0vJHthdmVyfS9Ib21lCitFT0YKKwljaG1vZCBhK3J4ICR7Rn0KKwkKKwlpZiAhIC4vdGVzdC5zaCAke0Z9OyB0aGVuCQorCQlybSAke0Z9CisJCWVjaG8gIiMgRGVsZXRlZDogJHtGfSBkdWUgdG8gZmFpbHVyZSIKKwlmaQorZG9uZQpkaWZmIC0tZ2l0IGEvbXVsdGkvai9qdm0vaW52b2tlLnNoIGIvbXVsdGkvai9qdm0vaW52b2tlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxNDc1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9qL2p2bS9pbnZva2Uuc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOC0yMDEzIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitpZiBbICEgLXggJHsxfSBdOwordGhlbgorCWVjaG8gY291bGQgbm90IGV4ZWMgJHsxfQorCWVjaG8gdXNhZ2U6ICR7MH0gc29tZXRoaW5nLmp2bS5zaCAgYmxhaAorCWV4aXQgMQorZmkKKyNKQVZBX0hPTUU9L3NvbWV3aGVyZS8xXzYKK0pBVkE9amF2YQorI0NMQVNTUEFUSD1mb28vYmFyLmphcjovYmF6CisjVk1fT1BUUz0tWG14MjY1CisKKy4gIiR7MX0iCisKKworc2V0IC14Ciske0pBVkFfSE9NRX0vYmluLyR7SkFWQX0gJHtWTV9PUFRTfSAtY2xhc3NwYXRoICR7Q0xBU1NQQVRIfTokezJ9ICR7M30KZGlmZiAtLWdpdCBhL211bHRpL2ovanZtL3JlYWRtZS50eHQgYi9tdWx0aS9qL2p2bS9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTIzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9qL2p2bS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTMgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworUHV0ICcuc2gnIGZpbGVzIGluIHRoaXMgZGlyICwgbG9jYWxseSwgdG8gYmUgdXNlZCBmb3IgSmF2YSB2ZXJzaW9uIGJyaW5ndXAKK1NlZSBhZGRqYXZhIGJlbG93CisKK2V4OiAgJzFfNi5zaCcKKy0tLS0tLQorSkFWQV9IT01FPS9zb21ld2hlcmUvMV82CisjSkFWQT1qYXZhCisjQ0xBU1NQQVRIPWZvby9iYXIuamFyOi9iYXoKKyNWTV9PUFRTPS1YbXgyNjUKKy0tLS0tCisKKworWW91IGNhbiB1c2UgdGhlIGFkZGphdmEuc2ggdG9vbCwgbGlrZSB0aGlzIC0gZ2l2ZSBpdCB0aGUgZnVsbCBwYXRoIHRvICdqYXZhJzoKKworICQgICAgYWRkamF2YS5zaCAgL29wdC9JQk0tSkRLLTEuNS9iaW4vamF2YQorIENyZWF0ZWQgIDFfNS5zaAorCitJRiAxXzUuc2ggYWxyZWRheSBleGlzdHMsIGEgcmFuZG9tIG51bWJlciB3aWxsIGJlIGFkZGVkIHRvIHRoZSBuYW1lIG9mIHRoZSBuZXcgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvbXVsdGkvai9qdm0vdGVzdC5zaCBiL211bHRpL2ovanZtL3Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I5YjIxNwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2ovanZtL3Rlc3Quc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOC0yMDEzIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitpZiBbICEgLXggJHsxfSBdOwordGhlbgorCWVjaG8gY291bGQgbm90IGV4ZWMgJHsxfQorCWVjaG8gdXNhZ2U6ICR7MH0gc29tZXRoaW5nLnNoCisJZXhpdCAxCitmaQorc2V0IC14CisuICIkezF9IgorCiske0pBVkFfSE9NRX0vYmluL2phdmEgLXZlcnNpb24gMj4vZGV2L251bGwKZGlmZiAtLWdpdCBhL211bHRpL2ovb2xkLWljdTRqLnR4dCBiL211bHRpL2ovb2xkLWljdTRqLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY3ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvai9vbGQtaWN1NGoudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgYSBsaXN0IG9mIElDVTRDcyB0b28gb2xkIHRvIGJ1aWxkIHdpdGggdGhlIGN1cnJlbnQgcGF0Y2hzZXQuCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby9NYWtlZmlsZSBiL211bHRpL3Byb2ovY2hlbGxvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDU0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2NoZWxsby9NYWtlZmlsZQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjIE1ha2VmaWxlIGZvciBtdWx0aWN1L3NhbXBsZS9jaGVsbG8KKyMgQy9DKysgaGVsbG8KKworIyMgTmFtZSBvZiB0aGUgYXBwCitUQVJHRVQ9Y2hlbGxvCisKKyMjIFNvdXJjZXMgbGlzdCAoQyBhbmQgQysrIGp1c3QgdG8gYmUgZGlmZmljdWx0KQorQ19TT1VSQ0VTPWRhdGUuYworQ1hYX1NPVVJDRVM9dXByaW50LmNwcAorU1JDUz0kKENfU09VUkNFUykgJChDWFhfU09VUkNFUykKK0hFQURFUlM9dXByaW50LmgKKworYWxsOgorCUBlY2hvIFRvIGJ1aWxkIGFuZCBsaXN0ICInIiAkKE9VVEZJTEVTKSAiJyIgIGluICInIiAkKENfR09PRCkgIiciIHVzZSAiJChNQUtFKSBjaGVjayIKKworIyMgU2V0dXAgbXVsdGljdQorTVVMVElDVV9ST09UPS4uLy4uLworaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvYy9NYWtlZmlsZS1jLmluYworCitPVVQ9b3V0CisKKyQoT1VUKToKKwlta2RpciAkKE9VVCkKKworIyMgVGhlIG91dHB1dCBmaWxlcy4gIFdpbGwgcmVzdWx0IGluOiAgIG91dC8zXzgudHh0ICBvdXQvNF8wLnR4dCAgZXRjLgorT1VURklMRVM9JChDX0dPT0Q6JT0kKE9VVCkvJS50eHQpCisKKy5QUkVDSU9VUzogJChDX0NMRUFOX1RBUkdFVCkKKworIyMgR2VuZXJhdGUgYSBmaWxlCiskKE9VVCkvJS50eHQ6ICQoT1VUKSAkKENfSU5TKS8lL2Jpbi8kKFRBUkdFVCkKKwkkKHNoZWxsICQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0taW52b2tlKSAkKENfSU5TKS8kKi9iaW4vJChUQVJHRVQpICA+ICRACisKKyMjIGNsZWFuCitjbGVhbjoKKwktcm0gLWYgJChDX0NMRUFOX1RBUkdFVCkKKwktcm0gLWYgLi8kKE9VVCkvKgorCS1ybWRpciAkKE9VVCkKKworIyMgSnVzdCBnZW5lcmF0ZQorb3V0ZmlsZXM6ICQoT1VURklMRVMpCisKKyMjIFRlc3Q6IGdlbmVyYXRlIG91dCBmaWxlcywgYW5kIHByaW50IHRoZW0uCitjaGVjazogJChPVVRGSUxFUykKKwlAZm9yIGZpbGUgaW4gJChPVVRGSUxFUyk7IFwKKwlkbyBcCisJCWVjaG87IFwKKwkJc2VkIC1lICJzJV4lJCRmaWxlOiAlZyIgPCAkJGZpbGU7IFwKKwlkb25lCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovY2hlbGxvL2RhdGUuYyBiL211bHRpL3Byb2ovY2hlbGxvL2RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI0YTJhCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9jaGVsbG8vZGF0ZS5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgZGF0ZS5jCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDYvMTEvOTkgICAgc3RlcGhlbiAgICAgQ3JlYXRpb24uCisqICAgMDYvMTYvOTkgICAgc3RlcGhlbiAgICAgTW9kaWZpZWQgdG8gdXNlIHVwcmludC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbGVhbi5oIgorCisjaW5jbHVkZSAidW5pY29kZS91Y252LmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0LmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2FsLmgiCisKKyNpbmNsdWRlICJ1cHJpbnQuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworI2lmIFVDT05GSUdfTk9fRk9STUFUVElORworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHByaW50ZigiJXM6IFNvcnJ5LCBVQ09ORklHX05PX0ZPUk1BVFRJTkcgd2FzIHR1cm5lZCBvbiAoc2VlIHVjb25maWcuaCkuIE5vIGZvcm1hdHRpbmcgY2FuIGJlIGRvbmUuIFxuIiwgYXJndlswXSk7CisgIHJldHVybiAwOworfQorI2Vsc2UKKworCisvKiBQcm90b3MgKi8KK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOworc3RhdGljIHZvaWQgdmVyc2lvbih2b2lkKTsKK3N0YXRpYyB2b2lkIGRhdGUoY29uc3QgVUNoYXIgKnR6LCBVRGF0ZUZvcm1hdFN0eWxlIHN0eWxlLCBjaGFyICpmb3JtYXQsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyogVGhlIHZlcnNpb24gb2YgZGF0ZSAqLworI2RlZmluZSBEQVRFX1ZFUlNJT04gIjEuMCIKKworLyogIkdNVCIgKi8KK3N0YXRpYyBjb25zdCBVQ2hhciBHTVRfSUQgW10gPSB7IDB4MDA0NywgMHgwMDRkLCAweDAwNTQsIDB4MDAwMCB9OworCisKK2ludAorbWFpbihpbnQgYXJnYywKKyAgICAgY2hhciAqKmFyZ3YpCit7CisgIGludCBwcmludFVzYWdlID0gMDsKKyAgaW50IHByaW50VmVyc2lvbiA9IDA7CisgIGludCBvcHRpbmQgPSAxOworICBjaGFyICphcmc7CisgIGNvbnN0IFVDaGFyICp0eiA9IDA7CisgIFVEYXRlRm9ybWF0U3R5bGUgc3R5bGUgPSBVREFUX0RFRkFVTFQ7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBjaGFyICpmb3JtYXQgPSBOVUxMOworCisKKyAgLyogcGFyc2UgdGhlIG9wdGlvbnMgKi8KKyAgZm9yKG9wdGluZCA9IDE7IG9wdGluZCA8IGFyZ2M7ICsrb3B0aW5kKSB7CisgICAgYXJnID0gYXJndltvcHRpbmRdOworICAgIAorICAgIC8qIHZlcnNpb24gaW5mbyAqLworICAgIGlmKHN0cmNtcChhcmcsICItdiIpID09IDAgfHwgc3RyY21wKGFyZywgIi0tdmVyc2lvbiIpID09IDApIHsKKyAgICAgIHByaW50VmVyc2lvbiA9IDE7CisgICAgfQorICAgIC8qIHVzYWdlIGluZm8gKi8KKyAgICBlbHNlIGlmKHN0cmNtcChhcmcsICItaCIpID09IDAgfHwgc3RyY21wKGFyZywgIi0taGVscCIpID09IDApIHsKKyAgICAgIHByaW50VXNhZ2UgPSAxOworICAgIH0KKyAgICAvKiBkaXNwbGF5IGRhdGUgaW4gZ210ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLXUiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWdtdCIpID09IDApIHsKKyAgICAgIHR6ID0gR01UX0lEOworICAgIH0KKyAgICAvKiBkaXNwbGF5IGRhdGUgaW4gZ210ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLWYiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWZ1bGwiKSA9PSAwKSB7CisgICAgICBzdHlsZSA9IFVEQVRfRlVMTDsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIGxvbmcgZm9ybWF0ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLWwiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWxvbmciKSA9PSAwKSB7CisgICAgICBzdHlsZSA9IFVEQVRfTE9ORzsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIG1lZGl1bSBmb3JtYXQgKi8KKyAgICBlbHNlIGlmKHN0cmNtcChhcmcsICItbSIpID09IDAgfHwgc3RyY21wKGFyZywgIi0tbWVkaXVtIikgPT0gMCkgeworICAgICAgc3R5bGUgPSBVREFUX01FRElVTTsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIHNob3J0IGZvcm1hdCAqLworICAgIGVsc2UgaWYoc3RyY21wKGFyZywgIi1zIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAiLS1zaG9ydCIpID09IDApIHsKKyAgICAgIHN0eWxlID0gVURBVF9TSE9SVDsKKyAgICB9CisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLUYiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWZvcm1hdCIpID09IDApIHsKKyAgICAgIGlmICggb3B0aW5kICsgMSA8IGFyZ2MgKSB7IAorICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICBmb3JtYXQgPSBhcmd2W29wdGluZF07CisgICAgICB9CisgICAgfQorICAgIC8qIFBPU0lYLjEgc2F5cyBhbGwgYXJndW1lbnRzIGFmdGVyIC0tIGFyZSBub3Qgb3B0aW9ucyAqLworICAgIGVsc2UgaWYoc3RyY21wKGFyZywgIi0tIikgPT0gMCkgeworICAgICAgLyogc2tpcCB0aGUgLS0gKi8KKyAgICAgICsrb3B0aW5kOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHVucmVjb2duaXplZCBvcHRpb24gKi8KKyAgICBlbHNlIGlmKHN0cm5jbXAoYXJnLCAiLSIsIHN0cmxlbigiLSIpKSA9PSAwKSB7CisgICAgICBwcmludGYoImljdWRhdGU6IGludmFsaWQgb3B0aW9uIC0tICVzXG4iLCBhcmcrMSk7CisgICAgICBwcmludFVzYWdlID0gMTsKKyAgICB9CisgICAgLyogZG9uZSB3aXRoIG9wdGlvbnMsIGRpc3BsYXkgZGF0ZSAqLworICAgIGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogcHJpbnQgdXNhZ2UgaW5mbyAqLworICBpZihwcmludFVzYWdlKSB7CisgICAgdXNhZ2UoKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIHByaW50IHZlcnNpb24gaW5mbyAqLworICBpZihwcmludFZlcnNpb24pIHsKKyAgICB2ZXJzaW9uKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBwcmludCB0aGUgZGF0ZSAqLworICBkYXRlKHR6LCBzdHlsZSwgZm9ybWF0LCAmc3RhdHVzKTsKKworICB1X2NsZWFudXAoKTsKKyAgcmV0dXJuIChVX0ZBSUxVUkUoc3RhdHVzKSA/IDEgOiAwKTsKK30KKworLyogVXNhZ2UgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyB2b2lkCit1c2FnZSgpCit7ICAKKyAgcHV0cygiVXNhZ2U6IGljdWRhdGUgW09QVElPTlNdIik7CisgIHB1dHMoIk9wdGlvbnM6Iik7CisgIHB1dHMoIiAgLWgsIC0taGVscCAgICAgICAgUHJpbnQgdGhpcyBtZXNzYWdlIGFuZCBleGl0LiIpOworICBwdXRzKCIgIC12LCAtLXZlcnNpb24gICAgIFByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBkYXRlIGFuZCBleGl0LiIpOworICBwdXRzKCIgIC11LCAtLWdtdCAgICAgICAgIERpc3BsYXkgdGhlIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZS4iKTsKKyAgcHV0cygiICAtZiwgLS1mdWxsICAgICAgICBVc2UgZnVsbCBkaXNwbGF5IGZvcm1hdC4iKTsKKyAgcHV0cygiICAtbCwgLS1sb25nICAgICAgICBVc2UgbG9uZyBkaXNwbGF5IGZvcm1hdC4iKTsKKyAgcHV0cygiICAtbSwgLS1tZWRpdW0gICAgICBVc2UgbWVkaXVtIGRpc3BsYXkgZm9ybWF0LiIpOworICBwdXRzKCIgIC1zLCAtLXNob3J0ICAgICAgIFVzZSBzaG9ydCBkaXNwbGF5IGZvcm1hdC4iKTsKK30KKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworc3RhdGljIHZvaWQKK3ZlcnNpb24oKQoreworICBwcmludGYoImljdWRhdGUgdmVyc2lvbiAlcyAoSUNVIHZlcnNpb24gJXMpLCBjcmVhdGVkIGJ5IFN0ZXBoZW4gRi4gQm9vdGguXG4iLCAKKwkgREFURV9WRVJTSU9OLCBVX0lDVV9WRVJTSU9OKTsKKyAgcHV0cyhVX0NPUFlSSUdIVF9TVFJJTkcpOworfQorCisvKiBGb3JtYXQgdGhlIGRhdGUgKi8KK3N0YXRpYyB2b2lkCitkYXRlKGNvbnN0IFVDaGFyICp0eiwKKyAgICAgVURhdGVGb3JtYXRTdHlsZSBzdHlsZSwKKyAgICAgY2hhciAqZm9ybWF0LAorICAgICBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIFVDaGFyICpzID0gMDsKKyAgaW50MzJfdCBsZW4gPSAwOworICBVRGF0ZUZvcm1hdCAqZm10OworICBVQ2hhciB1Rm9ybWF0WzEwMF07CisKKyAgZm10ID0gdWRhdF9vcGVuKHN0eWxlLCBzdHlsZSwgMCwgdHosIC0xLE5VTEwsMCwgc3RhdHVzKTsKKyAgaWYgKCBmb3JtYXQgIT0gTlVMTCApIHsKKyAgICAgdV9jaGFyc1RvVUNoYXJzKGZvcm1hdCx1Rm9ybWF0LHN0cmxlbihmb3JtYXQpKSwKKyAgICAgdWRhdF9hcHBseVBhdHRlcm4oZm10LEZBTFNFLHVGb3JtYXQsc3RybGVuKGZvcm1hdCkpOworICB9CisgIGxlbiA9IHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgMCwgbGVuLCAwLCBzdGF0dXMpOworICBpZigqc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKSB7CisgICAgKnN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBzID0gKFVDaGFyKikgbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobGVuKzEpKTsKKyAgICBpZihzID09IDApIGdvdG8gZmluaXNoOworICAgIHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgcywgbGVuICsgMSwgMCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIGdvdG8gZmluaXNoOworICB9CisKKyAgLyogcHJpbnQgdGhlIGRhdGUgc3RyaW5nICovCisgIHVwcmludChzLCBzdGRvdXQsIHN0YXR1cyk7CisKKyAgLyogcHJpbnQgYSB0cmFpbGluZyBuZXdsaW5lICovCisgIHByaW50ZigiIEAgSUNVICIgVV9JQ1VfVkVSU0lPTiAiXG4iKTsKKworIGZpbmlzaDoKKyAgdWRhdF9jbG9zZShmbXQpOworICBmcmVlKHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuY3BwIGIvbXVsdGkvcHJvai9jaGVsbG8vdXByaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdkZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9jaGVsbG8vdXByaW50LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorKiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnQuY3BwCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKglEYXRlCQlOYW1lCQlEZXNjcmlwdGlvbgorKgkwNi8xNC85OQlzdGVwaGVuIAlDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICJ1cHJpbnQuaCIKKworI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorCisjZGVmaW5lIEJVRl9TSVpFIDEyOAorCisvKiBQcmludCBhIHVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBGSUxFKiBpbiB0aGUgZGVmYXVsdCBjb2RlcGFnZSAqLworVV9DQVBJIHZvaWQKK3VwcmludChjb25zdCBVQ2hhciAqcywKKwkgICBGSUxFICpmLAorCSAgIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKyAgLyogY29udmVydGVyICovCisgIFVDb252ZXJ0ZXIgKmNvbnZlcnRlcjsKKyAgY2hhciBidWYgW0JVRl9TSVpFXTsKKyAgaW50MzJfdCBzb3VyY2VMZW47CisgIGNvbnN0IFVDaGFyICpteVNvdXJjZTsKKyAgY29uc3QgVUNoYXIgKm15U291cmNlRW5kOworICBjaGFyICpteVRhcmdldDsKKyAgaW50MzJfdCBhcnJheVNpemU7CisKKyAgaWYocyA9PSAwKSByZXR1cm47CisKKyAgLyogc2V0IHVwIHRoZSBjb252ZXJzaW9uIHBhcmFtZXRlcnMgKi8KKyAgc291cmNlTGVuICAgID0gdV9zdHJsZW4ocyk7CisgIG15U291cmNlCSAgID0gczsKKyAgbXlTb3VyY2VFbmQgID0gbXlTb3VyY2UgKyBzb3VyY2VMZW47CisgIG15VGFyZ2V0CSAgID0gYnVmOworICBhcnJheVNpemUgICAgPSBCVUZfU0laRTsKKworICAvKiBvcGVuIGEgZGVmYXVsdCBjb252ZXJ0ZXIgKi8KKyAgY29udmVydGVyID0gdWNudl9vcGVuKDAsIHN0YXR1cyk7CisgIAorICAvKiBpZiB3ZSBmYWlsZWQsIGNsZWFuIHVwIGFuZCBleGl0ICovCisgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgZ290byBmaW5pc2g7CisgIAorICAvKiBwZXJmb3JtIHRoZSBjb252ZXJzaW9uICovCisgIGRvIHsKKwkvKiByZXNldCB0aGUgZXJyb3IgY29kZSAqLworCSpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisKKwkvKiBwZXJmb3JtIHRoZSBjb252ZXJzaW9uICovCisJdWNudl9mcm9tVW5pY29kZShjb252ZXJ0ZXIsICZteVRhcmdldCwJbXlUYXJnZXQgKyBhcnJheVNpemUsCisJCQkgJm15U291cmNlLCBteVNvdXJjZUVuZCwgTlVMTCwKKwkJCSBUUlVFLCBzdGF0dXMpOworCisJLyogV3JpdGUgdGhlIGNvbnZlcnRlZCBkYXRhIHRvIHRoZSBGSUxFKiAqLworCWZ3cml0ZShidWYsIHNpemVvZihjaGFyKSwgbXlUYXJnZXQgLSBidWYsIGYpOworCisJLyogdXBkYXRlIHRoZSBjb252ZXJzaW9uIHBhcmFtZXRlcnMqLworCW15VGFyZ2V0CSA9IGJ1ZjsKKwlhcnJheVNpemUJID0gQlVGX1NJWkU7CisgIH0KKyAgd2hpbGUoKnN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7IAorCisgZmluaXNoOgorICAKKyAgLyogY2xvc2UgdGhlIGNvbnZlcnRlciAqLworICB1Y252X2Nsb3NlKGNvbnZlcnRlcik7Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuaCBiL211bHRpL3Byb2ovY2hlbGxvL3VwcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuaApAQCAtMCwwICsxLDI2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorKiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnQuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA2LzE0Lzk5ICAgIHN0ZXBoZW4gICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBVUFJJTlRfSAorI2RlZmluZSBVUFJJTlRfSCAxCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworLyogUHJpbnQgYSB1c3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgRklMRSogaW4gdGhlIGRlZmF1bHQgY29kZXBhZ2UgKi8KK1VfQ0ZVTkMgdm9pZCB1cHJpbnQoY29uc3QgVUNoYXIgKnMsIEZJTEUgKmYsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKyNlbmRpZiAvKiAhIFVQUklOVF9IICovCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZSBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2JiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZQpAQCAtMCwwICsxLDEyNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK01VTFRJQ1VfUk9PVD0uLi8uLi8KK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKKworWE1MPS4veG1sCitKWE1MPS4vanhtbAorSlZNWE1MPS4vanZteG1sCisKK0NPT0tFRD1jb29rZWQKK0lOUFVUPWlucHV0CitJTlRST1hNTFM9JCh3aWxkY2FyZCAkKElOUFVUKS8qLWludHJvZHVjdGlvbi54bWwpCitGRUFUWE1MUz0kKElOVFJPWE1MUzokKElOUFVUKS8lLWludHJvZHVjdGlvbi54bWw9JChDT09LRUQpLyUtY29va2VkLnhtbCkgJChDT09LRUQpL2NoYXJhY3RlcnMueG1sCitBTExDT09LRUQ9Y29va2VkL2ZlYXR1cmVzLnhtbAorCisjIGphdmEgc3R1ZmYKK01lcmdlck5hbWU9TWVyZ2VyCitQcm9wYWdhdGVOYW1lPVByb3BhZ2F0ZUZlYXR1cmVzCitQcm9wYWdhdGVDaGFyc05hbWU9UHJvcGFnYXRlQ2hhcmFjdGVycworTWVyZ2VyUGFja2FnZT1jb20uaWJtLmljdS5kZXYubWV0YQorTWVyZ2VyUGFja2FnZVNsYXNoPSQoc3Vic3QgLiwvLCQoTWVyZ2VyUGFja2FnZSkpCisjIyBJQ1VNRVRBPS94c3JsL0UvZGF0YS9tZXRhICAoaW4gTWFrZWZpbGUubG9jYWwpCitNZXJnZXJMaWI9JChJQ1VNRVRBKS9saWIKK01lcmdlckphcj0kKElDVU1FVEEpL2ljdW1ldGEuamFyCisjd2FzOiAkKElDVU1FVEEpL2NsYXNzZXMKK01lcmdlckNsYXNzUGF0aD0kKHNoZWxsIGxzICQoTWVyZ2VyTGliKS8qLmphciB8IHRyICdcbicgJzonKSQoTWVyZ2VySmFyKTokKE9USEVSSkFSUykKK2luY2x1ZGUgTWFrZWZpbGUubG9jYWwKK01lcmdlckJ1aWxkPSQoSUNVTUVUQSkvYnVpbGQueG1sCisjTWVyZ2VyQ2xhc3M9JChJQ1VNRVRBKS9jbGFzc2VzLyQoTWVyZ2VyUGFja2FnZVNsYXNoKS8kKE1lcmdlck5hbWUpLmNsYXNzCisjTWVyZ2VySmF2YT0kKElDVU1FVEEpL3NyYy8kKE1lcmdlclBhY2thZ2VTbGFzaCkvJChNZXJnZXJOYW1lKS5qYXZhCisjQkFTRVhNTFM9JChJQ1VNRVRBKS94bWwvaWN1bWV0YS54bWwKK0JBU0VYTUxTPSQoSUNVTUVUQSkvaW5wdXQvdmVyc2lvbnMueG1sCisKKworQVBSRUNJT1VTPSQoSUNVVkVSUzolPSQoQkxEKS8lLyQoU19TUkMpKSAkKElDVVZFUlM6JT0kKEJMRCkvJS8kKFNfQkxEKSkgJChJQ1VWRVJTOiU9JChJTlMpLyUvJChTX0lOUykpCisKK2FsbDogaWN1Y2Fwcy54bWwKKworLlBSRUNJT1VTOiAkKEFQUkVDSU9VUykKKwordGVocHJlY2lvdXM6CisJZWNobyAkKEFQUkVDSU9VUykKKworJChNZXJnZXJKYXIpOgorCSggY2QgJChJQ1VNRVRBKSAgOyBhbnQgamFyICkKKworJChCTEQpOgorCS1ta2RpciAkKEJMRCkKKworJChYTUwpOgorCS1ta2RpciAkKFhNTCkKKworJChKWE1MKToKKwktbWtkaXIgJChKWE1MKQorCiskKEpWTVhNTCk6CisJLW1rZGlyICQoSlhNTCkKKworaWZlcSAoJChKVk1TSCksKQorSlZNU0hfV0FSTj13YXJuLWp2bXNoCit3YXJuLWp2bXNoOgorCUBlY2hvICJOb3RlOiBObyAkKEpWTSkvKiQoSlZNX0NGRykgZmlsZXMgZm91bmQsIHNlZSAkKEpWTSkvcmVhZG1lLnR4dCIKK2VuZGlmCisKKworRFREQ0FDSEU9JChzaGVsbCBwd2QpL2R0ZGNhY2hlCitEVERUTVA9JChzaGVsbCBwd2QpL2R0ZHRtcAorRFRET1ZSPSQoSUNVTUVUQSkvZHRkCitKQVZBREVCVUc9LURDTERSX0RURF9DQUNIRV9ERUJVRz1uIC1EQ0xEUl9EVERfQ0FDSEVfQURFQlVHPW4gCitKQVZBUFJPUFM9IC1EQ0xEUl9EVERfQ0FDSEU9JChEVERDQUNIRSkgLURDTERSX0RURF9PVkVSUklERT0kKERURE9WUikgLURJQ1VfRFREX0NBQ0hFPSQoRFREQ0FDSEUpIC1ESUNVX0RURF9PVkVSUklERT0kRFRET1ZSIAorCisjLy8kKERURCkvTWFrZWZpbGU6ICQoSUNVTUVUQSkvZHRkL01ha2ZpbGUKKyMvLwlsbiAtcyAkXiAkQAorIy8vCisjLy9kdGQvaWN1Y2Fwcy5kdGQ6ICQoRFREKS9NYWtlZmlsZSBkdGQvaWN1Y2Fwcy5ybmMKKyMvLwltYWtlIC1DICQoRFREKQorCitJQ1VNRVRBX1hNTD0kKElDVU1FVEEpL3htbC9pY3VtZXRhLnhtbAorQkFTRV9WRVJTSU9OPSQoQ09PS0VEKS9hbGx2ZXJzaW9ucy54bWwKK0JBU0VfU09VUkNFPSQoQkFTRVhNTFMpICQoSU5QVVQpL2phdmEueG1sCisKKworIyQoSUNVTUVUQSkveG1sL2ljdW1ldGEueG1sOiAkKE1lcmdlckJ1aWxkKQorIwkoIGNkICQoSUNVTUVUQSkgOyBhbnQgeG1sICkJCisKK0FMTFhNTFM9JCh3aWxkY2FyZCAkKFhNTCkvKi54bWwgJChKWE1MKS8qLnhtbCAkKEpWTVhNTCkvKi54bWwpCisKK2FsbHhtbHM6ICQoWE1MKSAkKEpYTUwpICQoSlZNWE1MKQorCSQoTUFLRSkgLWYgTWFrZWZpbGVfYyBvdXRmaWxlcworCSQoTUFLRSkgLWYgTWFrZWZpbGVfaiBvdXRmaWxlcworCisKK2ZlYXR4bWxzOiAkKEZFQVRYTUxTKQorCithbGxjb29rZWQ6ICQoQUxMQ09PS0VEKQorCiskKENPT0tFRCk6CisJLW1rZGlyICQoQ09PS0VEKQorCiskKEJBU0VfVkVSU0lPTik6ICQoQkFTRV9TT1VSQ0UpICQoTWVyZ2VySmFyKSB8ICQoQ09PS0VEKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEJBU0VfU09VUkNFKQorCiskKEFMTENPT0tFRCk6ICQoRkVBVFhNTFMpICQoTWVyZ2VySmFyKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEZFQVRYTUxTKQorCiskKENPT0tFRCkvJS1jb29rZWQueG1sOiAkKEJBU0VfVkVSU0lPTikgJChJTlBVVCkvJS1pbnRyb2R1Y3Rpb24ueG1sICQoTWVyZ2VySmFyKSB8ICQoQ09PS0VEKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKFByb3BhZ2F0ZU5hbWUpICQoQkFTRV9WRVJTSU9OKSAkKElOUFVUKS8kKi1pbnRyb2R1Y3Rpb24ueG1sID4gJChDT09LRUQpLyQqLWNvb2tlZC54bWwKKworJChDT09LRUQpL2NoYXJhY3RlcnMueG1sOiAkKEFMTFhNTFMpICQoQ09PS0VEKS9qdW5pY29kZS1jb29rZWQueG1sICQoTWVyZ2VySmFyKQorCWphdmEgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChQcm9wYWdhdGVDaGFyc05hbWUpID4gJEAgJChBTExYTUxTKSAgJChDT09LRUQpL2p1bmljb2RlLWNvb2tlZC54bWwgIHx8IChybSAuLyRAIDsgZmFsc2UpCisKKyAKK2ljdWNhcHMueG1sOiBhbGx4bWxzICQoQkFTRV9WRVJTSU9OKSAgJChBTExYTUxTKSAkKE1lcmdlckphcikgJChBTExDT09LRUQpCisJLXJtIC1yZiAuL2R0ZGNhY2hlCisJbWtkaXIgZHRkY2FjaGUKKyMJLXJtIC1yZiAuL2R0ZHRtcAorIwlta2RpciBkdGR0bXAKKyMJbG4gLXMgJChJQ1VNRVRBKS9kdGQvKi5kdGQgLi9kdGR0bXAvCisjCWxuIC1zIC4vZHRkLyouZHRkIC4vZHRkdG1wLworCWphdmEgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChNZXJnZXJOYW1lKSAtdiAgLW86JEAgJChCQVNFX1ZFUlNJT04pICAkKEFMTFhNTFMpICQoQUxMSlhNTFMpICQoQUxMQ09PS0VEKQorCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjYjEzNwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlLmxvY2FsLnNhbXBsZQpAQCAtMCwwICsxLDIzIEBACisjIC0qLSBtYWtlZmlsZSAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKworCisjIyAtLS0gaW1wb3J0YW50IC0tLQorIyBQYXRoIHRvICBodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS90cnVuay9tZXRhCitJQ1VNRVRBPS94c3JsL0UvZGF0YS9tZXRhCisKKworCisKKworIyMgLS0tIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsIC0tLQorCisjIGlmIG5lZWRlZCAtIGFkZGl0aW9uYWwgamFycyBvbiB0aGUgQ0xBU1NQQVRICisjT1RIRVJKQVJTPXNvbWVqYXIuamFyOnNvbWUvb3RoZXIvamFyLmphcgorCisjIGlmIG5lZWRlZCAtIGZvcmNlIHBhdGggdG8gSUNVSkFSCisjSUNVSkFSPS4uLi9pY3UuamFyCisKKyNTcGVjaWFsIG1ha2Ugb3B0aW9ucworI01BS0VfT1BUUz0tajIKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2MgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZWNhODAKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9jCkBAIC0wLDAgKzEsNDcgQEAKKyMgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NQUEZMQUdTKz0tRFVfRElTQUJMRV9SRU5BTUlORz0xIC1JLiAtSS94c3JsL0lJRS9pbmNsdWRlIC1JL3hzcmwvRS9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsCisjIFRPRE8gLSB3aGVyZSB0byBnZXQgdW9wdGlvbnMuaD8KK09CSkVDVFM9dGVzdHhtbC5vIHhtbG91dC5vCitDWFhfU09VUkNFUzo9JChPQkpFQ1RTOiUubz0lLmNwcCkKK0NfU09VUkNFUz0KK0hFQURFUlM9eG1sb3V0LmgKK1RBUkdFVD10ZXN0eG1sCisKK2FsbDoKKwlAZWNobyBUbyBidWlsZCBhbmQgbGlzdCAiJyIgJChPVVRGSUxFUykgIiciICBpbiAiJyIgJChDX0dPT0QpICInIiB1c2UgIiQoTUFLRSkgY2hlY2siCisKK01VTFRJQ1VfUk9PVD0uLi8uLi8KK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2MvTWFrZWZpbGUtYy5pbmMKKworT1VUPS4veG1sCiskKE9VVCk6CisJbWtkaXIgJChPVVQpCisKK09VVEZJTEVTPSQoQ19HT09EOiU9JChPVVQpLyUueG1sKQorCisKKy5QUkVDSU9VUzogJChDX0NMRUFOX1RBUkdFVCkKKworIyMgR2VuZXJhdGUgYSBmaWxlCiskKE9VVCkvJS54bWw6ICQoT1VUKSAkKENfSU5TKS8lL2Jpbi8kKFRBUkdFVCkKKwkkKHNoZWxsICQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0taW52b2tlKSAkKENfSU5TKS8kKi9iaW4vJChUQVJHRVQpICA+ICRACisKKyMjIGNsZWFuCitjbGVhbjoKKwktcm0gLWYgJChDX0NMRUFOX1RBUkdFVCkKKwktcm0gLWYgLi8kKE9VVCkvKgorCS1ybWRpciAkKE9VVCkKKworIyMgSnVzdCBnZW5lcmF0ZQorb3V0ZmlsZXM6ICQoT1VURklMRVMpCisKKyMjIFRlc3Q6IGdlbmVyYXRlIG91dCBmaWxlcywgYW5kIHByaW50IHRoZW0uCitjaGVjazogJChPVVRGSUxFUykKKwlAZm9yIGZpbGUgaW4gJChPVVRGSUxFUyk7IFwKKwlkbyBcCisJCWVjaG87IFwKKwkJc2VkIC1lICJzJV4lJCRmaWxlOiAlZyIgPCAkJGZpbGU7IFwKKwlkb25lCisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vTWFrZWZpbGVfaiBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYjA2NQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2oKQEAgLTAsMCArMSwyMjMgQEAKKyMgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIyBOYW1lIG9mIHRoZSBhcHAKKworVEFSR0VUPWljdTRqc2NhbgorCithbGw6CisJQGVjaG8gVG8gYnVpbGQgYW5kIGxpc3QgIiciICQoT1VURklMRVMpICInIiAgaW4gIiciICQoSl9HT09EKSAiJyIgdXNlICIkKE1BS0UpIGNoZWNrIgorCisjIyBTZXR1cCBtdWx0aWN1CitNVUxUSUNVX1JPT1Q9Li4vLi4vCitpbmNsdWRlICQoTVVMVElDVV9ST09UKS9qL01ha2VmaWxlLWouaW5jCisKKworIyMgVGhlIG91dHB1dCBmaWxlcy4gIFdpbGwgcmVzdWx0IGluOiAgIG91dC8zXzgudHh0ICBvdXQvNF8wLnR4dCAgZXRjLgorT1VUPWp4bWwKK09VVEZJTEVTPSQoSl9HT09EOiU9JChPVVQpLyUudHh0KQorCisuUFJFQ0lPVVM6ICQoQ19DTEVBTl9UQVJHRVQpCisKKyMjIEdlbmVyYXRlIGEgZmlsZQorJChPVVQpLyUudHh0OiAkKE9VVCkgJChDX0lOUykvJS9iaW4vJChUQVJHRVQpCisJJChzaGVsbCAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWludm9rZSkgJChDX0lOUykvJCovYmluLyQoVEFSR0VUKSAgPiAkQAorCisjIyBjbGVhbgorY2xlYW46CisJLXJtIC1mICQoQ19DTEVBTl9UQVJHRVQpCisJLXJtIC1mIC4vJChPVVQpLyoKKwktcm1kaXIgJChPVVQpCisKKworIyMgVGVzdDogZ2VuZXJhdGUgb3V0IGZpbGVzLCBhbmQgcHJpbnQgdGhlbS4KK2NoZWNrOiAkKE9VVEZJTEVTKQorCUBmb3IgZmlsZSBpbiAkKE9VVEZJTEVTKTsgXAorCWRvIFwKKwkJZWNobzsgXAorCQlzZWQgLWUgInMlXiUkJGZpbGU6ICVnIiA8ICQkZmlsZTsgXAorCWRvbmUKKworTVVMVElDVV9ST09UPS4uLy4uLworaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvY29tbW9uL01ha2VmaWxlLW11bHRpLmluYworCitYTUw9Li94bWwKKworSlZNWE1MPS4vanZteG1sCitKVk09JChNVUxUSUNVX1JPT1QpL2ovanZtCitKVk1fQ0ZHPS5zaAorSlZNU0g6PSQod2lsZGNhcmQgJChKVk0pL1swLTldKiQoSlZNX0NGRykpCisKK0FMTElDVVM9JChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX0JMRCkpCitJSUNVUz0kKElDVVZFUlM6JT0kKElOUykvJS8kKFNfSU5TKSkKK0FMTEFQUFM9JChJQ1VWRVJTOiU9JChJTlMpLyUvYmluLyQoVEFSR0VUKSkKK0FMTFhNTFM9JChJQ1VWRVJTOiU9JChYTUwpLyUueG1sKQorQ09PS0VEPWNvb2tlZAorSU5QVVQ9aW5wdXQKK0lOVFJPWE1MUz0kKHdpbGRjYXJkICQoSU5QVVQpLyotaW50cm9kdWN0aW9uLnhtbCkKK0ZFQVRYTUxTPSQoSU5UUk9YTUxTOiQoSU5QVVQpLyUtaW50cm9kdWN0aW9uLnhtbD0kKENPT0tFRCkvJS1jb29rZWQueG1sKSAkKENPT0tFRCkvY2hhcmFjdGVycy54bWwKK0FMTENPT0tFRD1jb29rZWQvZmVhdHVyZXMueG1sCisKK0pYTUw9Li9qeG1sCisjSUNVNEpWRVJTCitBTExJQ1U0SlM9JChJQ1U0SlZFUlM6JT0kKElDVVMpL2ljdTRqLSUuamFyKQorQUxMSlhNTFM9JChKX0dPT0Q6JT0kKEpYTUwpLyUueG1sKQorSlNDQU49U2NhbklDVQorYWxsanhtbHM6ICQoSlhNTCkgJChBTExKWE1MUykKK0pTQ0FORElSPS4uL2ljdTRqc2NhbgorSkNMQVNTRklMRT0kKEpTQ0FORElSKS9iaW4vY29tL2libS9pY3UvZGV2L3NjYW4vJChKU0NBTikuY2xhc3MKK0pTY2FuUGFja2FnZT1jb20uaWJtLmljdS5kZXYuc2NhbgorQUxMSlZNPSQoSlZNU0g6JChKVk0pLyUkKEpWTV9DRkcpPSUpCitBTExKVk1YTUxTPSQoQUxMSlZNOiU9JChKVk1YTUwpLyUueG1sKQorSlZNU0NBTj1TY2FuSmF2YQorYWxsanZteG1sczogJChKVk1YTUwpICQoQUxMSlZNWE1MUykKK0pWTUNMQVNTRklMRT0kKEpTQ0FORElSKS9iaW4vY29tL2libS9pY3UvZGV2L3NjYW4vJChKVk1TQ0FOKS5jbGFzcworCisKKyMgamF2YSBzdHVmZgorSkFWQT1qYXZhCitNZXJnZXJOYW1lPU1lcmdlcgorUHJvcGFnYXRlTmFtZT1Qcm9wYWdhdGVGZWF0dXJlcworUHJvcGFnYXRlQ2hhcnNOYW1lPVByb3BhZ2F0ZUNoYXJhY3RlcnMKK01lcmdlclBhY2thZ2U9Y29tLmlibS5pY3UuZGV2Lm1ldGEKK01lcmdlclBhY2thZ2VTbGFzaD0kKHN1YnN0IC4sLywkKE1lcmdlclBhY2thZ2UpKQorIyMgSUNVTUVUQT0veHNybC9FL2RhdGEvbWV0YSAgKGluIE1ha2VmaWxlLmxvY2FsKQorTWVyZ2VyTGliPSQoSUNVTUVUQSkvbGliCitNZXJnZXJKYXI9JChJQ1VNRVRBKS9pY3VtZXRhLmphcgorI3dhczogJChJQ1VNRVRBKS9jbGFzc2VzCitNZXJnZXJDbGFzc1BhdGg9JChzaGVsbCBscyAkKE1lcmdlckxpYikvKi5qYXIgfCB0ciAnXG4nICc6JykkKE1lcmdlckphcik6JChPVEhFUkpBUlMpCitpbmNsdWRlIE1ha2VmaWxlLmxvY2FsCitNZXJnZXJCdWlsZD0kKElDVU1FVEEpL2J1aWxkLnhtbAorI01lcmdlckNsYXNzPSQoSUNVTUVUQSkvY2xhc3Nlcy8kKE1lcmdlclBhY2thZ2VTbGFzaCkvJChNZXJnZXJOYW1lKS5jbGFzcworI01lcmdlckphdmE9JChJQ1VNRVRBKS9zcmMvJChNZXJnZXJQYWNrYWdlU2xhc2gpLyQoTWVyZ2VyTmFtZSkuamF2YQorI0JBU0VYTUxTPSQoSUNVTUVUQSkveG1sL2ljdW1ldGEueG1sCitCQVNFWE1MUz0kKElDVU1FVEEpL2lucHV0L3ZlcnNpb25zLnhtbAorCisKK0FQUkVDSU9VUz0kKElDVVZFUlM6JT0kKEJMRCkvJS8kKFNfU1JDKSkgJChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX0JMRCkpICQoSUNVVkVSUzolPSQoSU5TKS8lLyQoU19JTlMpKQorCisuUFJFQ0lPVVM6ICQoQVBSRUNJT1VTKQorCit0ZWhwcmVjaW91czoKKwllY2hvICQoQVBSRUNJT1VTKQorCiskKE1lcmdlckphcik6CisJKCBjZCAkKElDVU1FVEEpICA7IGFudCBqYXIgKQorCiskKEJMRCk6CisJLW1rZGlyICQoQkxEKQorCiskKElOUykvJS8kKFNfSU5TKTogJChCTEQpLyUvJChTX0JMRCkKKwlAaWYgWyAtZiAkKEJMRCkvJCovYnVpbGQuZXJyIF07IHRoZW4gZWNobyBFcnJvciBmb3IgJCogc3RvcmVkIGluICQoQkxEKS8kKi9idWlsZC5lcnI7IGZhbHNlOyAgZmkKKwkoIG1ha2UgJChNQUtFX09QVFMpIC1DICQoQkxEKS8kKi9pY3Uvc291cmNlIDI+JjEgYWxsIGluc3RhbGwgfCB0ZWUgJChCTEQpLyQqL2J1aWxkLmxvZyApIHx8ICggbXYgJChCTEQpLyQqL2J1aWxkLmxvZyAkKEJMRCkvJCovYnVpbGQuZXJyIDsgZmFsc2UgKQorCXRvdWNoIC1jICRACisKKyQoQkxEKS8lLyQoU19TUkMpOiAkKElDVVMpL2ljdTRjLSUtc3JjLnRnegorCS1tdiAkKEJMRCkvJCogJChCTEQpLyQqLm9sZAorCS0oIHJtIC1yZiAuLyQoQkxEKS8kKi5vbGQmICkKKwlta2RpciAtcCAkKEJMRCkvJCoKKwkoIGNkICQoQkxEKS8kKiA7IHRhciB4ZnB6ICQoRE9UKS8kXiApCisJKFsgLWYgcGF0Y2gvJCogXSAmJiBwYXRjaCAtZCAkKEJMRCkvJCogLXAxIDwgJChET1QpL3BhdGNoLyQqKSB8fCB0cnVlCisJdG91Y2ggLWMgJEAKKworJChCTEQpLyUvJChTX0JMRCk6ICQoQkxEKS8lLyQoU19TUkMpCisJLW1rZGlyIC1wICQoSU5TKQorCSggY2QgJChCTEQpLyQqL2ljdS9zb3VyY2UgOyAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtcmVuYW1pbmcgLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsZWFzZSAtLWRpc2FibGUtZGVidWcgLS1wcmVmaXg9JChET1QpLyQoSU5TKS8kKiApCisJdG91Y2ggLWMgJEAKKworJChJTlMpLyUvYmluLyQoVEFSR0VUKTogJChJTlMpLyUvJChTX0lOUykgJChTUkNTKQorCS1ybSAtcmYgLi8kKEJMRCkvJCovdG1wCisJbWtkaXIgLi8kKEJMRCkvJCovdG1wCisJQGZvciBmaWxlIGluICQoT0JKRUNUUyk7IFwKKwlkbyBcCisJCXdoYXQ9YGJhc2VuYW1lICQkZmlsZSAub2AgOyBcCisJCWVjaG8gY29tcGlsaW5nICQqLyQkd2hhdCA7IFwKKwkJJChDWFgpIC1jIC1vIC4vJChCTEQpLyQqL3RtcC8kJHdoYXQubyAkJHdoYXQuY3BwIC1JICQoSU5TKS8kKi9pbmNsdWRlIC1JICQoQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsIDsgXAorCWRvbmUKKwkkKENYWCkgLW8gJEAgJChPQkpFQ1RTOiUubz0uLyQoQkxEKS8kKi90bXAvJS5vKSAgLWxpY3VkYXRhIC1saWN1dWMgLWxpY3V0dSAtbGljdWkxOG4gLUwkKElOUykvJCovbGliIAorCiskKFhNTCk6CisJbWtkaXIgJChYTUwpCisKKyQoSlhNTCk6CisJbWtkaXIgJChKWE1MKQorCitpZmVxICgkKEpWTVNIKSwpCitKVk1TSF9XQVJOPXdhcm4tanZtc2gKK3dhcm4tanZtc2g6CisJQGVjaG8gIk5vdGU6IE5vICQoSlZNKS8qJChKVk1fQ0ZHKSBmaWxlcyBmb3VuZCwgc2VlICQoSlZNKS9yZWFkbWUudHh0IgorZW5kaWYKKworCiskKEpWTVhNTCk6CisJbWtkaXIgJChKVk1YTUwpCisKKyQoWE1MKS8lLnhtbDogJChJTlMpLyUvYmluLyQoVEFSR0VUKSAkKFhNTCkKKwkkKHNoZWxsICQoSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWludm9rZSkgJChJTlMpLyQqL2Jpbi8kKFRBUkdFVCkgID4gJEAKKworYWxseG1sczogJChBTExYTUxTKSB8ICQoT1VUKQorCithbGxqdm14bWxzOiAgJChBTExKVk1YTUxTKSAkKEpWTVNIX1dBUk4pICB8ICQoSlZNWE1MKQorCithbGxhcHBzOiAkKEJMRCkgJChBTExBUFBTKQorCithbGxpY3VzOiAkKEJMRCkgJChBTExJQ1VTKQorCitjbGVhbi1hbGxhcHBzOgorCS1ybSAtZiAkKEFMTEFQUFMpCisKK2lpY3VzOiAkKEJMRCkgJChJSUNVUykKKworRFREQ0FDSEU9JChzaGVsbCBwd2QpL2R0ZGNhY2hlCitEVERUTVA9JChzaGVsbCBwd2QpL2R0ZHRtcAorRFRET1ZSPSQoSUNVTUVUQSkvZHRkCitKQVZBREVCVUc9LURDTERSX0RURF9DQUNIRV9ERUJVRz1uIC1EQ0xEUl9EVERfQ0FDSEVfQURFQlVHPW4gCitKQVZBUFJPUFM9IC1EQ0xEUl9EVERfQ0FDSEU9JChEVERDQUNIRSkgLURDTERSX0RURF9PVkVSUklERT0kKERURE9WUikgLURJQ1VfRFREX0NBQ0hFPSQoRFREQ0FDSEUpIC1ESUNVX0RURF9PVkVSUklERT0kRFRET1ZSIAorCisjLy8kKERURCkvTWFrZWZpbGU6ICQoSUNVTUVUQSkvZHRkL01ha2ZpbGUKKyMvLwlsbiAtcyAkXiAkQAorIy8vCisjLy9kdGQvaWN1Y2Fwcy5kdGQ6ICQoRFREKS9NYWtlZmlsZSBkdGQvaWN1Y2Fwcy5ybmMKKyMvLwltYWtlIC1DICQoRFREKQorCitJQ1VNRVRBX1hNTD0kKElDVU1FVEEpL3htbC9pY3VtZXRhLnhtbAorCisjJChJQ1VNRVRBKS94bWwvaWN1bWV0YS54bWw6ICQoTWVyZ2VyQnVpbGQpCisjCSggY2QgJChJQ1VNRVRBKSA7IGFudCB4bWwgKQkKKworZmVhdHhtbHM6ICQoRkVBVFhNTFMpCisKK2FsbGNvb2tlZDogJChBTExDT09LRUQpCisKKyQoQUxMQ09PS0VEKTogJChGRUFUWE1MUykgJChNZXJnZXJKYXIpCisJLXJtIC1yZiAuL2R0ZGNhY2hlCisJbWtkaXIgZHRkY2FjaGUKKwkkKEpBVkEpICQoSkFWQVBST1BTKSAtY2xhc3NwYXRoICQoTWVyZ2VyQ2xhc3NQYXRoKSAkKE1lcmdlclBhY2thZ2UpLiQoTWVyZ2VyTmFtZSkgLXYgIC1vOiRAICQoRkVBVFhNTFMpCisKKyQoQ09PS0VEKS8lLWNvb2tlZC54bWw6ICQoSUNVTUVUQV9YTUwpICQoSU5QVVQpLyUtaW50cm9kdWN0aW9uLnhtbCAkKE1lcmdlckphcikKKwktcm0gLXJmIC4vZHRkY2FjaGUKKwlta2RpciBkdGRjYWNoZQorCSQoSkFWQSkgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChQcm9wYWdhdGVOYW1lKSAkKElDVU1FVEFfWE1MKSAkKElOUFVUKS8kKi1pbnRyb2R1Y3Rpb24ueG1sID4gJChDT09LRUQpLyQqLWNvb2tlZC54bWwKKworJChDT09LRUQpL2NoYXJhY3RlcnMueG1sOiAkKEFMTEpYTUxTKSAkKEFMTFhNTFMpICQoTWVyZ2VySmFyKQorCSQoSkFWQSkgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChQcm9wYWdhdGVDaGFyc05hbWUpID4gJEAgJChBTExKWE1MUykgJChBTExYTUxTKSB8fCAocm0gLi8kQCA7IGZhbHNlKQorCisKK2ljdWNhcHMueG1sOiAkKEJBU0VYTUxTKSAkKEFMTEpYTUxTKSAkKEFMTFhNTFMpICQoTWVyZ2VySmFyKSAkKEFMTENPT0tFRCkKKwktcm0gLXJmIC4vZHRkY2FjaGUKKwlta2RpciBkdGRjYWNoZQorIwktcm0gLXJmIC4vZHRkdG1wCisjCW1rZGlyIGR0ZHRtcAorIwlsbiAtcyAkKElDVU1FVEEpL2R0ZC8qLmR0ZCAuL2R0ZHRtcC8KKyMJbG4gLXMgLi9kdGQvKi5kdGQgLi9kdGR0bXAvCisJJChKQVZBKSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEJBU0VYTUxTKSAgJChBTExYTUxTKSAkKEFMTEpYTUxTKSAkKEFMTENPT0tFRCkKKworIyAtLS0gSiAKKworJChKWE1MKS8lLnhtbDogJChKQ0xBU1NGSUxFKSAkKElDVVMpL2ljdTRqLSUuamFyIHwgJChKWE1MKQorCSQoSkFWQSkgLWNsYXNzcGF0aCAkKEpTQ0FORElSKS9iaW46JChJQ1VTKS9pY3U0ai0kKi5qYXI6JChKU0NBTkRJUikvbGliL2ljdW1ldGEuamFyOiQoSlNDQU5ESVIpL2xpYi94YWxhbi5qYXI6JChKU0NBTkRJUikvbGliL2NsZHIuamFyOiQoSlNDQU5ESVIpL2xpYi91dGlsaXRpZXMuamFyOiQoTWVyZ2VySmFyKTokKE1lcmdlckxpYikvdXRpbGl0aWVzLmphcjokKE1lcmdlckxpYikvY2xkci5qYXI6JChKU0NBTkRJUikvbGliL3hlcmNlcy5qYXI6JChPVEhFUkpBUlMpICQoSlNjYW5QYWNrYWdlKS4kKEpTQ0FOKSA+ICRAIHx8IChybSAtZiAuLyRAIDsgZmFsc2UpCisKKyQoSlZNWE1MKS8lLnhtbDogJChKVk1DTEFTU0ZJTEUpICQoSlZNKS8lJChKVk1fQ0ZHKSB8ICQoSlZNWE1MKQorCSQoSlZNKS9pbnZva2Uuc2ggJChKVk0pLyQqJChKVk1fQ0ZHKSAkKEpTQ0FORElSKS9iaW46JChJQ1VTKS9pY3U0ai0kKi5qYXI6JChKU0NBTkRJUikvbGliL2ljdW1ldGEuamFyOiQoSlNDQU5ESVIpL2xpYi94YWxhbi5qYXI6JChKU0NBTkRJUikvbGliL2NsZHIuamFyOiQoTWVyZ2VySmFyKTokKE1lcmdlckphcik6JChNZXJnZXJMaWIpL3V0aWxpdGllcy5qYXI6JChNZXJnZXJMaWIpL2NsZHIuamFyOiQoSlNDQU5ESVIpL2xpYi91dGlsaXRpZXMuamFyOiQoSlNDQU5ESVIpL2xpYi94ZXJjZXMuamFyOiQoT1RIRVJKQVJTKSAkKEpTY2FuUGFja2FnZSkuJChKVk1TQ0FOKSA+ICRAIHx8IChybSAuLyRAIDsgZmFsc2UpCisKKyMjIEp1c3QgZ2VuZXJhdGUKK291dGZpbGVzOiAkKFhNTCkgJChKWE1MKSAkKEFMTEpYTUxTKSAkKEFMTEpWTVhNTFMpCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9kdGQvaWN1Y2Fwcy5kdGQgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9kdGQvaWN1Y2Fwcy5kdGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1MTk5NgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2R0ZC9pY3VjYXBzLmR0ZApAQCAtMCwwICsxLDEyIEBACis8IS0tIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworZWxlbWVudCBjYXBhYmlsaXRpZXMKK3sKKyAgICBlbGVtZW50IGZlYXR1cmUKKyAgICB7CisgICAgICAgIGF0dHJpYnV0ZSB0eXBlIHt0ZXh0IH0sCisgICAgICAgIGF0dHJpYnV0ZSB0b3RhbCB7dGV4dH0/LAorICAgICAgICBhdHRyaWJ1dGUgdmVyc2lvbiB7dGV4dH0sCisgICAgICAgIHRleHQKKyAgICB9KgorfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaWN1Y2Fwcy54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9pY3VjYXBzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhmNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaWN1Y2Fwcy54bWwKQEAgLTAsMCArMSw4MTczIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCEtLSBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmcm9tOiAgY29va2VkL2FsbHZlcnNpb25zLnhtbCAuL3htbC8yXzIueG1sIC4veG1sLzNfMC54bWwgLi94bWwvM18yLnhtbCAuL3htbC8zXzRfMS54bWwgLi94bWwvM180LnhtbCAuL3htbC8zXzYueG1sIC4veG1sLzNfOF8xLnhtbCAuL3htbC8zXzgueG1sIC4veG1sLzRfMF8xLnhtbCAuL3htbC80XzAueG1sIC4veG1sLzRfMV8xLnhtbCAuL3htbC80XzJfMF8xLnhtbCAuL3htbC80XzIueG1sIC4veG1sL3I1MF8xLnhtbCAuL2p4bWwvMl8yLnhtbCAuL2p4bWwvMl80LnhtbCAuL2p4bWwvMl82XzEueG1sIC4vanhtbC8yXzYueG1sIC4vanhtbC8yXzgueG1sIC4vanhtbC8zXzAueG1sIC4vanhtbC8zXzIueG1sIC4vanhtbC8zXzRfMS54bWwgLi9qeG1sLzNfNF8yLnhtbCAuL2p4bWwvM180XzMueG1sIC4vanhtbC8zXzRfNC54bWwgLi9qeG1sLzNfNF81LnhtbCAuL2p4bWwvM180LnhtbCAuL2p4bWwvM182LnhtbCAuL2p4bWwvM184XzEueG1sIC4vanhtbC8zXzgueG1sIC4vanhtbC80XzBfMS54bWwgLi9qeG1sLzRfMC54bWwgLi9qeG1sLzRfMV8xLnhtbCAuL2p4bWwvNF8yLnhtbCAuL2p2bXhtbC8xXzRfMi54bWwgLi9qdm14bWwvMV81XzAueG1sIC4vanZteG1sLzFfNl8wXzI2LnhtbCAuL2p2bXhtbC8xXzZfMC54bWwgLi9qdm14bWwvMV83XzAueG1sIGNvb2tlZC9mZWF0dXJlcy54bWwgLS0+Cis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbTogIC94c3JsL0UvZGF0YS9tZXRhL2lucHV0L3ZlcnNpb25zLnhtbCBpbnB1dC9qYXZhLnhtbCAtLT4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImljdW1ldGEuY3NzIj8+CisKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgLS0+Cis8aWN1SW5mbz4gCisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisgICAgICAgICAgICA8bmFtZXM+CisgICAgICAgICAgICAgICAgPG5hbWUgdHlwZT0iZnVsbCI+SW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBDL0MrKzwvbmFtZT4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJzaG9ydCI+SUNVNEM8L25hbWU+CisgICAgICAgICAgICA8L25hbWVzPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI1MC4xIj4KKyAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEyLTExLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI2LjIiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNi4yIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAxMmgiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjIyLjEiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSI1OTMiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWdxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZ3FfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlha19HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfMDAxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1BTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1REIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc2FfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJhc19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlbV9aTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZXpfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJtX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyeCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnJ4X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlicyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0FEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2dnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljZ2dfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2hyX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYXYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhdl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRqZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGplX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkdWEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR1YV9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHlvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkeW9fU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkel9CVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllYnVfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllZV9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWVfVEcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl8xNTAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fRE0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0ZKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9GTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR1UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0tOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTEMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0xSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9MUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9XUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc180MTkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19JQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlld29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmZl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpbF9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR1AgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9IVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfS00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01GIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01RIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX05DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfUEYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9SVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU0MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVEQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1RHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3V6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndXpfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlnX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X1NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqZ28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1MTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWpnb19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzUxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJam1jIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqbWNfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYWJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FtX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0Mzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtkZV9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2VhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZWFfQ1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtocSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2hxX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlraSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2lfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xuX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1AgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc19BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc19BcmFiX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzYl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2ZfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGFnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsYWdfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsZ19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0FPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG5fQ0YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG9fTEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjUxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1X0NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1b19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHV5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdXlfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltYXNfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1hc19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZXJfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1mZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWZlX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdfTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1naCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdoX01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1nb19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM0NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXVhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdWFfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW15IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlteV9NTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmFxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYXFfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5kX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQVcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9DVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX1NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9TWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm1nIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubWdfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQludXNfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW55biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnluX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0FPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQ1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0dXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfTVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9TVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfVEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJuX0JJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fTUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb2YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvZl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9LRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyd19SVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyd2tfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNhcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2FxX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYnAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNicF9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZWhfTVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VzX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2dfQ0YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9MYXRuX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGlfVGZuZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX1RmbmdfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0FYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd2MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3Y19DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZW9fVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdG8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRvX1RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0d3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR3cV9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0em1fTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptX0xhdG5fTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfTGF0bl9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpX1ZhaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9WYWlpX0xSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZ1biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdnVuX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl4b2cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXhvZ19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeWF2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl5YXZfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXlvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl5b19ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1X1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSI0MDEiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9OQSAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl8wMDEgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfREogCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfRUggCisJCQkJCQkJYXJfRVIgCisJCQkJCQkJYXJfSUwgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS00gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfTVIgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUFMgCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU08gCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVEQgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0JEIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWJzIAorCQkJCQkJCWJzX0N5cmwgCisJCQkJCQkJYnNfQ3lybF9CQSAKKwkJCQkJCQlic19MYXRuIAorCQkJCQkJCWJzX0xhdG5fQkEgCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfQUQgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY2hyIAorCQkJCQkJCWNocl9VUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MSSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQlkeiAKKwkJCQkJCQllZSAKKwkJCQkJCQllZV9HSCAKKwkJCQkJCQllZV9URyAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9DWSAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl8xNTAgCisJCQkJCQkJZW5fQUcgCisJCQkJCQkJZW5fQVMgCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkIgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQk0gCisJCQkJCQkJZW5fQlMgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQlogCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fQ00gCisJCQkJCQkJZW5fRE0gCisJCQkJCQkJZW5fRkogCisJCQkJCQkJZW5fRk0gCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fR0QgCisJCQkJCQkJZW5fR0cgCisJCQkJCQkJZW5fR0ggCisJCQkJCQkJZW5fR0kgCisJCQkJCQkJZW5fR00gCisJCQkJCQkJZW5fR1UgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU0gCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fSkUgCisJCQkJCQkJZW5fSk0gCisJCQkJCQkJZW5fS0UgCisJCQkJCQkJZW5fS0kgCisJCQkJCQkJZW5fS04gCisJCQkJCQkJZW5fS1kgCisJCQkJCQkJZW5fTEMgCisJCQkJCQkJZW5fTFIgCisJCQkJCQkJZW5fTFMgCisJCQkJCQkJZW5fTUcgCisJCQkJCQkJZW5fTUggCisJCQkJCQkJZW5fTVAgCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTVUgCisJCQkJCQkJZW5fTVcgCisJCQkJCQkJZW5fTkEgCisJCQkJCQkJZW5fTkcgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEcgCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fUFIgCisJCQkJCQkJZW5fUFcgCisJCQkJCQkJZW5fU0IgCisJCQkJCQkJZW5fU0MgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fU0wgCisJCQkJCQkJZW5fU1MgCisJCQkJCQkJZW5fVEMgCisJCQkJCQkJZW5fVE8gCisJCQkJCQkJZW5fVFQgCisJCQkJCQkJZW5fVFogCisJCQkJCQkJZW5fVUcgCisJCQkJCQkJZW5fVU0gCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkMgCisJCQkJCQkJZW5fVkcgCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fVlUgCisJCQkJCQkJZW5fV1MgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWk0gCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfNDE5IAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0NVIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VBIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dRIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX0lDIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BIIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZpbCAKKwkJCQkJCQlmaWxfUEggCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQkYgCisJCQkJCQkJZnJfQkkgCisJCQkJCQkJZnJfQkogCisJCQkJCQkJZnJfQkwgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0QgCisJCQkJCQkJZnJfQ0YgCisJCQkJCQkJZnJfQ0cgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfQ0kgCisJCQkJCQkJZnJfQ00gCisJCQkJCQkJZnJfREogCisJCQkJCQkJZnJfRFogCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfR0EgCisJCQkJCQkJZnJfR04gCisJCQkJCQkJZnJfR1AgCisJCQkJCQkJZnJfR1EgCisJCQkJCQkJZnJfSFQgCisJCQkJCQkJZnJfS00gCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZnJfTUEgCisJCQkJCQkJZnJfTUMgCisJCQkJCQkJZnJfTUYgCisJCQkJCQkJZnJfTUcgCisJCQkJCQkJZnJfTUwgCisJCQkJCQkJZnJfTVEgCisJCQkJCQkJZnJfTVIgCisJCQkJCQkJZnJfTVUgCisJCQkJCQkJZnJfTkMgCisJCQkJCQkJZnJfTkUgCisJCQkJCQkJZnJfUEYgCisJCQkJCQkJZnJfUkUgCisJCQkJCQkJZnJfUlcgCisJCQkJCQkJZnJfU0MgCisJCQkJCQkJZnJfU04gCisJCQkJCQkJZnJfU1kgCisJCQkJCQkJZnJfVEQgCisJCQkJCQkJZnJfVEcgCisJCQkJCQkJZnJfVE4gCisJCQkJCQkJZnJfVlUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGEgCisJCQkJCQkJaGFfTGF0biAKKwkJCQkJCQloYV9MYXRuX0dIIAorCQkJCQkJCWhhX0xhdG5fTkUgCisJCQkJCQkJaGFfTGF0bl9ORyAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfQkEgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaWcgCisJCQkJCQkJaWdfTkcgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJaXRfU00gCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2EgCisJCQkJCQkJa2FfR0UgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa21fS0ggCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1AgCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlsbiAKKwkJCQkJCQlsbl9BTyAKKwkJCQkJCQlsbl9DRCAKKwkJCQkJCQlsbl9DRiAKKwkJCQkJCQlsbl9DRyAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltc19TRyAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQlteSAKKwkJCQkJCQlteV9NTSAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9BVyAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9DVyAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubF9TUiAKKwkJCQkJCQlubF9TWCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0FPIAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X0NWIAorCQkJCQkJCXB0X0dXIAorCQkJCQkJCXB0X01PIAorCQkJCQkJCXB0X01aIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXB0X1NUIAorCQkJCQkJCXB0X1RMIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX01EIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X0JZIAorCQkJCQkJCXJ1X0tHIAorCQkJCQkJCXJ1X0taIAorCQkJCQkJCXJ1X01EIAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNpIAorCQkJCQkJCXNpX0xLIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNxX01LIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9BWCAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQlzd19VRyAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0YV9MSyAKKwkJCQkJCQl0YV9NWSAKKwkJCQkJCQl0YV9TRyAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0byAKKwkJCQkJCQl0b19UTyAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9DWSAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl5byAKKwkJCQkJCQl5b19ORyAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJCXp1IAorCQkJCQkJCXp1X1pBIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNDkuMS4yIj4KKyAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEyLTA2LTA2IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNDkuMS4xIj4KKyAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMi0wNC0wNiIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0OS4xIj4KKyAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMi0wMy0yMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjguMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDctMjAiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC44Ij4KKyAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMS0wNS0yNSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjYuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDMtMTEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTEyLTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC40LjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTEwLTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC40LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTA0LTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0wMy0xNyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMi4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwOS0wNy0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMi4wLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA5LTA2LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOWciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNyIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI5MiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzd19DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fTUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1X1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMTkiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9OQSAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNpIAorCQkJCQkJCXNpX0xLIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA5LTA1LTA4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOWciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNyIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI5MiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzd19DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fTUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1X1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMTkiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9OQSAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNpIAorCQkJCQkJCXNpX0xLIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8IS0tIDxyZWxlYXNlIHZlcnNpb249IjQuMS4yIiB0eXBlPSJkZXZlbG9wbWVudCIgZHJhZnQ9InByb3Bvc2VkIj4gLS0+CisgICAgICAgICAgICAgICAgPCEtLSAgICAgPGRhdGVzPiAtLT4KKyAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgPGRhdGUgdHlwZT0iZ2EiIGRhdGU9IjIwMDktMDEtMjAiLz4gLS0+CisgICAgICAgICAgICAgICAgPCEtLSAgICAgPC9kYXRlcz4gLS0+CisgICAgICAgICAgICAgICAgPCEtLSA8L3JlbGVhc2U+IC0tPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwOS0wMS0xNSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhpIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjYiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0FyYWIgCisJCQkJCQkJcGFfQXJhYl9QSyAKKwkJCQkJCQlwYV9HdXJ1IAorCQkJCQkJCXBhX0d1cnVfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX0lOIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDgtMDctMDIiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4YyIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjguMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDctMTItMTMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3aiIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIwNCIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuOCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDctMDktMTQiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3ZyIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIwNCIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDYtMDktMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyNDUiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjUxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjQ1IiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfQ3lybCAKKwkJCQkJCQlhel9DeXJsX0FaIAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9QSyAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGF3X1VTIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQ1MgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0NTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX0lOIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXV6IAorCQkJCQkJCXV6X0N5cmwgCisJCQkJCQkJdXpfQ3lybF9VWiAKKwkJCQkJCQl1el9MYXRuIAorCQkJCQkJCXV6X0xhdG5fVVogCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTAyLTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0N5cmwgCisJCQkJCQkJYXpfQ3lybF9BWiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1sX0lOIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCW9yX0lOIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9DUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQ1MgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdXogCisJCQkJCQkJdXpfQ3lybCAKKwkJCQkJCQl1el9DeXJsX1VaIAorCQkJCQkJCXV6X0xhdG4gCisJCQkJCQkJdXpfTGF0bl9VWiAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXI8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA1LTA4LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0N5cmwgCisJCQkJCQkJYXpfQ3lybF9BWiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1sX0lOIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCW9yX0lOIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9DUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQ1MgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdXogCisJCQkJCQkJdXpfQ3lybCAKKwkJCQkJCQl1el9DeXJsX1VaIAorCQkJCQkJCXV6X0xhdG4gCisJCQkJCQkJdXpfTGF0bl9VWiAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXI8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjIuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDYtMDItMjgiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjApLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4yIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMTEtMjMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIzMCIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjMwIiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSU4gCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1sX0lOIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCW9yX0lOIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9ZVSAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fWVUgCisJCQkJCQkJc3JfWVUgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjAiPiAKKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNC0wNi0xOSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjE5IiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjE5IiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSU4gCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNoIAorCQkJCQkJCXNoX1lVIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX1lVIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0NOIAorCQkJCQkJCXpoX0hLIAorCQkJCQkJCXpoX01PIAorCQkJCQkJCXpoX1NHIAorCQkJCQkJCXpoX1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuOCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDMtMTEtMjIiIHR5cGU9ImdhIi8+IDwhLS0gZ3Vlc3MgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAyLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMDItMjYiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAyLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDMtMTEtMDUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAyLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAzLTA2LTE0IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKDIuMisyLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAyLTEyLTIwIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMi4yKS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMi0wOC0xOSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iMy4yIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249Ij8/PyIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIzNSIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljYV9FU19QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX19QSE9ORUJPT0sgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQVRfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9ERV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0xVX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZWxfR1JfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9CRV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0dCX0VVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fSUVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19fVFJBRElUSU9OQUwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlldV9FU19QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZhX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZpX0ZJX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQkVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9GUl9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0xVX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2FfSUVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnbF9FU19QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhpX19ESVJFQ1QgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlpdF9JVF9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfQkVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubF9OTF9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXB0X1BUX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2hfWVUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3JfWVUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfX1BJTllJTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9DTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9ISyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9NTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9TRyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9UVyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9UV19TVFJPS0UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjM1IiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSU4gCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY2FfRVNfUFJFRVVSTyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9fUEhPTkVCT09LIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0FUX1BSRUVVUk8gCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfREVfUFJFRVVSTyAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQlkZV9MVV9QUkVFVVJPIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVsX0dSX1BSRUVVUk8gCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQkVfUFJFRVVSTyAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9HQl9FVVJPIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lFX1BSRUVVUk8gCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfX1RSQURJVElPTkFMIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0VTX1BSRUVVUk8gCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZXVfRVNfUFJFRVVSTyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9JTiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmaV9GSV9QUkVFVVJPIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0JFX1BSRUVVUk8gCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfRlJfUFJFRVVSTyAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlmcl9MVV9QUkVFVVJPIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdhX0lFX1BSRUVVUk8gCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ2xfRVNfUFJFRVVSTyAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQloaV9fRElSRUNUIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJaXRfSVRfUFJFRVVSTyAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX0JFX1BSRUVVUk8gCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbmxfTkxfUFJFRVVSTyAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlwdF9QVF9QUkVFVVJPIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNoIAorCQkJCQkJCXNoX1lVIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX1lVIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX19QSU5ZSU4gCisJCQkJCQkJemhfQ04gCisJCQkJCQkJemhfSEsgCisJCQkJCQkJemhfTU8gCisJCQkJCQkJemhfU0cgCisJCQkJCQkJemhfVFcgCisJCQkJCQkJemhfVFdfU1RST0tFIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHU8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMi0wNC0xNyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDEuNyktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHU8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjAuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDItMDQtMDMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAxLjcpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4wLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAyLTAyLTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMS43KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDEtMTItMDUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAxLjcpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS44LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAxLTA2LTEzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMS43KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuOCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDEtMDMtMTYiIHR5cGU9ImdhIi8+IDwhLS0gYXBwcm94IGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAxMDExMC50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAxLjcpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS43Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMC0xMC0yNSIgdHlwZT0iZ2EiLz4gPCEtLSBhcHByb3ggaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9tZWV0aW5ncy9ub3RlczIwMDAxMDI1LnR4dCAtLT4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDctMzEiIHR5cGU9ImdhIi8+IDwhLS0gYXBwcm94IGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDYxMy50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDYtMTMiIHR5cGU9ImdhIi8+IDwhLS0gIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDYxMy50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMC0wNC0xMSIgdHlwZT0iZ2EiLz4gPCEtLSAgaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9tZWV0aW5ncy9ub3RlczIwMDAwNDExLnR4dCAtLT4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS40LjEuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDUtMDkiIHR5cGU9ImdhIi8+IDwhLS0gIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDQyNS50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4xLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTA0LTI1IiB0eXBlPSJnYSIvPiA8IS0tICBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDA0MjUudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDMtMjEiIHR5cGU9ImdhIi8+IDwhLS0gIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDMyMS50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDItMjkiIHR5cGU9ImdhIi8+IDwhLS0gIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDIyOS50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4xLjEiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhmIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjYiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0FyYWIgCisJCQkJCQkJcGFfQXJhYl9QSyAKKwkJCQkJCQlwYV9HdXJ1IAorCQkJCQkJCXBhX0d1cnVfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX0lOIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8bmFtZXM+CisgICAgICAgICAgICAgICAgPG5hbWUgdHlwZT0iZnVsbCI+SW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBKYXZhPC9uYW1lPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9InNob3J0Ij5JQ1U0SjwvbmFtZT4KKyAgICAgICAgICAgIDwvbmFtZXM+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNTAuMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTItMTEtMDUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0OS4xIj4KKyAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMi0wMy0yMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuOC4xIj4KKyAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMS0wNy0yMCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuOCI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDUtMjUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjYuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDMtMTEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTAtMTItMDIiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNC4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0xMC0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC40LjIuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDctMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNC4xLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTA2LTIzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjQuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTAtMDQtMjgiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTAtMDMtMTciIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMi4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwOS0wNy0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4yLjAuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDktMDYtMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDktMDUtMDgiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA5ZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI5MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fTUQgcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIyMCIgdHlwZT0iY29sbGF0aW9uIj5hZiBhZl9OQSBhZl9aQSBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgCTxkYXRlIGRhdGU9IjIwMDktMDEtMTUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4aSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI4MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDgtMDctMDIiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4YyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI4MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuOC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNy0xMi0xMyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDdqIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjY2IiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDQiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy44Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNy0wOS0xNCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDdnIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjY2IiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDQiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy42LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA3LTA0LTMwIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTEwLTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQ1IiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwNSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjUiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTA5LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTAzLTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMyI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDYtMDItMjgiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDYtMDItMTUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjE5NyIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDUtMTAtMDUiIHR5cGU9ImdhIi8+IDwhLS0gYXBwcm94aW1hdGUgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDUtMDgtMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjE5NyIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjIiPiAKKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNC0xMS0yMyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjMwIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX1lVIHNyX0xhdG4gc3JfTGF0bl9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjYyIiB0eXBlPSJjb2xsYXRpb24iPmFyIGJlIGJnIGNhIGNzIGRhIGRlIGVsIGVuIGVuX0JFIGVvIGVzIGV0IGZhIGZhX0FGIGZpIGZvIGZyIGd1IGhlIGhpIGhyIGh1IGlzIGl0IGphIGtrIGtsIGtuIGtvIGx0IGx2IG1rIG1sIG1yIG10IG5iIG5uIG9tIG9yIHBhIHBsIHBzIHJvIHJ1IHNoIHNrIHNsIHNxIHNyIHN2IHRhIHRlIHRoIHRyIHVrIHZpIHpoIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjAiPiAKKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNC0wNi0xOSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjE5IiB0eXBlPSJmb3JtYXR0aW5nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFCisJCQkJCQkJYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00KKwkJCQkJCQlhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYQorCQkJCQkJCWNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSCisJCQkJCQkJZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTloKKwkJCQkJCQllbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTworCQkJCQkJCWVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBCisJCQkJCQkJZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEKKwkJCQkJCQlmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYQorCQkJCQkJCWdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1CisJCQkJCQkJaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYQorCQkJCQkJCWphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQKKwkJCQkJCQlsdF9MVCBsdiBsdl9MViBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTworCQkJCQkJCW5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGCisJCQkJCQkJcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kKKwkJCQkJCQlzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9ZVSBzdiBzdl9GSSBzdl9TRSBzdworCQkJCQkJCXN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrCisJCQkJCQkJdWtfVUEgdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfTU8gemhfU0cgemhfVFcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjU5IiB0eXBlPSJjb2xsYXRpb24iPmFyIGJlIGJnIGNhIGNzIGRhIGRlIGVsIGVuIGVuX0JFIGVvIGVzIGV0IGZhIGZhX0FGIGZpIGZvIGZyIGd1IGhlIGhpIGhyIGh1IGlzIGl0IGphIGtrIGtsIGtuIGtvIGx0IGx2IG1rIG1yIG10IG5iIG5uIHBhIHBsIHBzIHJvIHJ1IHNoIHNrIHNsIHNxIHNyIHN2IHRhIHRlIHRoIHRyIHVrIHZpIHpoIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDMtMTEtMDUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAzLTA2LTE0IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMi0xMi0yMCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iMy4yIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iLz4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0UgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDItMDgtMTkiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjAiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAxLTEyLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8IS0tIGF0IHNvbWUgcG9pbnQsIGljdTRqIGFuZCBpY3U0YyB2ZXJzaW9uIG51bWJlcnMgd2VyZSBicm91Z2h0IGludG8gc3luYyAtLT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjMuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDEtMDYtMTMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi44Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4xLjEiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhmIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGZyX1NOIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmUgbmVfSU4gbmVfTlAgbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqbmkiPgorICAgICAgICAgICAgPG5hbWVzPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9ImZ1bGwiPkludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgSk5JPC9uYW1lPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9InNob3J0Ij5JQ1U0Sk5JPC9uYW1lPgorICAgICAgICAgICAgPC9uYW1lcz4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTEwLTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjIiPiAKKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNC0xMS0yMyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMDYtMTkiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgPG5hbWVzPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9ImZ1bGwiPkphdmE8L25hbWU+CisgICAgICAgICAgICAgICAgPG5hbWUgdHlwZT0ic2hvcnQiPkphdmE8L25hbWU+CisgICAgICAgICAgICA8L25hbWVzPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuMy4xIi8+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS40LjIiPgorICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjEzNCIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNoIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX1lVIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuIGVuX1VTCisgICAgICA8L2ZlYXR1cmU+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTM0IiB0eXBlPSJjb2xsYXRpb24iPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBoaV9JTiBpdyBpd19JTCBqYSBqYV9KUCBrbyBrb19LUiB0aCB0aF9USCB0aF9USF9USCB6aCB6aF9DTiB6aF9ISyB6aF9UVyBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9JRSBlbl9JTiBlbl9OWiBlbl9aQSBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VWSBlc19WRSBldCBldF9FRSBmaSBmaV9GSSBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBociBocl9IUiBodSBodV9IVSBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBubCBubF9CRSBubF9OTCBubyBub19OTyBub19OT19OWSBwbCBwbF9QTCBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBzaCBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9ZVSBzdiBzdl9TRSB0ciB0cl9UUiB1ayB1a19VQSBlbiBlbl9VUworICAgICAgPC9mZWF0dXJlPgorICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iMy4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS41LjAiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjEzNSIgdHlwZT0ibG9jYWxlcyI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ1Mgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW5fVVMgZW48IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzUiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ1Mgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW5fVVMgZW48IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS42LjAiPgorICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjIxNSIgdHlwZT0iZm9ybWF0dGluZyI+emggdGgga28gaXcgdWsgdHIgc3Egc2sgcHQgcGwgbmwgbXMgbWsgbHYgbHQga2sgaXMgaHIgZ3UgZ2EgZnIgZXMgY3MgY2EgZXNfUFIgZW5fSEsgcHRfUFQgZXNfUFkgYXJfWUUgaHVfSFUgaW5fSUQgZW5fSUUgaGlfSU4gdGVfSU4gdGFfSU4gcGFfSU4gb3JfSU4gbXJfSU4gbWxfSU4ga25fSU4gZW5fSU4gamFfSlBfSlAgZW5fWkEgYXJfSVEgc3FfQUwgaXRfSVQgZXNfQVIgZGVfQVRfUFJFRVVSTyBzcl9SU19DeXJsIG5sX0JFIGZyX0JFIGVuX0JFX1BSRUVVUk8gYXJfSk8gamFfSlAgZXNfQk8gcHRfQlIgc3ZfU0VfUFJFRVVSTyB6aF9TRyBzbF9TSV9QUkVFVVJPIHNrX1NLIGZyX0NBIGVzX1NWIGZyX0NIIGVzX0NMIHpoX0NOIGFyX0tXIGVzX0NPIGVzX0NSIG5vX05PX05ZIHRoX1RIIGFyX0xCIGVsX0NZX1BSRUVVUk8gbXRfTVRfRVVSTyBjc19DWiB0cl9UUiBkZV9ERV9QUkVFVVJPIHpoX1RXIHNrX1NLX0VVUk8gbHRfTFRfUFJFRVVSTyBmcl9MVV9QUkVFVVJPIGRlX0xVIGx2X0xWX1BSRUVVUk8gZXNfRE8gdWtfVUEgYXJfTFkgYXJfTUEgc3JfTUUgZXNfVVMgZXNfRUMgZXRfRUVfUFJFRVVSTyBlc19VWSBtdF9NVCBlbl9NVCBjc19DWl9FVVJPIGVzX0VTIGNhX0VTIGVzX1ZFIG5sX05MX1BSRUVVUk8gbm9fTk8gZmlfRklfUFJFRVVSTyBmcl9GUiBlbl9OWiBodV9IVV9FVVJPIGFyX09NIGVsX0dSX1BSRUVVUk8gZXNfR1QgZW5fUEggcGxfUExfUFJFRVVSTyB2aSBqYSBhciB0ZSB0YSBzdiBzciBzbCBzaCBydSBybyBwYSBubyBtdCBtciBrbiBpdCBpbiBodSBmaSBldCBlbiBlbCBkZSBkYSBiZyBiZSB6aF9ISyBwdF9QVF9QUkVFVVJPIGVzX0hOIGhyX0hSIGVuX0dCX0VVUk8gaHVfSFVfUFJFRVVSTyBhcl9RQSBnYV9JRSBlbl9JRV9QUkVFVVJPIGl3X0lMIGFyX0FFIGd1X0lOIGJuX0lOIGlzX0lTIGl0X0lUX1BSRUVVUk8gcGxfUExfRVVSTyBkZV9BVCB0aF9USF9USCBlbl9BVSByb19STyBzcl9CQSBzcl9SUyBydV9SVSBubF9CRV9QUkVFVVJPIGZyX0JFX1BSRUVVUk8gZW5fQkUgYmdfQkcgYXJfQkggYXJfU0EgYXJfU0Qgc3ZfU0UgZW5fU0cgc2xfU0kgZGFfREtfRVVSTyBiZV9CWSBza19TS19QUkVFVVJPIGx0X0xUX0VVUk8gbHZfTFZfRVVSTyBlbl9DQSBpdF9DSCBkZV9DSCBhcl9TWSBrb19LUiBra19LWiBzcl9DUyBzaF9DUyBldF9FRV9FVVJPIGVsX0NZIGNzX0NaX1BSRUVVUk8gYXJfVE4gZGVfREUgc3ZfU0VfRVVSTyBkYV9ESyBsdF9MVCBmcl9MVSBkZV9MVV9QUkVFVVJPIGx2X0xWIGFyX0RaIG1rX01LIGVuX1VTIGV0X0VFIGFyX0VHIGVsX0NZX0VVUk8gbXRfTVRfUFJFRVVSTyBlc19NWCBtc19NWSBlc19FU19QUkVFVVJPIGNhX0VTX1BSRUVVUk8gc3JfUlNfTGF0biB2aV9WTiBlc19OSSBubF9OTCBuYl9OTyBmaV9GSSBmcl9GUl9QUkVFVVJPIGVuX0dCIGVsX0dSIGVzX1BBIGVzX1BFIHBsX1BMPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjE1IiB0eXBlPSJjb2xsYXRpb24iPnpoIHRoIGtvIGl3IHVrIHRyIHNxIHNrIHB0IHBsIG5sIG1zIG1rIGx2IGx0IGtrIGlzIGhyIGd1IGdhIGZyIGVzIGNzIGNhIGVzX1BSIGVuX0hLIHB0X1BUIGVzX1BZIGFyX1lFIGh1X0hVIGluX0lEIGVuX0lFIGhpX0lOIHRlX0lOIHRhX0lOIHBhX0lOIG9yX0lOIG1yX0lOIG1sX0lOIGtuX0lOIGVuX0lOIGphX0pQX0pQIGVuX1pBIGFyX0lRIHNxX0FMIGl0X0lUIGVzX0FSIGRlX0FUX1BSRUVVUk8gc3JfUlNfQ3lybCBubF9CRSBmcl9CRSBlbl9CRV9QUkVFVVJPIGFyX0pPIGphX0pQIGVzX0JPIHB0X0JSIHN2X1NFX1BSRUVVUk8gemhfU0cgc2xfU0lfUFJFRVVSTyBza19TSyBmcl9DQSBlc19TViBmcl9DSCBlc19DTCB6aF9DTiBhcl9LVyBlc19DTyBlc19DUiBub19OT19OWSB0aF9USCBhcl9MQiBlbF9DWV9QUkVFVVJPIG10X01UX0VVUk8gY3NfQ1ogdHJfVFIgZGVfREVfUFJFRVVSTyB6aF9UVyBza19TS19FVVJPIGx0X0xUX1BSRUVVUk8gZnJfTFVfUFJFRVVSTyBkZV9MVSBsdl9MVl9QUkVFVVJPIGVzX0RPIHVrX1VBIGFyX0xZIGFyX01BIHNyX01FIGVzX1VTIGVzX0VDIGV0X0VFX1BSRUVVUk8gZXNfVVkgbXRfTVQgZW5fTVQgY3NfQ1pfRVVSTyBlc19FUyBjYV9FUyBlc19WRSBubF9OTF9QUkVFVVJPIG5vX05PIGZpX0ZJX1BSRUVVUk8gZnJfRlIgZW5fTlogaHVfSFVfRVVSTyBhcl9PTSBlbF9HUl9QUkVFVVJPIGVzX0dUIGVuX1BIIHBsX1BMX1BSRUVVUk8gdmkgamEgYXIgdGUgdGEgc3Ygc3Igc2wgc2ggcnUgcm8gcGEgbm8gbXQgbXIga24gaXQgaW4gaHUgZmkgZXQgZW4gZWwgZGUgZGEgYmcgYmUgemhfSEsgcHRfUFRfUFJFRVVSTyBlc19ITiBocl9IUiBlbl9HQl9FVVJPIGh1X0hVX1BSRUVVUk8gYXJfUUEgZ2FfSUUgZW5fSUVfUFJFRVVSTyBpd19JTCBhcl9BRSBndV9JTiBibl9JTiBpc19JUyBpdF9JVF9QUkVFVVJPIHBsX1BMX0VVUk8gZGVfQVQgdGhfVEhfVEggZW5fQVUgcm9fUk8gc3JfQkEgc3JfUlMgcnVfUlUgbmxfQkVfUFJFRVVSTyBmcl9CRV9QUkVFVVJPIGVuX0JFIGJnX0JHIGFyX0JIIGFyX1NBIGFyX1NEIHN2X1NFIGVuX1NHIHNsX1NJIGRhX0RLX0VVUk8gYmVfQlkgc2tfU0tfUFJFRVVSTyBsdF9MVF9FVVJPIGx2X0xWX0VVUk8gZW5fQ0EgaXRfQ0ggZGVfQ0ggYXJfU1kga29fS1Iga2tfS1ogc3JfQ1Mgc2hfQ1MgZXRfRUVfRVVSTyBlbF9DWSBjc19DWl9QUkVFVVJPIGFyX1ROIGRlX0RFIHN2X1NFX0VVUk8gZGFfREsgbHRfTFQgZnJfTFUgZGVfTFVfUFJFRVVSTyBsdl9MViBhcl9EWiBta19NSyBlbl9VUyBldF9FRSBhcl9FRyBlbF9DWV9FVVJPIG10X01UX1BSRUVVUk8gZXNfTVggbXNfTVkgZXNfRVNfUFJFRVVSTyBjYV9FU19QUkVFVVJPIHNyX1JTX0xhdG4gdmlfVk4gZXNfTkkgbmxfTkwgbmJfTk8gZmlfRkkgZnJfRlJfUFJFRVVSTyBlbl9HQiBlbF9HUiBlc19QQSBlc19QRSBwbF9QTDwhLS1Ob3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuLS0+PC9mZWF0dXJlPgorICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjcuMCI+CisgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTU2IiB0eXBlPSJmb3JtYXR0aW5nIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgbXNfTVkgYXJfUUEgaXNfSVMgZmlfRkkgcGwgZW5fTVQgaXRfQ0ggbmxfQkUgYXJfU0EgYXJfSVEgZXNfUFIgZXNfQ0wgZmkgZGVfQVQgZGEgZW5fR0IgZXNfUEEgc3IgYXJfWUUgbWtfTUsgbWsgZW5fQ0EgdmlfVk4gbmxfTkwgZXNfVVMgemhfQ04gZXNfSE4gZW5fVVMgZnIgdGggYXIgYXJfTUEgbHYgZGUgaW5fSUQgaHIgZW5fWkEga29fS1IgYXJfVE4gaW4gamEgc3JfUlMgYmVfQlkgemhfVFcgYXJfU0QgcHQgaXMgamFfSlBfSlBfI3UtY2EtamFwYW5lc2UgZXNfQk8gYXJfRFogbXMgZXNfQVIgYXJfQUUgZnJfQ0Egc2wgZXMgbHRfTFQgc3JfTUVfI0xhdG4gYXJfU1kgcnVfUlUgZnJfQkUgZXNfRVMgYmcgaXdfSUwgc3YgZW4gaXcgZGFfREsgZXNfQ1IgemhfSEsgemggY2FfRVMgdGhfVEggdWtfVUEgZXNfRE8gZXNfVkUgcGxfUEwgYXJfTFkgYXJfSk8gaXQgdWsgaHVfSFUgZ2EgZXNfR1QgZXNfUFkgYmdfQkcgaHJfSFIgc3JfQkFfI0xhdG4gcm9fUk8gZnJfTFUgbm8gbHQgZW5fU0cgZXNfRUMgc3JfQkEgZXNfTkkgc2sgcnUgbXQgZXNfU1YgbmwgaGlfSU4gZXQgZWxfR1Igc2xfU0kgaXRfSVQgamFfSlAgZGVfTFUgZnJfQ0ggbXRfTVQgYXJfQkggc3Egdmkgc3JfTUUgcHRfQlIgbm9fTk8gZWwgZGVfQ0ggemhfU0cgYXJfS1cgYXJfRUcgZ2FfSUUgZXNfUEUgY3NfQ1ogdHJfVFIgY3MgZXNfVVkgZW5fSUUgZW5fSU4gYXJfT00gc3JfQ1MgY2EgYmUgc3JfXyNMYXRuIGtvIHNxX0FMIHB0X1BUIGx2X0xWIHNyX1JTXyNMYXRuIHNrX1NLIGVzX01YIGVuX0FVIG5vX05PX05ZIGVuX05aIHN2X1NFIHJvIGFyX0xCIGRlX0RFIHRoX1RIX1RIXyN1LW51LXRoYWkgdHIgZXNfQ08gZW5fUEggZXRfRUUgZWxfQ1kgaHUgZnJfRlIKKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxNTYiIHR5cGU9ImNvbGxhdGlvbiI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIG1zX01ZIGFyX1FBIGlzX0lTIGZpX0ZJIHBsIGVuX01UIGl0X0NIIG5sX0JFIGFyX1NBIGFyX0lRIGVzX1BSIGVzX0NMIGZpIGRlX0FUIGRhIGVuX0dCIGVzX1BBIHNyIGFyX1lFIG1rX01LIG1rIGVuX0NBIHZpX1ZOIG5sX05MIGVzX1VTIHpoX0NOIGVzX0hOIGVuX1VTIGZyIHRoIGFyIGFyX01BIGx2IGRlIGluX0lEIGhyIGVuX1pBIGtvX0tSIGFyX1ROIGluIGphIHNyX1JTIGJlX0JZIHpoX1RXIGFyX1NEIHB0IGlzIGphX0pQX0pQXyN1LWNhLWphcGFuZXNlIGVzX0JPIGFyX0RaIG1zIGVzX0FSIGFyX0FFIGZyX0NBIHNsIGVzIGx0X0xUIHNyX01FXyNMYXRuIGFyX1NZIHJ1X1JVIGZyX0JFIGVzX0VTIGJnIGl3X0lMIHN2IGVuIGl3IGRhX0RLIGVzX0NSIHpoX0hLIHpoIGNhX0VTIHRoX1RIIHVrX1VBIGVzX0RPIGVzX1ZFIHBsX1BMIGFyX0xZIGFyX0pPIGl0IHVrIGh1X0hVIGdhIGVzX0dUIGVzX1BZIGJnX0JHIGhyX0hSIHNyX0JBXyNMYXRuIHJvX1JPIGZyX0xVIG5vIGx0IGVuX1NHIGVzX0VDIHNyX0JBIGVzX05JIHNrIHJ1IG10IGVzX1NWIG5sIGhpX0lOIGV0IGVsX0dSIHNsX1NJIGl0X0lUIGphX0pQIGRlX0xVIGZyX0NIIG10X01UIGFyX0JIIHNxIHZpIHNyX01FIHB0X0JSIG5vX05PIGVsIGRlX0NIIHpoX1NHIGFyX0tXIGFyX0VHIGdhX0lFIGVzX1BFIGNzX0NaIHRyX1RSIGNzIGVzX1VZIGVuX0lFIGVuX0lOIGFyX09NIHNyX0NTIGNhIGJlIHNyX18jTGF0biBrbyBzcV9BTCBwdF9QVCBsdl9MViBzcl9SU18jTGF0biBza19TSyBlc19NWCBlbl9BVSBub19OT19OWSBlbl9OWiBzdl9TRSBybyBhcl9MQiBkZV9ERSB0aF9USF9USF8jdS1udS10aGFpIHRyIGVzX0NPIGVuX1BIIGV0X0VFIGVsX0NZIGh1IGZyX0ZSCisgICAgICA8L2ZlYXR1cmU+CisgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjYuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorCTwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamF2YS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9pbnB1dC9qYXZhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTllNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamF2YS54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgICAgICAgICAgIDxuYW1lcz4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJmdWxsIj5KYXZhPC9uYW1lPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9InNob3J0Ij5KYXZhPC9uYW1lPgorICAgICAgICAgICAgPC9uYW1lcz4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjMuMSIvPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4yIi8+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS41LjAiLz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjYuMCIvPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNy4wIi8+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamxheW91dC1pbnRyb2R1Y3Rpb24ueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamxheW91dC1pbnRyb2R1Y3Rpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YTMzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9pbnB1dC9qbGF5b3V0LWludHJvZHVjdGlvbi54bWwKQEAgLTAsMCArMSwyNSBAQAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgIDxyZWxlYXNlcz4KKwkJPHJlbGVhc2UgdmVyc2lvbj0iMS40LjIiPgorCQkJPGNhcGFiaWxpdGllcz4KKwkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPgorCQkJCQlBcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaQorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisJCTxyZWxlYXNlIHZlcnNpb249IjEuNS4wIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkgICAgK0tobXIgSGFuZyBTaW5oIFRpYnQKKwkJCQk8L2ZlYXR1cmU+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCSAgIDwvcmVsZWFzZXM+CisJPC9pY3VQcm9kdWN0PiAgCisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KKworCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9pbnB1dC9qdW5pY29kZS1pbnRyb2R1Y3Rpb24ueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvanVuaWNvZGUtaW50cm9kdWN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDA3MDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvanVuaWNvZGUtaW50cm9kdWN0aW9uLnhtbApAQCAtMCwwICsxLDM2IEBACis8IS0tIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iamF2YSI+CisgICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgIAorCQk8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMiI+CisJCQk8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjAiLz4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMS41LjAiPgorCQkJPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJCTxyZWxlYXNlIHZlcnNpb249IjEuNi4wIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCQk8cmVsZWFzZSB2ZXJzaW9uPSIxLjcuMCI+CisJCQk8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI2LjAiLz4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkgICA8L3JlbGVhc2VzPgorCTwvaWN1UHJvZHVjdD4gIAorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvbGF5b3V0LWludHJvZHVjdGlvbi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9pbnB1dC9sYXlvdXQtaW50cm9kdWN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzFkZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvbGF5b3V0LWludHJvZHVjdGlvbi54bWwKQEAgLTAsMCArMSw2MSBAQAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisgICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgIAorCQk8cmVsZWFzZSB2ZXJzaW9uPSIxLjciPgorCQkJPGNhcGFiaWxpdGllcz4KKwkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPgorCQkJCQlBcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdQorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMi4yIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkJK1VyZHUKKwkJCQk8L2ZlYXR1cmU+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJCTxyZWxlYXNlIHZlcnNpb249IjIuNiI+CisJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+CisJCQkJICAgICtIYW5zIEhhbnQgSnBhbgorCQkJCSAgICA8IS0tIENKSyBMYW5ndWFnZSBWYXJpYW50cz8gLS0+CisJCQkJPC9mZWF0dXJlPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjAiPgorCQkJPGNhcGFiaWxpdGllcz4KKwkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPgorCQkJCSAgICArTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpCisJCQkJPC9mZWF0dXJlPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjQiPgorCQkJPGNhcGFiaWxpdGllcz4KKwkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPgorCQkJCSAgICArS2htcgorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMy42Ij4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkgICAgK0hhbmcgU2luaCBUaWJ0CisJCQkJPC9mZWF0dXJlPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCSAgIDwvcmVsZWFzZXM+CisJPC9pY3VQcm9kdWN0PiAgCisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KKworCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV80XzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNF8yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTE4ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNF8yLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4yIj4KKyAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzQiIHR5cGU9ImZvcm1hdHRpbmciPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBoaV9JTiBpdyBpd19JTCBqYSBqYV9KUCBrbyBrb19LUiB0aCB0aF9USCB0aF9USF9USCB6aCB6aF9DTiB6aF9ISyB6aF9UVyBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9JRSBlbl9JTiBlbl9OWiBlbl9aQSBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VWSBlc19WRSBldCBldF9FRSBmaSBmaV9GSSBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBociBocl9IUiBodSBodV9IVSBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBubCBubF9CRSBubF9OTCBubyBub19OTyBub19OT19OWSBwbCBwbF9QTCBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBzaCBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9ZVSBzdiBzdl9TRSB0ciB0cl9UUiB1ayB1a19VQSBlbiBlbl9VUworICAgICAgPC9mZWF0dXJlPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjEzNCIgdHlwZT0iY29sbGF0aW9uIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2ggc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfWVUgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW4gZW5fVVMKKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzVfMC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV81XzAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTlhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV81XzAueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iamF2YSI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS41LjAiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjEzNSIgdHlwZT0ibG9jYWxlcyI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ1Mgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW5fVVMgZW48IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzUiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ1Mgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW5fVVMgZW48IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV82XzAueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNl8wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ5MDFjCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNl8wLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNi4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTUiIHR5cGU9ImZvcm1hdHRpbmciPnpoIHRoIGtvIGl3IHVrIHRyIHNxIHNrIHB0IHBsIG5sIG1zIG1rIGx2IGx0IGtrIGlzIGhyIGd1IGdhIGZyIGVzIGNzIGNhIGVzX1BSIGVuX0hLIHB0X1BUIGVzX1BZIGFyX1lFIGh1X0hVIGluX0lEIGVuX0lFIGhpX0lOIHRlX0lOIHRhX0lOIHBhX0lOIG9yX0lOIG1yX0lOIG1sX0lOIGtuX0lOIGVuX0lOIGphX0pQX0pQIGVuX1pBIGFyX0lRIHNxX0FMIGl0X0lUIGVzX0FSIGRlX0FUX1BSRUVVUk8gc3JfUlNfQ3lybCBubF9CRSBmcl9CRSBlbl9CRV9QUkVFVVJPIGFyX0pPIGphX0pQIGVzX0JPIHB0X0JSIHN2X1NFX1BSRUVVUk8gemhfU0cgc2xfU0lfUFJFRVVSTyBza19TSyBmcl9DQSBlc19TViBmcl9DSCBlc19DTCB6aF9DTiBhcl9LVyBlc19DTyBlc19DUiBub19OT19OWSB0aF9USCBhcl9MQiBlbF9DWV9QUkVFVVJPIG10X01UX0VVUk8gY3NfQ1ogdHJfVFIgZGVfREVfUFJFRVVSTyB6aF9UVyBza19TS19FVVJPIGx0X0xUX1BSRUVVUk8gZnJfTFVfUFJFRVVSTyBkZV9MVSBsdl9MVl9QUkVFVVJPIGVzX0RPIHVrX1VBIGFyX0xZIGFyX01BIHNyX01FIGVzX1VTIGVzX0VDIGV0X0VFX1BSRUVVUk8gZXNfVVkgbXRfTVQgZW5fTVQgY3NfQ1pfRVVSTyBlc19FUyBjYV9FUyBlc19WRSBubF9OTF9QUkVFVVJPIG5vX05PIGZpX0ZJX1BSRUVVUk8gZnJfRlIgZW5fTlogaHVfSFVfRVVSTyBhcl9PTSBlbF9HUl9QUkVFVVJPIGVzX0dUIGVuX1BIIHBsX1BMX1BSRUVVUk8gdmkgamEgYXIgdGUgdGEgc3Ygc3Igc2wgc2ggcnUgcm8gcGEgbm8gbXQgbXIga24gaXQgaW4gaHUgZmkgZXQgZW4gZWwgZGUgZGEgYmcgYmUgemhfSEsgcHRfUFRfUFJFRVVSTyBlc19ITiBocl9IUiBlbl9HQl9FVVJPIGh1X0hVX1BSRUVVUk8gYXJfUUEgZ2FfSUUgZW5fSUVfUFJFRVVSTyBpd19JTCBhcl9BRSBndV9JTiBibl9JTiBpc19JUyBpdF9JVF9QUkVFVVJPIHBsX1BMX0VVUk8gZGVfQVQgdGhfVEhfVEggZW5fQVUgcm9fUk8gc3JfQkEgc3JfUlMgcnVfUlUgbmxfQkVfUFJFRVVSTyBmcl9CRV9QUkVFVVJPIGVuX0JFIGJnX0JHIGFyX0JIIGFyX1NBIGFyX1NEIHN2X1NFIGVuX1NHIHNsX1NJIGRhX0RLX0VVUk8gYmVfQlkgc2tfU0tfUFJFRVVSTyBsdF9MVF9FVVJPIGx2X0xWX0VVUk8gZW5fQ0EgaXRfQ0ggZGVfQ0ggYXJfU1kga29fS1Iga2tfS1ogc3JfQ1Mgc2hfQ1MgZXRfRUVfRVVSTyBlbF9DWSBjc19DWl9QUkVFVVJPIGFyX1ROIGRlX0RFIHN2X1NFX0VVUk8gZGFfREsgbHRfTFQgZnJfTFUgZGVfTFVfUFJFRVVSTyBsdl9MViBhcl9EWiBta19NSyBlbl9VUyBldF9FRSBhcl9FRyBlbF9DWV9FVVJPIG10X01UX1BSRUVVUk8gZXNfTVggbXNfTVkgZXNfRVNfUFJFRVVSTyBjYV9FU19QUkVFVVJPIHNyX1JTX0xhdG4gdmlfVk4gZXNfTkkgbmxfTkwgbmJfTk8gZmlfRkkgZnJfRlJfUFJFRVVSTyBlbl9HQiBlbF9HUiBlc19QQSBlc19QRSBwbF9QTDwhLS1Ob3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuLS0+PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxNSIgdHlwZT0iY29sbGF0aW9uIj56aCB0aCBrbyBpdyB1ayB0ciBzcSBzayBwdCBwbCBubCBtcyBtayBsdiBsdCBrayBpcyBociBndSBnYSBmciBlcyBjcyBjYSBlc19QUiBlbl9ISyBwdF9QVCBlc19QWSBhcl9ZRSBodV9IVSBpbl9JRCBlbl9JRSBoaV9JTiB0ZV9JTiB0YV9JTiBwYV9JTiBvcl9JTiBtcl9JTiBtbF9JTiBrbl9JTiBlbl9JTiBqYV9KUF9KUCBlbl9aQSBhcl9JUSBzcV9BTCBpdF9JVCBlc19BUiBkZV9BVF9QUkVFVVJPIHNyX1JTX0N5cmwgbmxfQkUgZnJfQkUgZW5fQkVfUFJFRVVSTyBhcl9KTyBqYV9KUCBlc19CTyBwdF9CUiBzdl9TRV9QUkVFVVJPIHpoX1NHIHNsX1NJX1BSRUVVUk8gc2tfU0sgZnJfQ0EgZXNfU1YgZnJfQ0ggZXNfQ0wgemhfQ04gYXJfS1cgZXNfQ08gZXNfQ1Igbm9fTk9fTlkgdGhfVEggYXJfTEIgZWxfQ1lfUFJFRVVSTyBtdF9NVF9FVVJPIGNzX0NaIHRyX1RSIGRlX0RFX1BSRUVVUk8gemhfVFcgc2tfU0tfRVVSTyBsdF9MVF9QUkVFVVJPIGZyX0xVX1BSRUVVUk8gZGVfTFUgbHZfTFZfUFJFRVVSTyBlc19ETyB1a19VQSBhcl9MWSBhcl9NQSBzcl9NRSBlc19VUyBlc19FQyBldF9FRV9QUkVFVVJPIGVzX1VZIG10X01UIGVuX01UIGNzX0NaX0VVUk8gZXNfRVMgY2FfRVMgZXNfVkUgbmxfTkxfUFJFRVVSTyBub19OTyBmaV9GSV9QUkVFVVJPIGZyX0ZSIGVuX05aIGh1X0hVX0VVUk8gYXJfT00gZWxfR1JfUFJFRVVSTyBlc19HVCBlbl9QSCBwbF9QTF9QUkVFVVJPIHZpIGphIGFyIHRlIHRhIHN2IHNyIHNsIHNoIHJ1IHJvIHBhIG5vIG10IG1yIGtuIGl0IGluIGh1IGZpIGV0IGVuIGVsIGRlIGRhIGJnIGJlIHpoX0hLIHB0X1BUX1BSRUVVUk8gZXNfSE4gaHJfSFIgZW5fR0JfRVVSTyBodV9IVV9QUkVFVVJPIGFyX1FBIGdhX0lFIGVuX0lFX1BSRUVVUk8gaXdfSUwgYXJfQUUgZ3VfSU4gYm5fSU4gaXNfSVMgaXRfSVRfUFJFRVVSTyBwbF9QTF9FVVJPIGRlX0FUIHRoX1RIX1RIIGVuX0FVIHJvX1JPIHNyX0JBIHNyX1JTIHJ1X1JVIG5sX0JFX1BSRUVVUk8gZnJfQkVfUFJFRVVSTyBlbl9CRSBiZ19CRyBhcl9CSCBhcl9TQSBhcl9TRCBzdl9TRSBlbl9TRyBzbF9TSSBkYV9ES19FVVJPIGJlX0JZIHNrX1NLX1BSRUVVUk8gbHRfTFRfRVVSTyBsdl9MVl9FVVJPIGVuX0NBIGl0X0NIIGRlX0NIIGFyX1NZIGtvX0tSIGtrX0taIHNyX0NTIHNoX0NTIGV0X0VFX0VVUk8gZWxfQ1kgY3NfQ1pfUFJFRVVSTyBhcl9UTiBkZV9ERSBzdl9TRV9FVVJPIGRhX0RLIGx0X0xUIGZyX0xVIGRlX0xVX1BSRUVVUk8gbHZfTFYgYXJfRFogbWtfTUsgZW5fVVMgZXRfRUUgYXJfRUcgZWxfQ1lfRVVSTyBtdF9NVF9QUkVFVVJPIGVzX01YIG1zX01ZIGVzX0VTX1BSRUVVUk8gY2FfRVNfUFJFRVVSTyBzcl9SU19MYXRuIHZpX1ZOIGVzX05JIG5sX05MIG5iX05PIGZpX0ZJIGZyX0ZSX1BSRUVVUk8gZW5fR0IgZWxfR1IgZXNfUEEgZXNfUEUgcGxfUEw8IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNl8wXzI2LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzZfMF8yNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkOWI4YgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzZfMF8yNi54bWwKQEAgLTAsMCArMSwyNCBAQAorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKworPGljdUluZm8+CisgPGljdVByb2R1Y3RzPgorICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgIDxyZWxlYXNlcz4KKyAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjYuMCI+CisgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTUyIiB0eXBlPSJmb3JtYXR0aW5nIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgamFfSlAgZXNfUEUgZW4gamFfSlBfSlAgZXNfUEEgc3JfQkEgbWsgZXNfR1QgYXJfQUUgbm9fTk8gc3FfQUwgYmcgYXJfSVEgYXJfWUUgaHUgcHRfUFQgZWxfQ1kgYXJfUUEgbWtfTUsgc3YgZGVfQ0ggZW5fVVMgZmlfRkkgaXMgY3MgZW5fTVQgc2xfU0kgc2tfU0sgaXQgdHJfVFIgemggdGggYXJfU0Egbm8gZW5fR0Igc3JfQ1MgbHQgcm8gZW5fTlogbm9fTk9fTlkgbHRfTFQgZXNfTkkgbmwgZ2FfSUUgZnJfQkUgZXNfRVMgYXJfTEIga28gZnJfQ0EgZXRfRUUgYXJfS1cgc3JfUlMgZXNfVVMgZXNfTVggYXJfU0QgaW5fSUQgcnUgbHYgZXNfVVkgbHZfTFYgaXcgcHRfQlIgYXJfU1kgaHIgZXQgZXNfRE8gZnJfQ0ggaGlfSU4gZXNfVkUgYXJfQkggZW5fUEggYXJfVE4gZmkgZGVfQVQgZXMgbmxfTkwgZXNfRUMgemhfVFcgYXJfSk8gYmUgaXNfSVMgZXNfQ08gZXNfQ1IgZXNfQ0wgYXJfRUcgZW5fWkEgdGhfVEggZWxfR1IgaXRfSVQgY2EgaHVfSFUgZnIgZW5fSUUgdWtfVUEgcGxfUEwgZnJfTFUgbmxfQkUgZW5fSU4gY2FfRVMgYXJfTUEgZXNfQk8gZW5fQVUgc3IgemhfU0cgcHQgdWsgZXNfU1YgcnVfUlUga29fS1IgdmkgYXJfRFogdmlfVk4gc3JfTUUgc3EgYXJfTFkgYXIgemhfQ04gYmVfQlkgemhfSEsgamEgaXdfSUwgYmdfQkcgaW4gbXRfTVQgZXNfUFkgc2wgZnJfRlIgY3NfQ1ogaXRfQ0ggcm9fUk8gZXNfUFIgZW5fQ0EgZGVfREUgZ2EgZGVfTFUgZGUgZXNfQVIgc2sgbXNfTVkgaHJfSFIgZW5fU0cgZGEgbXQgcGwgYXJfT00gdHIgdGhfVEhfVEggZWwgbXMgc3ZfU0UgZGFfREsgZXNfSE4KKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxNTIiIHR5cGU9ImNvbGxhdGlvbiI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIGphX0pQIGVzX1BFIGVuIGphX0pQX0pQIGVzX1BBIHNyX0JBIG1rIGVzX0dUIGFyX0FFIG5vX05PIHNxX0FMIGJnIGFyX0lRIGFyX1lFIGh1IHB0X1BUIGVsX0NZIGFyX1FBIG1rX01LIHN2IGRlX0NIIGVuX1VTIGZpX0ZJIGlzIGNzIGVuX01UIHNsX1NJIHNrX1NLIGl0IHRyX1RSIHpoIHRoIGFyX1NBIG5vIGVuX0dCIHNyX0NTIGx0IHJvIGVuX05aIG5vX05PX05ZIGx0X0xUIGVzX05JIG5sIGdhX0lFIGZyX0JFIGVzX0VTIGFyX0xCIGtvIGZyX0NBIGV0X0VFIGFyX0tXIHNyX1JTIGVzX1VTIGVzX01YIGFyX1NEIGluX0lEIHJ1IGx2IGVzX1VZIGx2X0xWIGl3IHB0X0JSIGFyX1NZIGhyIGV0IGVzX0RPIGZyX0NIIGhpX0lOIGVzX1ZFIGFyX0JIIGVuX1BIIGFyX1ROIGZpIGRlX0FUIGVzIG5sX05MIGVzX0VDIHpoX1RXIGFyX0pPIGJlIGlzX0lTIGVzX0NPIGVzX0NSIGVzX0NMIGFyX0VHIGVuX1pBIHRoX1RIIGVsX0dSIGl0X0lUIGNhIGh1X0hVIGZyIGVuX0lFIHVrX1VBIHBsX1BMIGZyX0xVIG5sX0JFIGVuX0lOIGNhX0VTIGFyX01BIGVzX0JPIGVuX0FVIHNyIHpoX1NHIHB0IHVrIGVzX1NWIHJ1X1JVIGtvX0tSIHZpIGFyX0RaIHZpX1ZOIHNyX01FIHNxIGFyX0xZIGFyIHpoX0NOIGJlX0JZIHpoX0hLIGphIGl3X0lMIGJnX0JHIGluIG10X01UIGVzX1BZIHNsIGZyX0ZSIGNzX0NaIGl0X0NIIHJvX1JPIGVzX1BSIGVuX0NBIGRlX0RFIGdhIGRlX0xVIGRlIGVzX0FSIHNrIG1zX01ZIGhyX0hSIGVuX1NHIGRhIG10IHBsIGFyX09NIHRyIHRoX1RIX1RIIGVsIG1zIHN2X1NFIGRhX0RLIGVzX0hOCisgICAgICA8L2ZlYXR1cmU+CisgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgIDwvcmVsZWFzZT4KKyAgIDwvcmVsZWFzZXM+CisgIDwvaWN1UHJvZHVjdD4KKyA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfN18wLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzdfMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmZmQ5MQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzdfMC54bWwKQEAgLTAsMCArMSwyNCBAQAorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKworPGljdUluZm8+CisgPGljdVByb2R1Y3RzPgorICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgIDxyZWxlYXNlcz4KKyAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjcuMCI+CisgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTU2IiB0eXBlPSJmb3JtYXR0aW5nIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgbXNfTVkgYXJfUUEgaXNfSVMgZmlfRkkgcGwgZW5fTVQgaXRfQ0ggbmxfQkUgYXJfU0EgYXJfSVEgZXNfUFIgZXNfQ0wgZmkgZGVfQVQgZGEgZW5fR0IgZXNfUEEgc3IgYXJfWUUgbWtfTUsgbWsgZW5fQ0EgdmlfVk4gbmxfTkwgZXNfVVMgemhfQ04gZXNfSE4gZW5fVVMgZnIgdGggYXIgYXJfTUEgbHYgZGUgaW5fSUQgaHIgZW5fWkEga29fS1IgYXJfVE4gaW4gamEgc3JfUlMgYmVfQlkgemhfVFcgYXJfU0QgcHQgaXMgamFfSlBfSlBfI3UtY2EtamFwYW5lc2UgZXNfQk8gYXJfRFogbXMgZXNfQVIgYXJfQUUgZnJfQ0Egc2wgZXMgbHRfTFQgc3JfTUVfI0xhdG4gYXJfU1kgcnVfUlUgZnJfQkUgZXNfRVMgYmcgaXdfSUwgc3YgZW4gaXcgZGFfREsgZXNfQ1IgemhfSEsgemggY2FfRVMgdGhfVEggdWtfVUEgZXNfRE8gZXNfVkUgcGxfUEwgYXJfTFkgYXJfSk8gaXQgdWsgaHVfSFUgZ2EgZXNfR1QgZXNfUFkgYmdfQkcgaHJfSFIgc3JfQkFfI0xhdG4gcm9fUk8gZnJfTFUgbm8gbHQgZW5fU0cgZXNfRUMgc3JfQkEgZXNfTkkgc2sgcnUgbXQgZXNfU1YgbmwgaGlfSU4gZXQgZWxfR1Igc2xfU0kgaXRfSVQgamFfSlAgZGVfTFUgZnJfQ0ggbXRfTVQgYXJfQkggc3Egdmkgc3JfTUUgcHRfQlIgbm9fTk8gZWwgZGVfQ0ggemhfU0cgYXJfS1cgYXJfRUcgZ2FfSUUgZXNfUEUgY3NfQ1ogdHJfVFIgY3MgZXNfVVkgZW5fSUUgZW5fSU4gYXJfT00gc3JfQ1MgY2EgYmUgc3JfXyNMYXRuIGtvIHNxX0FMIHB0X1BUIGx2X0xWIHNyX1JTXyNMYXRuIHNrX1NLIGVzX01YIGVuX0FVIG5vX05PX05ZIGVuX05aIHN2X1NFIHJvIGFyX0xCIGRlX0RFIHRoX1RIX1RIXyN1LW51LXRoYWkgdHIgZXNfQ08gZW5fUEggZXRfRUUgZWxfQ1kgaHUgZnJfRlIKKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxNTYiIHR5cGU9ImNvbGxhdGlvbiI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIG1zX01ZIGFyX1FBIGlzX0lTIGZpX0ZJIHBsIGVuX01UIGl0X0NIIG5sX0JFIGFyX1NBIGFyX0lRIGVzX1BSIGVzX0NMIGZpIGRlX0FUIGRhIGVuX0dCIGVzX1BBIHNyIGFyX1lFIG1rX01LIG1rIGVuX0NBIHZpX1ZOIG5sX05MIGVzX1VTIHpoX0NOIGVzX0hOIGVuX1VTIGZyIHRoIGFyIGFyX01BIGx2IGRlIGluX0lEIGhyIGVuX1pBIGtvX0tSIGFyX1ROIGluIGphIHNyX1JTIGJlX0JZIHpoX1RXIGFyX1NEIHB0IGlzIGphX0pQX0pQXyN1LWNhLWphcGFuZXNlIGVzX0JPIGFyX0RaIG1zIGVzX0FSIGFyX0FFIGZyX0NBIHNsIGVzIGx0X0xUIHNyX01FXyNMYXRuIGFyX1NZIHJ1X1JVIGZyX0JFIGVzX0VTIGJnIGl3X0lMIHN2IGVuIGl3IGRhX0RLIGVzX0NSIHpoX0hLIHpoIGNhX0VTIHRoX1RIIHVrX1VBIGVzX0RPIGVzX1ZFIHBsX1BMIGFyX0xZIGFyX0pPIGl0IHVrIGh1X0hVIGdhIGVzX0dUIGVzX1BZIGJnX0JHIGhyX0hSIHNyX0JBXyNMYXRuIHJvX1JPIGZyX0xVIG5vIGx0IGVuX1NHIGVzX0VDIHNyX0JBIGVzX05JIHNrIHJ1IG10IGVzX1NWIG5sIGhpX0lOIGV0IGVsX0dSIHNsX1NJIGl0X0lUIGphX0pQIGRlX0xVIGZyX0NIIG10X01UIGFyX0JIIHNxIHZpIHNyX01FIHB0X0JSIG5vX05PIGVsIGRlX0NIIHpoX1NHIGFyX0tXIGFyX0VHIGdhX0lFIGVzX1BFIGNzX0NaIHRyX1RSIGNzIGVzX1VZIGVuX0lFIGVuX0lOIGFyX09NIHNyX0NTIGNhIGJlIHNyX18jTGF0biBrbyBzcV9BTCBwdF9QVCBsdl9MViBzcl9SU18jTGF0biBza19TSyBlc19NWCBlbl9BVSBub19OT19OWSBlbl9OWiBzdl9TRSBybyBhcl9MQiBkZV9ERSB0aF9USF9USF8jdS1udS10aGFpIHRyIGVzX0NPIGVuX1BIIGV0X0VFIGVsX0NZIGh1IGZyX0ZSCisgICAgICA8L2ZlYXR1cmU+CisgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgIDwvcmVsZWFzZT4KKyAgIDwvcmVsZWFzZXM+CisgIDwvaWN1UHJvZHVjdD4KKyA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTAxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfMi54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzQueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfNC54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzYueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzg3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfNi54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzZfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfNl8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjVhY2NmCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzZfMS54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjEiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iLz4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfOC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfOC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NWUzYgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl84LnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjgiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzAueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDYyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfMC54bWwKQEAgLTAsMCArMSw0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxOSIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICBhZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRQorCQkJCQkJCWFyX0JIIGFyX0RaIGFyX0VHIGFyX0lOIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NCisJCQkJCQkJYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EKKwkJCQkJCQljYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUgorCQkJCQkJCWVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aCisJCQkJCQkJZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8KKwkJCQkJCQllc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQQorCQkJCQkJCWVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhCisJCQkJCQkJZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EKKwkJCQkJCQlnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodQorCQkJCQkJCWh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEKKwkJCQkJCQlqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0CisJCQkJCQkJbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8KKwkJCQkJCQlubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRgorCQkJCQkJCXB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJCisJCQkJCQkJc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfWVUgc3Ygc3ZfRkkgc3ZfU0Ugc3cKKwkJCQkJCQlzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1aworCQkJCQkJCXVrX1VBIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX01PIHpoX1NHIHpoX1RXCisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSI1OSIgdHlwZT0iY29sbGF0aW9uIj5hciBiZSBiZyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9CRSBlbyBlcyBldCBmYSBmYV9BRiBmaSBmbyBmciBndSBoZSBoaSBociBodSBpcyBpdCBqYSBrayBrbCBrbiBrbyBsdCBsdiBtayBtciBtdCBuYiBubiBwYSBwbCBwcyBybyBydSBzaCBzayBzbCBzcSBzciBzdiB0YSB0ZSB0aCB0ciB1ayB2aSB6aCB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM18yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM18yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTEyYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzIueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuMiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMzAiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lOIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfWVUgc3JfTGF0biBzcl9MYXRuX1lVIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iNjIiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW5fQkUgZW8gZXMgZXQgZmEgZmFfQUYgZmkgZm8gZnIgZ3UgaGUgaGkgaHIgaHUgaXMgaXQgamEga2sga2wga24ga28gbHQgbHYgbWsgbWwgbXIgbXQgbmIgbm4gb20gb3IgcGEgcGwgcHMgcm8gcnUgc2ggc2sgc2wgc3Egc3Igc3YgdGEgdGUgdGggdHIgdWsgdmkgemggemhfSEsgemhfSGFudCB6aF9NTyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyZDk3NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180LnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0NTIHNyX0xhdG4gc3JfTGF0bl9DUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9QSyB1eiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTk3IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lOIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX0JBIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX1lVIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfU0cgemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJkOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfMS54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjE5NyIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4Yzg5YQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzIueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjE5NyIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzMueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfMy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkNzFkMQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzMueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC4zIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzQueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfNC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkNzFkMQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzQueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC4zIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzUueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfNS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzUueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC41Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM182LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM182LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWM0NTMwCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzYueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQ1IiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwNSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzgueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzJkODgKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfOC54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy44Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3ZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjA0IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzhfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfOF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNhZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzhfMS54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy44LjEiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDdqIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjY2IiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDQiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2MmVkMQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8wLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhjIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGZyX1NOIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmUgbmVfSU4gbmVfTlAgbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMF8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8wXzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWI3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMF8xLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAuMSI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGkiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMV8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8xXzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNWZkODQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMV8xLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjEuMSI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGYiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUxNDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzIueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOWciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyOTIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX01EIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMjAiIHR5cGU9ImNvbGxhdGlvbiI+YWYgYWZfTkEgYWZfWkEgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzUwXzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC81MF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTBmYzlmCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC81MF8xLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI1MC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjYuMiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI2LjIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDEyaCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjU5MyIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjQwMSIgdHlwZT0iY29sbGF0aW9uIj5hZiBhZl9OQSBhZl9aQSBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkeiBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAga2Ega2FfR0Uga2sga2tfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBteSBteV9NTSBuYiBuYl9OTyBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJvIHJvX01EIHJvX1JPIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL29sZC14bWxzLnRhci5iejIgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9vbGQteG1scy50YXIuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2NkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9vbGQteG1scy50YXIuYnoyCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjIxNWU5Y2M2NmI3OTYyZjUzYTA4ZGI1NjQ1NTg1NTMzNjZmMDZmNjRlYjZkODUwOGEzZmYyZGFjNDdjOTBjYjYKK3NpemUgOTcxMwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vcmVhZG1lLnR4dCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlZTVmYQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3JlYWRtZS50eHQKQEAgLTAsMCArMSwzIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworTm90ZTogdGhpcyBpcyBhIGJpdCBvZiBhIG1lc3MgcmlnaHQgbm93LgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vdGVzdHhtbC5jcHAgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi90ZXN0eG1sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhmZmRjCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vdGVzdHhtbC5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgInhtbG91dC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ1b3B0aW9ucy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcHV0aWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2wuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjYWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91cmVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gMikgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4xKSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjUpKQorI2luY2x1ZGUgInVuaWNvZGUvdWNsZWFuLmgiCisjZW5kaWYKKworCitzdGF0aWMgY2hhciAqcHJvZ05hbWU7CitzdGF0aWMgVU9wdGlvbiBvcHRpb25zW109eworICAgIFVPUFRJT05fSEVMUF9ILCAgICAgICAgICAgICAvKiAwICovCisgICAgVU9QVElPTl9IRUxQX1FVRVNUSU9OX01BUkssIC8qIDEgKi8KKyAgICBVT1BUSU9OX1ZFUkJPU0UsICAgICAgICAgICAgLyogMiAqLworICAgIFVPUFRJT05fSUNVREFUQURJUiwgICAgICAgICAvKiAzICovCisgICAgVU9QVElPTl9ERVNURElSLCAgICAgICAgICAgIC8qIDQgKi8KKyAgICBVT1BUSU9OX0NPUFlSSUdIVCwgICAgICAgICAgLyogNSAqLworfTsKKworY29uc3QgY2hhciAqdV9lcnJvck5hbWVTaG9ydChVRXJyb3JDb2RlIGNvZGUpIHsKKyAgICBzd2l0Y2goY29kZSkgeworICAgICAgICBjYXNlIFVfWkVST19FUlJPUjogcmV0dXJuICJvayI7CisgICAgICAgIGNhc2UgVV9NSVNTSU5HX1JFU09VUkNFX0VSUk9SOiByZXR1cm4gIm1pc3NpbmciOworICAgICAgICBkZWZhdWx0OiAgIHJldHVybiB1X2Vycm9yTmFtZShjb2RlKTsKKyAgICB9Cit9CisKK3ZvaWQgdXNhZ2VBbmREaWUoaW50IHJldENvZGUpIHsKKyAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgWy12XSBbLW9wdGlvbnNdIC1vIG91dHB1dC1maWxlIGRpY3Rpb25hcnktZmlsZVxuIiwgcHJvZ05hbWUpOworICAgICAgICBwcmludGYoIlx0UmVhZCBpbiB3b3JkIGxpc3QgYW5kIHdyaXRlIG91dCBjb21wYWN0IHRyaWUgZGljdGlvbmFyeVxuIgorICAgICAgICAgICAgIm9wdGlvbnM6XG4iCisgICAgICAgICAgICAiXHQtaCBvciAtPyBvciAtLWhlbHAgIHRoaXMgdXNhZ2UgdGV4dFxuIgorICAgICAgICAgICAgIlx0LVYgb3IgLS12ZXJzaW9uICAgICBzaG93IGEgdmVyc2lvbiBtZXNzYWdlXG4iCisgICAgICAgICAgICAiXHQtYyBvciAtLWNvcHlyaWdodCAgIGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlXG4iCisgICAgICAgICAgICAiXHQtdiBvciAtLXZlcmJvc2UgICAgIHR1cm4gb24gdmVyYm9zZSBvdXRwdXRcbiIKKyAgICAgICAgICAgICJcdC1pIG9yIC0taWN1ZGF0YWRpciAgZGlyZWN0b3J5IGZvciBsb2NhdGluZyBhbnkgbmVlZGVkIGludGVybWVkaWF0ZSBkYXRhIGZpbGVzLFxuIgorICAgICAgICAgICAgIlx0ICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBwYXRoLCBkZWZhdWx0cyB0byAlc1xuIgorICAgICAgICAgICAgIlx0LWQgb3IgLS1kZXN0ZGlyICAgICBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIGZvbGxvd2VkIGJ5IHRoZSBwYXRoXG4iLAorICAgICAgICAgICAgdV9nZXREYXRhRGlyZWN0b3J5KCkpOworICAgICAgICBleGl0IChyZXRDb2RlKTsKK30KKworLypVX0NBUEkgdm9pZCBVX0VYUE9SVDIqLworc3RhdGljIHZvaWQgX3ZlcnNpb25Gcm9tVVN0cmluZyhVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LCBjb25zdCBVQ2hhciAqdmVyc2lvblN0cmluZykgeworICAgIGlmKHZlcnNpb25BcnJheT09TlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYodmVyc2lvblN0cmluZyE9TlVMTCkgeworICAgICAgICBjaGFyIHZlcmNoYXJzW1VfTUFYX1ZFUlNJT05fTEVOR1RIKzFdOworICAgICAgICB1X1VDaGFyc1RvQ2hhcnModmVyc2lvblN0cmluZywgdmVyY2hhcnMsIFVfTUFYX1ZFUlNJT05fTEVOR1RIKTsKKyAgICAgICAgdV92ZXJzaW9uRnJvbVN0cmluZyh2ZXJzaW9uQXJyYXksIHZlcmNoYXJzKTsKKyAgICB9Cit9CisKKy8qVV9DQVBJIHZvaWQgVV9FWFBPUlQyKi8KK3N0YXRpYyB2b2lkIF9nZXRDTERSVmVyc2lvbkRpcmVjdChVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LCBVRXJyb3JDb2RlICpzdGF0dXMpIHsKKyAgICBVUmVzb3VyY2VCdW5kbGUgKnJlc2luZHg7CisgICAgcmVzaW5keCA9IHVyZXNfb3BlbkRpcmVjdChOVUxMLCAic3VwcGxlbWVudGFsRGF0YSIsIHN0YXR1cyk7CisgICAgaWYoIVVfRkFJTFVSRSgqc3RhdHVzKSkgeworLy8gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyOiBjb3VsZCBub3Qgb3BlbiByZXNfaW5kZXgsICVzXG4iLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKy8vICAgICAgICBmZmx1c2goc3RkZXJyKTsKKy8vICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFVDaGFyICpjbGRydmVyOworICAgICAgICBpbnQzMl90IGxlbjsKKyAgICAgICAgY2xkcnZlciA9IHVyZXNfZ2V0U3RyaW5nQnlLZXkocmVzaW5keCwgImNsZHJWZXJzaW9uIiwgJmxlbiwgc3RhdHVzKTsKKyAgICAgICAgaWYoIVVfRkFJTFVSRSgqc3RhdHVzKSkgeworLy8gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUjogY291bGQgbm90IGxvYWQgQ0xEUlZlcnNpb24ga2V5OiAlc1xuIiwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworLy8gICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKy8vICAgICAgICB9IGVsc2UgeworLy8gICAgICAgICAgICBVVmVyc2lvbkluZm8gY2xkclZlcnNpb247CisgICAgICAgICAgICBfdmVyc2lvbkZyb21VU3RyaW5nKHZlcnNpb25BcnJheSwgY2xkcnZlcik7CisvLyAgICAgICAgICAgIHN0cmNweSh0bXAsICJ0eXBlPVwiY2xkclwiIHZlcnNpb249XCIiKTsKKy8vICAgICAgICAgICAgdV92ZXJzaW9uVG9TdHJpbmcoY2xkclZlcnNpb24sIHRtcCtzdHJsZW4odG1wKSk7CisvLyAgICAgICAgICAgIHN0cmNhdCh0bXAsICJcIiIpOworLy8gICAgICAgICAgICBYTUxFbGVtZW50IGljdURhdGEoeGYsICJmZWF0dXJlIiwgdG1wLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICB1cmVzX2Nsb3NlKHJlc2luZHgpOworICAgIH0KK30KKworLypVX0NBUEkgdm9pZCBVX0VYUE9SVDIqLworc3RhdGljIHZvaWQgX2dldENMRFJWZXJzaW9uT2xkKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIFVSZXNvdXJjZUJ1bmRsZSAqcmVzaW5keDsKKyAgICByZXNpbmR4ID0gdXJlc19vcGVuRGlyZWN0KE5VTEwsICJyZXNfaW5kZXgiLCBzdGF0dXMpOworICAgIGlmKCFVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKy8vICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycjogY291bGQgbm90IG9wZW4gcmVzX2luZGV4LCAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisvLyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisvLyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBVQ2hhciAqY2xkcnZlcjsKKyAgICAgICAgaW50MzJfdCBsZW47CisgICAgICAgIGNsZHJ2ZXIgPSB1cmVzX2dldFN0cmluZ0J5S2V5KHJlc2luZHgsICJDTERSVmVyc2lvbiIsICZsZW4sIHN0YXR1cyk7CisgICAgICAgIGlmKCFVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKy8vICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlI6IGNvdWxkIG5vdCBsb2FkIENMRFJWZXJzaW9uIGtleTogJXNcbiIsIHVfZXJyb3JOYW1lKCpzdGF0dXMpKTsKKy8vICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisvLyAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgVVZlcnNpb25JbmZvIGNsZHJWZXJzaW9uOworICAgICAgICAgICAgX3ZlcnNpb25Gcm9tVVN0cmluZyh2ZXJzaW9uQXJyYXksIGNsZHJ2ZXIpOworLy8gICAgICAgICAgICBzdHJjcHkodG1wLCAidHlwZT1cImNsZHJcIiB2ZXJzaW9uPVwiIik7CisvLyAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKGNsZHJWZXJzaW9uLCB0bXArc3RybGVuKHRtcCkpOworLy8gICAgICAgICAgICBzdHJjYXQodG1wLCAiXCIiKTsKKy8vICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCwgVFJVRSk7CisgICAgICAgIH0KKyAgICAgICAgdXJlc19jbG9zZShyZXNpbmR4KTsKKyAgICB9Cit9CisKK2ludCBjb3VsZF9vcGVuKGNvbnN0IGNoYXIgKmxvY2FsZSwgY2hhciAqY29tbWVudHMpIHsKKyAgICBjaGFyIHRtcFsyMDBdOworICAgIFVSZXNvdXJjZUJ1bmRsZSAqcmIgPSBOVUxMOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHJiID0gdXJlc19vcGVuKE5VTEwsIGxvY2FsZSwgJnN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgc3ByaW50Zih0bXAsICIgb3BlbjolcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworICAgICAgICBzdHJjYXQoY29tbWVudHMsIHRtcCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHVyZXNfY2xvc2UocmIpOworICAgICAgICBzcHJpbnRmKHRtcCwgIiBvcGVuOiVzIiwgdV9lcnJvck5hbWVTaG9ydChzdGF0dXMpKTsKKyAgICAgICAgc3RyY2F0KGNvbW1lbnRzLCB0bXApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CitpbnQgY29sX2NvdWxkX29wZW4oY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICpjb21tZW50cykgeworICAgIGNoYXIgdG1wWzIwMF07CisgICAgVUNvbGxhdG9yICpyYiA9IE5VTEw7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgcmIgPSB1Y29sX29wZW4obG9jYWxlLCAmc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgICBzcHJpbnRmKHRtcCwgIiBvcGVuOiVzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisgICAgICAgIC8qc3RyY2F0KGNvbW1lbnRzLCB0bXApOyAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB1Y29sX2Nsb3NlKHJiKTsKKyAgICAgICAgc3ByaW50Zih0bXAsICIgb3BlbjolcyIsIHVfZXJyb3JOYW1lU2hvcnQoc3RhdHVzKSk7CisgICAgICAgIC8qIHN0cmNhdChjb21tZW50cywgdG1wKTsgKi8KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCitjb25zdCBjaGFyICpVRGF0ZUZvcm1hdFN5bWJvbFR5cGVfbmFtZShVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgaSkgeworc3dpdGNoKGkpIHsKKyAgICBjYXNlIFVEQVRfRVJBUzogcmV0dXJuICJVREFUX0VSQVMiOyBicmVhazsKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLworICAgIGNhc2UgVURBVF9NT05USFM6IHJldHVybiAiVURBVF9NT05USFMiOyBicmVhazsKKyAgICAvKiogVGhlIHNob3J0IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWIuICovCisgICAgY2FzZSBVREFUX1NIT1JUX01PTlRIUzogcmV0dXJuICJVREFUX1NIT1JUX01PTlRIUyI7IGJyZWFrOworICAgIC8qKiBUaGUgd2Vla2RheSBuYW1lcywgZm9yIGV4YW1wbGUgTW9uZGF5ICovCisgICAgY2FzZSBVREFUX1dFRUtEQVlTOiByZXR1cm4gIlVEQVRfV0VFS0RBWVMiOyBicmVhazsKKyAgICAvKiogVGhlIHNob3J0IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbi4gKi8KKyAgICBjYXNlIFVEQVRfU0hPUlRfV0VFS0RBWVM6IHJldHVybiAiVURBVF9TSE9SVF9XRUVLREFZUyI7IGJyZWFrOworICAgIC8qKiBUaGUgQU0vUE0gbmFtZXMsIGZvciBleGFtcGxlIEFNICovCisgICAgY2FzZSBVREFUX0FNX1BNUzogcmV0dXJuICJVREFUX0FNX1BNUyI7IGJyZWFrOworICAgIC8qKiBUaGUgbG9jYWxpemVkIGNoYXJhY3RlcnMgKi8KKyAgICBjYXNlIFVEQVRfTE9DQUxJWkVEX0NIQVJTOiByZXR1cm4gIlVEQVRfTE9DQUxJWkVEX0NIQVJTIjsgYnJlYWs7CisgICAgLyoqIFRoZSBsb25nIGVyYSBuYW1lcywgZm9yIGV4YW1wbGUgQW5ubyBEb21pbmkgKi8KKyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4zIHx8IFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjMKKyAgICBjYXNlIFVEQVRfRVJBX05BTUVTOiByZXR1cm4gIlVEQVRfRVJBX05BTUVTIjsgYnJlYWs7CisjZW5kaWYKKyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4zIHx8IFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjMKKyAgICAvKiogVGhlIG5hcnJvdyBtb250aCBuYW1lcywgZm9yIGV4YW1wbGUgRiAqLworICAgIGNhc2UgVURBVF9OQVJST1dfTU9OVEhTOiByZXR1cm4gIlVEQVRfTkFSUk9XX01PTlRIUyI7IGJyZWFrOworICAgIC8qKiBUaGUgbmFycm93IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE4gKi8KKyAgICBjYXNlIFVEQVRfTkFSUk9XX1dFRUtEQVlTOiByZXR1cm4gIlVEQVRfTkFSUk9XX1dFRUtEQVlTIjsgYnJlYWs7CisgICAgLyoqIFN0YW5kYWxvbmUgY29udGV4dCB2ZXJzaW9ucyBvZiBtb250aHMgKi8KKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9NT05USFM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX01PTlRIUyI7IGJyZWFrOworICAgIGNhc2UgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfU0hPUlRfTU9OVEhTIjsgYnJlYWs7CisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX01PTlRIUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfTkFSUk9XX01PTlRIUyI7IGJyZWFrOworICAgIC8qKiBTdGFuZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2Ygd2Vla2RheXMgKi8KKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9XRUVLREFZUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfV0VFS0RBWVMiOyBicmVhazsKKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9XRUVLREFZUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfU0hPUlRfV0VFS0RBWVMiOyBicmVhazsKKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9OQVJST1dfV0VFS0RBWVM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX05BUlJPV19XRUVLREFZUyI7IGJyZWFrOworI2VuZGlmCisjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MyB8fCBVX0lDVV9WRVJTSU9OX01BSk9SX05VTT40CisgICAgLyoqIFRoZSBxdWFydGVycywgZm9yIGV4YW1wbGUgMXN0IFF1YXJ0ZXIgKi8KKyAgICBjYXNlIFVEQVRfUVVBUlRFUlM6IHJldHVybiAiVURBVF9RVUFSVEVSUyI7IGJyZWFrOworICAgIC8qKiBUaGUgc2hvcnQgcXVhcnRlciBuYW1lcywgZm9yIGV4YW1wbGUgUTEgKi8KKyAgICBjYXNlIFVEQVRfU0hPUlRfUVVBUlRFUlM6IHJldHVybiAiVURBVF9TSE9SVF9RVUFSVEVSUyI7IGJyZWFrOworICAgIC8qKiBTdGFuZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2YgcXVhcnRlcnMgKi8KKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9RVUFSVEVSUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfUVVBUlRFUlMiOyBicmVhazsKKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9RVUFSVEVSUzogcmV0dXJuICJVREFUX1NUQU5EQUxPTkVfU0hPUlRfUVVBUlRFUlMiOyBicmVhazsKKyNlbmRpZgorfQorICAgIHJldHVybiAiPFVua25vd24+IjsKK30KKworCitVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgc2NhbkFycmF5W10gPSB7CisgICAgVURBVF9FUkFTLAorICAgIC8qKiBUaGUgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYnJ1YXJ5ICovCisgICAgVURBVF9NT05USFMsCisgICAgLyoqIFRoZSBzaG9ydCBtb250aCBuYW1lcywgZm9yIGV4YW1wbGUgRmViLiAqLworICAgIFVEQVRfU0hPUlRfTU9OVEhTLAorICAgIC8qKiBUaGUgd2Vla2RheSBuYW1lcywgZm9yIGV4YW1wbGUgTW9uZGF5ICovCisgICAgVURBVF9XRUVLREFZUywKKyAgICAvKiogVGhlIHNob3J0IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbi4gKi8KKyAgICBVREFUX1NIT1JUX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgQU0vUE0gbmFtZXMsIGZvciBleGFtcGxlIEFNICovCisvLyAgICBVREFUX0FNX1BNUywKKyAgICAvKiogVGhlIGxvY2FsaXplZCBjaGFyYWN0ZXJzICovCisvLyAgICBVREFUX0xPQ0FMSVpFRF9DSEFSUywKKyAgICAvKiogVGhlIGxvbmcgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBbm5vIERvbWluaSAqLworLy8gICAgVURBVF9FUkFfTkFNRVMsCisgICAgLyoqIFRoZSBuYXJyb3cgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEYgKi8KKy8vICAgIFVEQVRfTkFSUk9XX01PTlRIUywKK307CisKK2ludCAqc3RhcnRzID0gTlVMTDsKKworVUNoYXIgKioqcm9vdGRhdGEgPSBOVUxMOworCit2b2lkIGluaXRyb290KFVFcnJvckNvZGUgKnN0YXR1cykgeworICBVRGF0ZUZvcm1hdCAqZm10OworICBmbXQgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsICJyb290IiwgTlVMTCwgLTEsTlVMTCwwLCBzdGF0dXMpOworICByb290ZGF0YSA9IChVQ2hhcioqKiltYWxsb2MoKHNpemVvZihzY2FuQXJyYXkpL3NpemVvZihzY2FuQXJyYXlbMF0pKSpzaXplb2Yocm9vdGRhdGFbMF0pKTsKKyAgc3RhcnRzID0gKGludCopbWFsbG9jKChzaXplb2Yoc2NhbkFycmF5KS9zaXplb2Yoc2NhbkFycmF5WzBdKSkqc2l6ZW9mKHN0YXJ0c1swXSkpOworICBmb3IoaW50IGk9MDtVX1NVQ0NFU1MoKnN0YXR1cykmJmk8c2l6ZW9mKHNjYW5BcnJheSkvc2l6ZW9mKHNjYW5BcnJheVswXSk7aSsrKSB7CisgICAgaW50IHRoaXNDb3VudCA9IHVkYXRfY291bnRTeW1ib2xzKGZtdCwgc2NhbkFycmF5W2ldKTsKKyAgICByb290ZGF0YVtpXT0wOworICAgIHJvb3RkYXRhW2ldPShVQ2hhcioqKW1hbGxvYyh0aGlzQ291bnQqc2l6ZW9mKHJvb3RkYXRhW2ldWzBdKSk7CisgICAgc3dpdGNoKHNjYW5BcnJheVtpXSkgeworICAgICAgICBjYXNlIFVEQVRfV0VFS0RBWVM6CisgICAgICAgIGNhc2UgVURBVF9TSE9SVF9XRUVLREFZUzoKKyAgICAgICAgICAgIHN0YXJ0c1tpXT0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgc3RhcnRzW2ldPTA7CisgICAgfQorICAgIGZvcihpbnQgaj1zdGFydHNbaV07VV9TVUNDRVNTKCpzdGF0dXMpJiZqPHRoaXNDb3VudDtqKyspIHsKKyAgICAgICAgcm9vdGRhdGFbaV1bal09KFVDaGFyKiltYWxsb2MoMTAyNCk7CisgICAgICAgIGludCBzeiA9ICAKKyAgICAgICAgdWRhdF9nZXRTeW1ib2xzKGZtdCwKKyAgICAgICAgICAgIHNjYW5BcnJheVtpXSwKKyAgICAgICAgICAgIGosCisgICAgICAgICAgICByb290ZGF0YVtpXVtqXSwKKyAgICAgICAgICAgIDEwMjQsCisgICAgICAgICAgICBzdGF0dXMpOworICAgIH0KKyAgfQorfQorCisvKiBGb3JtYXQgdGhlIGRhdGUgKi8KK3N0YXRpYyB2b2lkCitkYXRlKGNvbnN0IFVDaGFyICp0eiwKKyAgICAgVURhdGVGb3JtYXRTdHlsZSBzdHlsZSwKKyAgICAgY2hhciAqZm9ybWF0LAorICAgICBjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKmNvbW1lbnRzLAorICAgICBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIFVDaGFyICpzID0gMDsKKyAgaW50MzJfdCBsZW4gPSAwOworICBVRGF0ZUZvcm1hdCAqZm10OworICBVQ2hhciB1Rm9ybWF0WzEwMF07CisgIGNoYXIgdG1wWzIwMF07CisgIAorICBpbnQgdGM9MDsgLy8gdG90YWwgY291bnQKKyAgaW50IHRmPTA7IC8vIHRvdGFsIGZvdW5kCisgIGludCB0bCA9IDA7CisKKyAgZm10ID0gdWRhdF9vcGVuKHN0eWxlLCBzdHlsZSwgbG9jYWxlLCB0eiwgLTEsTlVMTCwwLCBzdGF0dXMpOworICBpZiAoIGZvcm1hdCAhPSBOVUxMICkgeworICAgICB1X2NoYXJzVG9VQ2hhcnMoZm9ybWF0LHVGb3JtYXQsc3RybGVuKGZvcm1hdCkpLAorICAgICB1ZGF0X2FwcGx5UGF0dGVybihmbXQsRkFMU0UsdUZvcm1hdCxzdHJsZW4oZm9ybWF0KSk7CisgIH0KKyAgbGVuID0gdWRhdF9mb3JtYXQoZm10LCB1Y2FsX2dldE5vdygpLCAwLCBsZW4sIDAsIHN0YXR1cyk7CisgIGlmKCpzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpIHsKKyAgICAqc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHMgPSAoVUNoYXIqKSBtYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChsZW4rMSkpOworICAgIGlmKHMgPT0gMCkgZ290byBmaW5pc2g7CisgICAgdWRhdF9mb3JtYXQoZm10LCB1Y2FsX2dldE5vdygpLCBzLCBsZW4gKyAxLCAwLCBzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgZ290byBmaW5pc2g7CisgIH0KKworICAvKiBwcmludCB0aGUgZGF0ZSBzdHJpbmcgKi8KKyAgLy91cHJpbnQocywgc3Rkb3V0LCBzdGF0dXMpOworCisgIC8qIHByaW50IGEgdHJhaWxpbmcgbmV3bGluZSAqLworICAvL3ByaW50ZigiXG4iKTsKKyAgLyogY291bnQgYml0cyAqLworICBVQ2hhciBvdXRidWZbMTAyNF07CisgIGZvcihpbnQgaT0wO1VfU1VDQ0VTUygqc3RhdHVzKSYmaTxzaXplb2Yoc2NhbkFycmF5KS9zaXplb2Yoc2NhbkFycmF5WzBdKTtpKyspIHsKKyAgICBpbnQgdGhpc0NvdW50ID0gdWRhdF9jb3VudFN5bWJvbHMoZm10LCBzY2FuQXJyYXlbaV0pOworICAgIHRjICs9IHRoaXNDb3VudDsKKyAgICBmb3IoaW50IGo9c3RhcnRzW2ldO1VfU1VDQ0VTUygqc3RhdHVzKSYmajx0aGlzQ291bnQ7aisrKSB7CisJKnN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgaW50IHN6ID0gIAorICAgICAgICB1ZGF0X2dldFN5bWJvbHMoZm10LAorICAgICAgICAgICAgc2NhbkFycmF5W2ldLAorICAgICAgICAgICAgaiwKKyAgICAgICAgICAgIG91dGJ1ZiwKKyAgICAgICAgICAgIDEwMjQsCisgICAgICAgICAgICBzdGF0dXMpOworICAgICAgICAgICAgaWYoVV9TVUNDRVNTKCpzdGF0dXMpKSB7IHRmKys7IHRsICs9IHVfc3RybGVuKG91dGJ1Zik7IH0KKyAgICAgICAgLy9pZighdV9zdHJjbXAob3V0YnVmLHJvb3RkYXRhW2ldW2pdKSkgeworICAgICAgICBpZigqc3RhdHVzICE9IFVfWkVST19FUlJPUikgeworI2lmICAwCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjwhLS0gJXM6IGVycjogZGF0YSAlczolZDolZCBpcyBtaXNzaW5nOiAlWC4uLiAtLT5cbiIsIGxvY2FsZSwgVURhdGVGb3JtYXRTeW1ib2xUeXBlX25hbWUoc2NhbkFycmF5W2ldKSwgaSwgaiwgb3V0YnVmWzBdKTsKKyNlbmRpZgorICAgICAgICAgICAgc3ByaW50Zih0bXAsICIgbWlzc2luZzogJXMjJWQtJXMgIiwgVURhdGVGb3JtYXRTeW1ib2xUeXBlX25hbWUoc2NhbkFycmF5W2ldKSwgaiwgdV9lcnJvck5hbWVTaG9ydCgqc3RhdHVzKSk7CisgICAgICAgICAgICAqc3RhdHVzID0gVV9NSVNTSU5HX1JFU09VUkNFX0VSUk9SOworICAgICAgICAgICAgc3RyY2F0KGNvbW1lbnRzLCB0bXApOworICAgICAgICB9CisgICAgfQorICB9CisgIAorIGZpbmlzaDoKKyAgc3ByaW50Zih0bXAsICIgc3ltczolZC8lZCMlZDolcyIsIHRmLCB0YywgdGwsIHVfZXJyb3JOYW1lU2hvcnQoKnN0YXR1cykpOworICBzdHJjYXQoY29tbWVudHMsdG1wKTsKKworICB1ZGF0X2Nsb3NlKGZtdCk7CisgIGZyZWUocyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlT2tDb21tZW50cyhYTUxGaWxlICZ4ZiwgaW50IG9rLCBjb25zdCBjaGFyICpjb21tZW50cywgY29uc3QgY2hhciAqbG9jYWxlKSB7IAorICAgIGNoYXIgdG1wWzIwMDBdOworICAgIHRtcFswXT0wOworICAgIGlmKG9rKSB7CisgICAgICAgIGlmKCFjb21tZW50c3x8ISpjb21tZW50cykgeworICAgICAgICAgICAgc3RyY3B5KHRtcCxsb2NhbGUpOworICAgICAgICAgICAgc3RyY2F0KHRtcCwgIiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwcmludGYodG1wLCAiJXMgPCEtLSAgJXMgLS0+IiwgbG9jYWxlLCBjb21tZW50cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYoY29tbWVudHMmJipjb21tZW50cykgeworICAgICAgICBzcHJpbnRmKHRtcCwgIjwhLS0gISEgJXM6ICVzIC0tPiIsIGxvY2FsZSwgY29tbWVudHMpOworICAgIH0KKyAgICBpZih0bXAmJip0bXApIHsKKyAgICAgICAgeGYud3JpdGVsbih0bXApOworICAgIH0KK30KKworCitpbnQgY291bGRfZm10X2Rvdyhjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKmNvbW1lbnRzKSB7CisgICAgY2hhciB0bXBbMjAwXTsKKy8vICAgIFVSZXNvdXJjZUJ1bmRsZSAqcmIgPSBOVUxMOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAKKyAgICBkYXRlKE5VTEwsCisgICAgICAgICBVREFUX0xPTkcsCisgICAgIE5VTEwsCisgICAgIGxvY2FsZSwgY29tbWVudHMsCisgICAgICZzdGF0dXMpOworCisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykgfHwgc3RhdHVzICE9IFVfWkVST19FUlJPUikgeworICAgICAgICAKKyAgICAgICAgc3ByaW50Zih0bXAsICIgZm10OiVzIiwgdV9lcnJvck5hbWVTaG9ydChzdGF0dXMpKTsKKyAgICAgICAgc3RyY2F0KGNvbW1lbnRzLCB0bXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBzcHJpbnRmKHRtcCwgIiBmbXQ6JXMiLCB1X2Vycm9yTmFtZVNob3J0KHN0YXR1cykpOworICAgICAgICBzdHJjYXQoY29tbWVudHMsIHRtcCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKwordm9pZCBwcm9iZUNhcGFiaWxpdHkoWE1MRmlsZSYgeGYsIGNvbnN0IGNoYXIgKmxvY2FsZSkgeworICAgIGNoYXIgY29tbWVudHNbMTAwMF07CisgICAgaW50IG9rPTE7CisgICAgaW50IHJjID0wOworICAgIAorICAgIC8vZnByaW50ZihzdGRlcnIsICJQUk9CRTogJXNcbiIsIGxvY2FsZSk7CisgICAgCisgICAgY29tbWVudHNbMF09MDsKKyAgICAKKyAgICBpZighY291bGRfb3Blbihsb2NhbGUsIGNvbW1lbnRzKSkgeworICAgICAgICBvayA9IDA7CisgICAgfQorICAgIAorI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+IDIpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MSkmJihVX0lDVV9WRVJTSU9OX01JTk9SX05VTT4yKSkKKyAgICBpZighY291bGRfZm10X2Rvdyhsb2NhbGUsIGNvbW1lbnRzKSkgeworICAgICAgICBvayA9IDA7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgd3JpdGVPa0NvbW1lbnRzKHhmLG9rLCBjb21tZW50cyxsb2NhbGUpOworfQorCit2b2lkIHByb2JlQ29sQ2FwYWJpbGl0eShYTUxGaWxlJiB4ZiwgY29uc3QgY2hhciAqbG9jYWxlKSB7CisgICAgY2hhciBjb21tZW50c1sxMDAwXTsKKyAgICBpbnQgb2s9MTsKKyAgICBpbnQgcmMgPTA7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgCisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlBST0JFOiAlc1xuIiwgbG9jYWxlKTsKKyAgICAKKyAgICBjb21tZW50c1swXT0wOworICAgIAorICAgIGlmKCFjb2xfY291bGRfb3Blbihsb2NhbGUsIGNvbW1lbnRzKSkgeworICAgICAgICBvayA9IDA7CisgICAgfQorICAgIAorICAgIC8qCisgICAgaWYoIWNvbF9jb3VsZF9mbXRfZG93KGxvY2FsZSwgY29tbWVudHMpKSB7CisgICAgICAgIG9rID0gMDsKKyAgICB9CisgICAgKi8KKyAgICB3cml0ZU9rQ29tbWVudHMoeGYsb2ssIGNvbW1lbnRzLGxvY2FsZSk7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiAgYXJndikgeworICAgIFVfTUFJTl9JTklUX0FSR1MoYXJnYywgYXJndik7CisgICAgcHJvZ05hbWUgPSBhcmd2WzBdOworICAgIGFyZ2M9dV9wYXJzZUFyZ3MoYXJnYywgYXJndiwgc2l6ZW9mKG9wdGlvbnMpL3NpemVvZihvcHRpb25zWzBdKSwgb3B0aW9ucyk7CisvLyAgICBjb25zdCBjaGFyICpsb2M7CisgICAgCisJeworCQlVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiAyKSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjEpJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0+NSkpCisJCXVfaW5pdCgmc3RhdHVzKTsKKyNlbHNlCisJCXVyZXNfb3BlbihOVUxMLCAiZW5fVVMiLCAmc3RhdHVzKTsKKyNlbmRpZgorCQlmcHJpbnRmKHN0ZGVyciwgIiBJbml0OiAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisKKwl9CisKKyAgICB7CisgICAgICAgIFVFcnJvckNvZGUgaXMgPSBVX1pFUk9fRVJST1I7CisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gMikgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4xKSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjIpKQorICAgICAgICBpbml0cm9vdCgmaXMpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkluaXQ6ICVzXG4iLCB1X2Vycm9yTmFtZVNob3J0KGlzKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZihhcmdjPDApIHsKKyAgICAgICAgLy8gVW5yZWNvZ25pemVkIG9wdGlvbgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbLWFyZ2NdKTsKKyAgICAgICAgdXNhZ2VBbmREaWUoVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SKTsKKyAgICB9CisKKyAgICBpZihvcHRpb25zWzBdLmRvZXNPY2N1ciB8fCBvcHRpb25zWzFdLmRvZXNPY2N1cikgeworICAgICAgICAvLyAgLT8gb3IgLWggZm9yIGhlbHAuCisgICAgICAgIHVzYWdlQW5kRGllKDApOworICAgIH0KKworICAgIAorCisgICAgeworICAgICAgICBjaGFyIHRtcFsyMDBdOworICAgICAgICBYTUxGaWxlIHhmKHN0ZG91dCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHhmLndyaXRlbG4oIjwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSBcImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkXCI+Iik7CisgICAgICAgICAgICBYTUxFbGVtZW50IGljdUluZm8oeGYsICJpY3VJbmZvIik7CisgICAgICAgICAgICBYTUxFbGVtZW50IGljdVByb2R1Y3RzKHhmLCAiaWN1UHJvZHVjdHMiKTsKKyAgICAgICAgICAgIFhNTEVsZW1lbnQgaWN1UHJvZHVjdCh4ZiwgImljdVByb2R1Y3QiLCAidHlwZT1cImljdTRjXCIiKTsKKyAgICAgICAgICAgIFhNTEVsZW1lbnQgcmVsZWFzZXMoeGYsICJyZWxlYXNlcyIpOworICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ2ZXJzaW9uPVwiJXNcIiIsIFVfSUNVX1ZFUlNJT04pOworICAgICAgICAgICAgWE1MRWxlbWVudCByZWxlYXNlKHhmLCAicmVsZWFzZSIsIHRtcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFhNTEVsZW1lbnQgY2FwYWJpbGl0aWVzKHhmLCAiY2FwYWJpbGl0aWVzIik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ0eXBlPVwidW5pY29kZVwiIHZlcnNpb249XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgVV9VTklDT0RFX1ZFUlNJT04pOworICAgICAgICAgICAgICAgIFhNTEVsZW1lbnQgaWN1RGF0YSh4ZiwgImZlYXR1cmUiLCB0bXAsIFRSVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVDb2xsYXRvciAqY29sOworICAgICAgICAgICAgICAgIGNoYXIgdWNhdmVyc1syMDBdOworICAgICAgICAgICAgICAgIFVWZXJzaW9uSW5mbyB2ZXJzOworICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbCA9IHVjb2xfb3Blbigicm9vdCIsICZzdGF0dXMpOworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4yKSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjEpJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0+NykpCisgICAgICAgICAgICAgICAgdWNvbF9nZXRVQ0FWZXJzaW9uKGNvbCwgdmVycyk7CisgICAgICAgICAgICAgICAgdV92ZXJzaW9uVG9TdHJpbmcodmVycywgdWNhdmVycyk7CisjZWxzZQorCQlzdHJjcHkodWNhdmVycywgIj8/PyIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ0eXBlPVwidWNhXCIgdmVyc2lvbj1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICB1Y2F2ZXJzKTsKKyAgICAgICAgICAgICAgICBYTUxFbGVtZW50IGljdURhdGEoeGYsICJmZWF0dXJlIiwgdG1wLCBUUlVFKTsKKyAgICAgICAgICAgICAgICB1Y29sX2Nsb3NlKGNvbCk7CisgICAgICAgICAgICB9CisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjMpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiAyKSAmJiAoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0gPjcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR6dmVyczsKKyAgICAgICAgICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICB0enZlcnMgPSB1Y2FsX2dldFRaRGF0YVZlcnNpb24oJnN0YXR1cyk7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ0eXBlPVwidHpcIiB2ZXJzaW9uPVwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHR6dmVycyk7CisgICAgICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCwgVFJVRSk7CisgICAgICAgICAgICB9CisjZW5kaWYgICAgICAgICAgICAKKyAgICAgICAgICAgIHsgCisgICAgICAgICAgICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgVVZlcnNpb25JbmZvIGNsZHJWZXJzaW9uOworICAgICAgICAgICAgICAgIF9nZXRDTERSVmVyc2lvbkRpcmVjdChjbGRyVmVyc2lvbiwgJnN0YXR1cyk7CisJCWlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlVRXJyb3JDb2RlIHN1YlN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICAJX2dldENMRFJWZXJzaW9uT2xkKGNsZHJWZXJzaW9uLCAmc3ViU3RhdHVzKTsKKwkJCWlmKFVfU1VDQ0VTUyhzdWJTdGF0dXMpKSB7CisJCQkJc3RhdHVzID0gc3ViU3RhdHVzOworCQkJfQorCQl9CisgICAgICAgICAgICAgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnI6IGNvdWxkIG5vdCBnZXQgQ0xEUiBWZXJzaW9uLCAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0bXAsICJ0eXBlPVwiY2xkclwiIHZlcnNpb249XCIiKTsKKyAgICAgICAgICAgICAgICAgICAgdV92ZXJzaW9uVG9TdHJpbmcoY2xkclZlcnNpb24sIHRtcCtzdHJsZW4odG1wKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cmNhdCh0bXAsICJcIiIpOworICAgICAgICAgICAgICAgICAgICBYTUxFbGVtZW50IGljdURhdGEoeGYsICJmZWF0dXJlIiwgdG1wLCBUUlVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigxKSB7CisgICAgICAgICAgICAgICAgaW50IG4gPSB1bG9jX2NvdW50QXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ0eXBlPVwiZm9ybWF0dGluZ1wiIHRvdGFsPVwiJWRcIiB2ZXJzaW9uPVwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIG4sCisgICAgICAgICAgICAgICAgICAgICI/Pz8iKTsKKyAgICAgICAgICAgICAgICBYTUxFbGVtZW50IGljdURhdGEoeGYsICJmZWF0dXJlIiwgdG1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIC8vIHByb2JlQ2FwYWJpbGl0eSh4ZiwgInJvb3QiKTsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGo9MDtqPG47aisrKSB7CisgICAgICAgICAgICAgICAgICAgIHByb2JlQ2FwYWJpbGl0eSh4ZiwgdWxvY19nZXRBdmFpbGFibGUoaikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKDEpIHsKKyAgICAgICAgICAgICAgICBpbnQgbiA9IHVjb2xfY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcCwgInR5cGU9XCJjb2xsYXRpb25cIiB0b3RhbD1cIiVkXCIgdmVyc2lvbj1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICBuLAorICAgICAgICAgICAgICAgICAgICAiPz8/Iik7CisgICAgICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAvLyBwcm9iZUNhcGFiaWxpdHkoeGYsICJyb290Iik7CisgICAgICAgICAgICAgICAgZm9yKGludCBqPTA7ajxuO2orKykgeworICAgICAgICAgICAgICAgICAgICBwcm9iZUNvbENhcGFiaWxpdHkoeGYsIHVjb2xfZ2V0QXZhaWxhYmxlKGopKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKyAgICAKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzJfMi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvMl8yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdlZjgzCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzJfMi54bWwKQEAgLTAsMCArMSw0ODkgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iMi4yIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI/Pz8iLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyMzUiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2FfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9fUEhPTkVCT09LIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0FUX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfREVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9MVV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsX0dSX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQkVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9HQl9FVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0lFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfX1RSQURJVElPTkFMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VTX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXVfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaV9GSV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0JFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfRlJfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9MVV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhX0lFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2xfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaV9fRElSRUNUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfSVRfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX0JFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfTkxfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9QVF9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNoX1lVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNyX1lVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX19QSU5ZSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfQ04gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfSEsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfTU8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfU0cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfVFcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfVFdfU1RST0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjM1IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNhX0VTX1BSRUVVUk8gCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfX1BIT05FQk9PSyAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9BVF9QUkVFVVJPIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0RFX1BSRUVVUk8gCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZGVfTFVfUFJFRVVSTyAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbF9HUl9QUkVFVVJPIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JFX1BSRUVVUk8gCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fR0JfRVVSTyAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JRV9QUkVFVVJPIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX19UUkFESVRJT05BTCAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19FU19QUkVFVVJPIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWV1X0VTX1BSRUVVUk8gCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfSU4gCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZmlfRklfUFJFRVVSTyAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9CRV9QUkVFVVJPIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0ZSX1BSRUVVUk8gCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZnJfTFVfUFJFRVVSTyAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnYV9JRV9QUkVFVVJPIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWdsX0VTX1BSRUVVUk8gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaGlfX0RJUkVDVCAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWl0X0lUX1BSRUVVUk8gCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9CRV9QUkVFVVJPIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5sX05MX1BSRUVVUk8gCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcHRfUFRfUFJFRVVSTyAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaCAKKwkJCQkJCQlzaF9ZVSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9ZVSAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9fUElOWUlOIAorCQkJCQkJCXpoX0NOIAorCQkJCQkJCXpoX0hLIAorCQkJCQkJCXpoX01PIAorCQkJCQkJCXpoX1NHIAorCQkJCQkJCXpoX1RXIAorCQkJCQkJCXpoX1RXX1NUUk9LRSAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM18wLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTYyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM18wLnhtbApAQCAtMCwwICsxLDQ1NyBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjAiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjE5IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTkiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSU4gCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNoIAorCQkJCQkJCXNoX1lVIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX1lVIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0NOIAorCQkJCQkJCXpoX0hLIAorCQkJCQkJCXpoX01PIAorCQkJCQkJCXpoX1NHIAorCQkJCQkJCXpoX1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlOGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzIueG1sCkBAIC0wLDAgKzEsNDc5IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjMuMiI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyMzAiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjMwIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfWVUgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX1lVIAorCQkJCQkJCXNyX1lVIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM180LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ1NDEzCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNC54bWwKQEAgLTAsMCArMSw1MDMgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iMy40Ij4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyNDIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyNDIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfQ3lybCAKKwkJCQkJCQlhel9DeXJsX0FaIAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9QSyAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJa3cgCisJCQkJCQkJa3dfR0IgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc28gCisJCQkJCQkJc29fREogCisJCQkJCQkJc29fRVQgCisJCQkJCQkJc29fS0UgCisJCQkJCQkJc29fU08gCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0NTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9DUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl1eiAKKwkJCQkJCQl1el9DeXJsIAorCQkJCQkJCXV6X0N5cmxfVVogCisJCQkJCQkJdXpfTGF0biAKKwkJCQkJCQl1el9MYXRuX1VaIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNF8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzRfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiZjMxMgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzRfMS54bWwKQEAgLTAsMCArMSw1MDMgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iMy40LjEiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI0MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjI0MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9DeXJsIAorCQkJCQkJCWF6X0N5cmxfQVogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQ1MgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0NTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXV6IAorCQkJCQkJCXV6X0N5cmwgCisJCQkJCQkJdXpfQ3lybF9VWiAKKwkJCQkJCQl1el9MYXRuIAorCQkJCQkJCXV6X0xhdG5fVVogCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM182LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTUzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM182LnhtbApAQCAtMCwwICsxLDUwOSBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjYiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI0NSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjI0NSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9DeXJsIAorCQkJCQkJCWF6X0N5cmxfQVogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloYXdfVVMgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1sX0lOIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCW9yX0lOIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9DUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQ1MgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdXogCisJCQkJCQkJdXpfQ3lybCAKKwkJCQkJCQl1el9DeXJsX1VaIAorCQkJCQkJCXV6X0xhdG4gCisJCQkJCQkJdXpfTGF0bl9VWiAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzgueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfOC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0MWVlYwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzgueG1sCkBAIC0wLDAgKzEsNDkwIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjMuOCI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwN2ciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyNjYiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjIwNCIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzhfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM184XzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM184XzEueG1sCkBAIC0wLDAgKzEsNDkwIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjMuOC4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3aiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI2NiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjA0IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJkN2RjCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMC54bWwKQEAgLTAsMCArMSw1MTQgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iNC4wIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4YyIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjgyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTEiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzBfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8wXzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGQ5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8wXzEueG1sCkBAIC0wLDAgKzEsNTE0IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjQuMC4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4aSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjgyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTEiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzFfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8xXzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTI4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8xXzEueG1sCkBAIC0wLDAgKzEsNTE0IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjQuMS4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4ZiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjgyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTEiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyY2MyOAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzIueG1sCkBAIC0wLDAgKzEsNTMyIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjQuMiI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOWciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNyIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI5MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzd19DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0FyYWJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fTUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1X1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjIxOSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9OQSAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNpIAorCQkJCQkJCXNpX0xLIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzJfMF8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzJfMF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzE5ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMl8wXzEueG1sCkBAIC0wLDAgKzEsNTMyIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjQuMi4wLjEiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDlnIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyOTIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTkiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvcjUwXzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sL3I1MF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWIyZjhjCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sL3I1MF8xLnhtbApAQCAtMCwwICsxLDEwMTUgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iNTAuMSI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI2LjIiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNi4yIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAxMmgiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjIyLjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSI1OTMiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWdxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZ3FfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlha19HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfMDAxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1BTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1REIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc2FfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJhc19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlbV9aTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZXpfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJtX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyeCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnJ4X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlicyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnNfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0FEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2dnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljZ2dfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2hyX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYXYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhdl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRqZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGplX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkdWEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR1YV9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHlvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkeW9fU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkel9CVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllYnVfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllZV9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWVfVEcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl8xNTAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fRE0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0ZKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9GTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR1UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0tOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTEMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0xSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9MUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9XUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc180MTkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19JQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlld29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmZl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpbF9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR1AgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9IVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfS00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01GIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01RIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX05DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfUEYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9SVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU0MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVEQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1RHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3V6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndXpfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlnX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X1NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqZ28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1MTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWpnb19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzUxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJam1jIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqbWNfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYV9HRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYWJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FtX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0Mzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtkZV9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2VhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZWFfQ1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtocSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2hxX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlraSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2lfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xuX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1AgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc19BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc19BcmFiX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzYl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2ZfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGFnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsYWdfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsZ19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0FPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG5fQ0YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG9fTEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjUxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1X0NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1b19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHV5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdXlfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltYXNfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1hc19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZXJfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1mZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWZlX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdfTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1naCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdoX01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1nb19DTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM0NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXVhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdWFfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW15IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlteV9NTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmFxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYXFfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5kX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQVcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9DVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX1NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9TWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm1nIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubWdfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQludXNfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW55biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnluX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0FPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQ1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0dXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfTVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9TVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfVEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJuX0JJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fTUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb2YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvZl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9LRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyd19SVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyd2tfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNhcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2FxX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYnAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNicF9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZWhfTVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VzX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2dfQ0YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9MYXRuX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGlfVGZuZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX1RmbmdfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0FYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd2MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3Y19DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZW9fVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdG8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRvX1RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0d3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR3cV9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0em1fTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptX0xhdG5fTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfTGF0bl9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpX1ZhaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9WYWlpX0xSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZ1biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdnVuX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl4b2cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXhvZ19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeWF2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl5YXZfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXlvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl5b19ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1X1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjQwMSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9OQSAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl8wMDEgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfREogCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfRUggCisJCQkJCQkJYXJfRVIgCisJCQkJCQkJYXJfSUwgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS00gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfTVIgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUFMgCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU08gCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVEQgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0JEIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWJzIAorCQkJCQkJCWJzX0N5cmwgCisJCQkJCQkJYnNfQ3lybF9CQSAKKwkJCQkJCQlic19MYXRuIAorCQkJCQkJCWJzX0xhdG5fQkEgCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfQUQgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY2hyIAorCQkJCQkJCWNocl9VUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MSSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQlkeiAKKwkJCQkJCQllZSAKKwkJCQkJCQllZV9HSCAKKwkJCQkJCQllZV9URyAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9DWSAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl8xNTAgCisJCQkJCQkJZW5fQUcgCisJCQkJCQkJZW5fQVMgCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkIgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQk0gCisJCQkJCQkJZW5fQlMgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQlogCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fQ00gCisJCQkJCQkJZW5fRE0gCisJCQkJCQkJZW5fRkogCisJCQkJCQkJZW5fRk0gCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fR0QgCisJCQkJCQkJZW5fR0cgCisJCQkJCQkJZW5fR0ggCisJCQkJCQkJZW5fR0kgCisJCQkJCQkJZW5fR00gCisJCQkJCQkJZW5fR1UgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU0gCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fSkUgCisJCQkJCQkJZW5fSk0gCisJCQkJCQkJZW5fS0UgCisJCQkJCQkJZW5fS0kgCisJCQkJCQkJZW5fS04gCisJCQkJCQkJZW5fS1kgCisJCQkJCQkJZW5fTEMgCisJCQkJCQkJZW5fTFIgCisJCQkJCQkJZW5fTFMgCisJCQkJCQkJZW5fTUcgCisJCQkJCQkJZW5fTUggCisJCQkJCQkJZW5fTVAgCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTVUgCisJCQkJCQkJZW5fTVcgCisJCQkJCQkJZW5fTkEgCisJCQkJCQkJZW5fTkcgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEcgCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fUFIgCisJCQkJCQkJZW5fUFcgCisJCQkJCQkJZW5fU0IgCisJCQkJCQkJZW5fU0MgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fU0wgCisJCQkJCQkJZW5fU1MgCisJCQkJCQkJZW5fVEMgCisJCQkJCQkJZW5fVE8gCisJCQkJCQkJZW5fVFQgCisJCQkJCQkJZW5fVFogCisJCQkJCQkJZW5fVUcgCisJCQkJCQkJZW5fVU0gCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkMgCisJCQkJCQkJZW5fVkcgCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fVlUgCisJCQkJCQkJZW5fV1MgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWk0gCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfNDE5IAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0NVIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VBIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dRIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX0lDIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BIIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZpbCAKKwkJCQkJCQlmaWxfUEggCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQkYgCisJCQkJCQkJZnJfQkkgCisJCQkJCQkJZnJfQkogCisJCQkJCQkJZnJfQkwgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0QgCisJCQkJCQkJZnJfQ0YgCisJCQkJCQkJZnJfQ0cgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfQ0kgCisJCQkJCQkJZnJfQ00gCisJCQkJCQkJZnJfREogCisJCQkJCQkJZnJfRFogCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfR0EgCisJCQkJCQkJZnJfR04gCisJCQkJCQkJZnJfR1AgCisJCQkJCQkJZnJfR1EgCisJCQkJCQkJZnJfSFQgCisJCQkJCQkJZnJfS00gCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZnJfTUEgCisJCQkJCQkJZnJfTUMgCisJCQkJCQkJZnJfTUYgCisJCQkJCQkJZnJfTUcgCisJCQkJCQkJZnJfTUwgCisJCQkJCQkJZnJfTVEgCisJCQkJCQkJZnJfTVIgCisJCQkJCQkJZnJfTVUgCisJCQkJCQkJZnJfTkMgCisJCQkJCQkJZnJfTkUgCisJCQkJCQkJZnJfUEYgCisJCQkJCQkJZnJfUkUgCisJCQkJCQkJZnJfUlcgCisJCQkJCQkJZnJfU0MgCisJCQkJCQkJZnJfU04gCisJCQkJCQkJZnJfU1kgCisJCQkJCQkJZnJfVEQgCisJCQkJCQkJZnJfVEcgCisJCQkJCQkJZnJfVE4gCisJCQkJCQkJZnJfVlUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGEgCisJCQkJCQkJaGFfTGF0biAKKwkJCQkJCQloYV9MYXRuX0dIIAorCQkJCQkJCWhhX0xhdG5fTkUgCisJCQkJCQkJaGFfTGF0bl9ORyAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfQkEgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaWcgCisJCQkJCQkJaWdfTkcgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJaXRfU00gCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2EgCisJCQkJCQkJa2FfR0UgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa21fS0ggCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1AgCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlsbiAKKwkJCQkJCQlsbl9BTyAKKwkJCQkJCQlsbl9DRCAKKwkJCQkJCQlsbl9DRiAKKwkJCQkJCQlsbl9DRyAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltc19TRyAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQlteSAKKwkJCQkJCQlteV9NTSAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9BVyAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9DVyAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubF9TUiAKKwkJCQkJCQlubF9TWCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0FPIAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X0NWIAorCQkJCQkJCXB0X0dXIAorCQkJCQkJCXB0X01PIAorCQkJCQkJCXB0X01aIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXB0X1NUIAorCQkJCQkJCXB0X1RMIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX01EIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X0JZIAorCQkJCQkJCXJ1X0tHIAorCQkJCQkJCXJ1X0taIAorCQkJCQkJCXJ1X01EIAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNpIAorCQkJCQkJCXNpX0xLIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNxX01LIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9BWCAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQlzd19VRyAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0YV9MSyAKKwkJCQkJCQl0YV9NWSAKKwkJCQkJCQl0YV9TRyAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0byAKKwkJCQkJCQl0b19UTyAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9DWSAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl5byAKKwkJCQkJCQl5b19ORyAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJCXp1IAorCQkJCQkJCXp1X1pBIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbG91dC5jcHAgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWxvdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2FmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWxvdXQuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInhtbG91dC5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitYTUxGaWxlOjpYTUxGaWxlKEZJTEUgKmYpIHsKKyAgICBmaWxlID0gZjsKKyAgICBsZXZlbCA9IDA7Cit9CisKK1hNTEZpbGU6On5YTUxGaWxlKCkKK3sKKworfQorCit2b2lkIFhNTEZpbGU6OndyaXRlKGNvbnN0IGNoYXIgKnMpIHsKKyAgICBmcHV0cyhzLCBmaWxlKTsKK30KKwordm9pZCBYTUxGaWxlOjp3cml0ZWxuKGNvbnN0IGNoYXIgKnMpIHsKKyAgICB3cml0ZUluZGVudCgpOworICAgIHdyaXRlKHMpOworICAgIHdyaXRlKCJcbiIpOworfQorCitpbnQgWE1MRmlsZTo6aW5kZW50KGNvbnN0IGNoYXIgKnMsIGJvb2wgc2luZ2xlKSB7CisgICAgaW50IG9sZExldmVsID0gbGV2ZWw7CisgICAgd3JpdGVsbihzKTsKKyAgICBsZXZlbCsrOworICAgIGlmKHNpbmdsZSkgeworICAgICAgICBsZXZlbC0tOworICAgIH0KKyAgICByZXR1cm4gb2xkTGV2ZWw7Cit9CitpbnQgWE1MRmlsZTo6b3V0ZGVudChjb25zdCBjaGFyICpzKSB7CisgICAgbGV2ZWwtLTsKKyAgICB3cml0ZWxuKHMpOworICAgIHJldHVybiBsZXZlbDsKK30KKwordm9pZCBYTUxGaWxlOjp3cml0ZUluZGVudCgpIHsKKyAgICBmb3IoaW50IGk9MDtpPGxldmVsO2krKykgeworICAgICAgICB3cml0ZSgiXHQiKTsKKyAgICB9Cit9CisKK1hNTEVsZW1lbnQ6OlhNTEVsZW1lbnQoWE1MRmlsZSAmZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXR0cmlicywgYm9vbCBzaW5nbGUpIDogZmlsZShmKSwgbmFtZShuYW1lKSwgc2luZ2xlKHNpbmdsZSkgeworICAgIGNoYXIgb3V0c1syMDBdOworICAgIGlmKGF0dHJpYnMhPU5VTEwpIHsKKyAgICAgICAgc3ByaW50ZihvdXRzLCI8JXMgJXMiLCBuYW1lLCBhdHRyaWJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzcHJpbnRmKG91dHMsICI8JXMiLCBuYW1lKTsKKyAgICB9CisgICAgaWYoc2luZ2xlKSB7CisgICAgICAgIHN0cmNhdChvdXRzLCAiLz4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJjYXQob3V0cywgIj4iKTsKKyAgICB9CisgICAgb2xkbGV2ZWwgPSBmaWxlLmluZGVudChvdXRzLCBzaW5nbGUpOworfQorCitYTUxFbGVtZW50Ojp+WE1MRWxlbWVudCgpIHsKKyAgICBpZighc2luZ2xlKSB7CisgICAgICAgIGNoYXIgb3V0c1syMDBdOworICAgICAgICBzcHJpbnRmKG91dHMsIjwvJXM+IiwgbmFtZSk7CisgICAgICAgIGludCBuZXdsZXZlbCA9IGZpbGUub3V0ZGVudChvdXRzKTsKKyAgICAgICAgaWYobmV3bGV2ZWwgIT0gb2xkbGV2ZWwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQEBAIEVSUk9SOiBlbGVtZXQgJXMgcG9wcGVkIG91dCB0byBsZXZlbCAlZCBidXQgZXhwZWN0ZWQgJWQuIEFib3J0LlxuIiwgbmFtZSwgbmV3bGV2ZWwsIG9sZGxldmVsKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbG91dC5oIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4Y2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbG91dC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NsYXNzIFhNTEZpbGUgeworICAgIHB1YmxpYzogIAorICAgIFhNTEZpbGUoRklMRSAqZik7CisgICAgIH5YTUxGaWxlKCk7CisgICAgIC8qKgorICAgICAgKiBXcml0ZSBpbmRlbnQgYXQgY3VycmVudCBsZXZlbCwgaW5jcmVtZW50IGxldmVsLCBhbmQgdGhlbiByZXR1cm4gd2hhdCB0aGUgaW5pdGlhbCBsZXZlbCB3YXMKKyAgICAgICovCisgICAgIGludCBpbmRlbnQoY29uc3QgY2hhciAqcywgYm9vbCBzaW5nbGUgPSBGQUxTRSk7CisgICAgIC8qKgorICAgICAgKiBEZWNyZW1lbnQgbGV2ZWwsIHdyaXRlIGluZGVudCBvZiAnb3V0ZXInIGxldmVsLCBhbmQgcmV0dXJuIHdoYXQgdGhlIG5ldyBsZXZlbCBpcy4gU2hvdWxkIG1hdGNoIHlvdXIgZWFybGllciBjYWxsIHRvIGluZGVudC4KKyAgICAgICovCisgICAgIGludCBvdXRkZW50KGNvbnN0IGNoYXIgKnMpOworICAgICAKKyAgICAgLyoqCisgICAgICAqIFdyaXRlIHNvbWUgc3RyaW5nIAorICAgICAgKi8KKyAgICAgdm9pZCB3cml0ZWxuKGNvbnN0IGNoYXIgKnMpOworICAgICAKKyAgICAgcHJpdmF0ZToKKyAgICAgICB2b2lkIHdyaXRlSW5kZW50KCk7CisgICAgIC8qKgorICAgICAgKiBXcml0ZSBzb21lIHN0cmluZyB3aXRob3V0IGluZGVudC4gKi8KKyAgICAgdm9pZCB3cml0ZShjb25zdCBjaGFyICpzKTsKKyAgICAgCisgICAgaW50IGxldmVsOworICAgIEZJTEUgKmZpbGU7Cit9OworCitjbGFzcyBYTUxFbGVtZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFhNTEVsZW1lbnQoWE1MRmlsZSAmZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXR0cmlicyAgPSBOVUxMLCBib29sIHNpbmdsZT1GQUxTRSk7CisgICAgICAgIH5YTUxFbGVtZW50KCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICBpbnQgb2xkbGV2ZWw7CisgICAgICAgIFhNTEZpbGUgJmZpbGU7CisgICAgICAgIGJvb2wgc2luZ2xlOworfTsKKworCisgICAgCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3phcHBpdC5zZWQgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMWFjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2VkCkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCitzJTwhLS0uKi0tPiUlZworcyVbIAldWwkgXSolICVnCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2ggYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzdkNmE0NQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3phcHBpdC5zaApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCitzZWQgLWYgemFwcGl0LnNlZCB8IHRyIC1zICcJIFwwMTIgJyAnICcKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuLy5jbGFzc3BhdGggYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTVhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LlVTRVJfTElCUkFSWS9DTERSX0pBUiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5VU0VSX0xJQlJBUlkvSUNVX01FVEFfTElCIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LlVTRVJfTElCUkFSWS9JQ1VfVVRJTElUSUVTIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuLy5wcm9qZWN0IGIvbXVsdGkvcHJvai9pY3U0anNjYW4vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwYTZjMQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPmljdTRqc2NhbjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9yZWFkbWUudHh0IGIvbXVsdGkvcHJvai9pY3U0anNjYW4vcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2FhOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vcmVhZG1lLnR4dApAQCAtMCwwICsxLDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVGhpcyBwcm9qZWN0IGlzbid0IHVzZWQgZGlyZWN0bHkgKGV4Y2VwdCB5b3UgY2FuIHJ1biBpdCBhcyBhbiBlY2xpcHNlIHByb2plY3QgZm9yIGRldmVsb3BtZW50KS4gIEl0J3MgY2FsbGVkIGZyb20gLi4vaWN1NGNzY2FuCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRG9jdW1lbnQuamF2YSBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBEb2N1bWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YWY5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRG9jdW1lbnQuamF2YQpAQCAtMCwwICsxLDExNiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK3B1YmxpYyBjbGFzcyBDYXBEb2N1bWVudCBpbXBsZW1lbnRzIENhcE5vZGUgeworCisJcHVibGljIGNsYXNzIFRleHRDYXAgZXh0ZW5kcyBDYXBFbGVtZW50IHsKKwkJVGV4dENhcChTdHJpbmcgc3RyKSB7CisJCQlzdXBlcihzdHIpOworCQl9CisKKwkJcHVibGljIHZvaWQgd3JpdGUoUHJpbnRXcml0ZXIgcHcsIGludCBpKSB7CisJCQl3cml0ZUluZGVudChwdyxpKTsKKwkJCXB3LndyaXRlKGdldE5hbWUoKSsiXG4iKTsKKwkJfQorCX0KKworCXB1YmxpYyBjbGFzcyBDb21tZW50RWxlbWVudCBleHRlbmRzIENhcEVsZW1lbnQgeworCQlDb21tZW50RWxlbWVudChTdHJpbmcgc3RyKSB7CisJCQlzdXBlcihzdHIpOworCQl9CisJCXB1YmxpYyB2b2lkIHdyaXRlKFByaW50V3JpdGVyIHB3LCBpbnQgaW5kZW50KSB7CisJCQl3cml0ZUluZGVudChwdyxpbmRlbnQpOworCQkJcHcud3JpdGUoIjwhLS0gIitnZXROYW1lKCkrIiAtLT5cbiIpOworCQl9CisJfQorCisJVGFnRWxlbWVudCByb290ID0gbmV3IFRhZ0VsZW1lbnQoKTsKKwkKKwlwdWJsaWMgY2xhc3MgVGFnRWxlbWVudCBleHRlbmRzIENhcEVsZW1lbnQgeworCQlwdWJsaWMgVGFnRWxlbWVudCgpIHsKKwkJCXN1cGVyKCIiKTsKKwkJfQorCQlwdWJsaWMgVGFnRWxlbWVudChTdHJpbmcgbmFtZSkgeworCQkJc3VwZXIobmFtZSk7CisJCX0KKworCQlwdWJsaWMgdm9pZCB3cml0ZShQcmludFdyaXRlciBwdywgaW50IGluZGVudCkgeworCQkJaWYoZ2V0TmFtZSgpLmxlbmd0aCgpPjApIHsKKwkJCQl3cml0ZUluZGVudChwdyxpbmRlbnQpOworCQkJCXB3LndyaXRlKCI8IitnZXROYW1lKCkpOworCQkJCWlmKCFhdHRyaWJ1dGVzLmlzRW1wdHkoKSkgeworCQkJCQlmb3IoSXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpO2l0ZXIuaGFzTmV4dCgpOykgeworCQkJCQkJTWFwLkVudHJ5IG8gPSAoTWFwLkVudHJ5KWl0ZXIubmV4dCgpOworCQkJCQkJcHcud3JpdGUoIiAiK28uZ2V0S2V5KCkudG9TdHJpbmcoKSsiPVwiIitvLmdldFZhbHVlKCkrIlwiIik7CisJCQkJCX0KKwkJCQl9CisJCQkJcHcud3JpdGUoIj5cbiIpOworCQkJCWluZGVudCsrOworCQkJfQorCQkJCisJCQlmb3IoSXRlcmF0b3IgaXRlciA9IGNoaWxkcmVuLml0ZXJhdG9yKCk7aXRlci5oYXNOZXh0KCk7KSB7CisJCQkJQ2FwTm9kZSBjaCA9IChDYXBOb2RlKWl0ZXIubmV4dCgpOworCQkJCWNoLndyaXRlKHB3LCBpbmRlbnQpOworCQkJfQorCQkJCisJCQlpZihnZXROYW1lKCkubGVuZ3RoKCk+MCkgeworCQkJCWluZGVudC0tOworCQkJCXdyaXRlSW5kZW50KHB3LGluZGVudCk7CisJCQkJcHcud3JpdGUoIjwvIitnZXROYW1lKCkpOworCQkJCXB3LndyaXRlKCI+XG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoUHJpbnRXcml0ZXIgcHcsIGludCBpbmRlbnQpIHsKKwkJZm9yKDtpbmRlbnQ+MDtpbmRlbnQtLSkgeworCQkJcHcud3JpdGUoJyAnKTsKKwkJfQorCX0KKworCXB1YmxpYyBDYXBFbGVtZW50IGNyZWF0ZUNhcEVsZW1lbnQoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIG5ldyBUYWdFbGVtZW50KG5hbWUpOworCX0KKworCXB1YmxpYyB2b2lkIGFwcGVuZENoaWxkKENhcEVsZW1lbnQgYmFzZSkgeworCQlyb290LmFwcGVuZENoaWxkKGJhc2UpOworCX0KKworCXB1YmxpYyBzdGF0aWMgQ2FwRG9jdW1lbnQgbmV3Q2FwRG9jdW1lbnQoKSB7CisJCXJldHVybiBuZXcgQ2FwRG9jdW1lbnQoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRET01UcmVlKENhcERvY3VtZW50IG91dCwgUHJpbnRXcml0ZXIgcHcsCisJCQlTdHJpbmcgc3RyaW5nLCBPYmplY3Qgb2JqZWN0KSB7CisJCXB3LndyaXRlKHN0cmluZysiXG4iKTsKKwkJb3V0LnJvb3Qud3JpdGUocHcsMCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHdyaXRlKFByaW50V3JpdGVyIHB3LCBpbnQgaW5kZW50KSB7CisJCXJvb3Qud3JpdGUocHcsMCk7CisJfQorCisJcHVibGljIENhcE5vZGUgY3JlYXRlVGV4dE5vZGUoU3RyaW5nIHRyaW0pIHsKKwkJcmV0dXJuIG5ldyBUZXh0Q2FwKHRyaW0pOworCX0KKworCXB1YmxpYyBDYXBFbGVtZW50IGNyZWF0ZUNvbW1lbnQoU3RyaW5nIGNvbSkgeworCQlyZXR1cm4gbmV3IENvbW1lbnRFbGVtZW50KGNvbSk7CisJfQorCisJcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IGFyZzApIHsKKwkJcmV0dXJuIGdldE5hbWUoKS5jb21wYXJlVG8oKChDYXBOb2RlKWFyZzApLmdldE5hbWUoKSk7CisJfQorCQorCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIHJvb3QuZ2V0TmFtZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBFbGVtZW50LmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxMzc3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRWxlbWVudC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYXBFbGVtZW50IGltcGxlbWVudHMgQ2FwTm9kZSB7CisJU3RyaW5nIGNvbTsKKwlDYXBFbGVtZW50KFN0cmluZyBzdHIpIHsKKwkJY29tID0gc3RyOworCX0KKworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIGNvbTsKKwl9CisJCisJcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGUoUHJpbnRXcml0ZXIgcHcsIGludCBpKTsKKworCXB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBhcmcwKSB7CisJCWlmKGFyZzAgPT0gdGhpcykgcmV0dXJuIDA7CisJCWludCBzdHIgPSBnZXROYW1lKCkuY29tcGFyZVRvKCgoQ2FwTm9kZSlhcmcwKS5nZXROYW1lKCkpOworCQlpZihzdHIhPTApIHJldHVybiBzdHI7CisJCQorCQlpZihhcmcwIGluc3RhbmNlb2YgQ2FwRWxlbWVudCkgewkJCisJCQlDYXBFbGVtZW50IG90aCA9IChDYXBFbGVtZW50KWFyZzA7CisJCQlyZXR1cm4gYXR0cmlidXRlcy50b1N0cmluZygpLmNvbXBhcmVUbyhvdGguYXR0cmlidXRlcy50b1N0cmluZygpKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlNYXAgYXR0cmlidXRlcyA9IG5ldyBIYXNoTWFwKCk7CisJU2V0IGNoaWxkcmVuID0gbmV3IFRyZWVTZXQoKTsKKwlwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIGssIFN0cmluZyB2KSB7CisJCWF0dHJpYnV0ZXMucHV0KGssIHYpOworCQkKKwl9CisKKwlwdWJsaWMgdm9pZCBhcHBlbmRDaGlsZChDYXBOb2RlIGUpIHsKKwkJY2hpbGRyZW4uYWRkKGUpOworCQkKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldE5vZGVOYW1lKCkgeworCQlyZXR1cm4gZ2V0TmFtZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcE5vZGUuamF2YSBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBOb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmMjkxNAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBOb2RlLmphdmEKQEAgLTAsMCArMSwxMyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworCitwdWJsaWMgaW50ZXJmYWNlIENhcE5vZGUgZXh0ZW5kcyBDb21wYXJhYmxlIHsKKworCXZvaWQgd3JpdGUoUHJpbnRXcml0ZXIgcHcsIGludCBpKTsKKworCVN0cmluZyBnZXROYW1lKCk7CisKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBTY2FuLmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwU2Nhbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MTZjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwU2Nhbi5qYXZhCkBAIC0wLDAgKzEsMTI5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuc2NhbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLnVuaWNvZGUuY2xkci51dGlsLkxETUxVdGlsaXRpZXM7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5tZXRhLkljdUluZm87CitpbXBvcnQgY29tLmlibS5pY3UuZGV2Lm1ldGEuWE1MVXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZlcnNpb25JbmZvOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2FwU2NhbiB7CisKKyAgICAvKiogQ2FwYWJpbGl0aWVzIHN0cmluZyAqKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRUSU5HID0gImZvcm1hdHRpbmciOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTExBVElPTiA9ICJjb2xsYXRpb24iOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24geworICAgICAKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIjICIrQ2FwU2Nhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkrIjogVGhpcyBpcyBqdXN0IHRoZSBiYXNlIGNsYXNzLiBVc2UgYSBzdWJjbGFzcy4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9nOworCisgICAgcHJvdGVjdGVkIEVsZW1lbnQgYWRkQ2FwYWJpbGl0eShEb2N1bWVudCBvdXQsIEVsZW1lbnQgY2FwYWJpbGl0aWVzLCBTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgbmFtZSwgKFN0cmluZyludWxsKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIEVsZW1lbnQgYWRkQ2FwYWJpbGl0eShEb2N1bWVudCBvdXQsIEVsZW1lbnQgY2FwYWJpbGl0aWVzLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9uKSB7CisgICAgCisgICAgICAgIEVsZW1lbnQgZSA9IG91dC5jcmVhdGVFbGVtZW50KEljdUluZm8uRkVBVFVSRSk7CisgICAgICAgIGUuc2V0QXR0cmlidXRlKEljdUluZm8uVFlQRSxuYW1lLnRyaW0oKSk7CisgICAgICAgIGlmKHZlcnNpb24hPW51bGwpIHsKKyAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKEljdUluZm8uVkVSU0lPTix2ZXJzaW9uLnRyaW0oKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZENoaWxkKGUpOworICAgICAgICByZXR1cm4gZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgRWxlbWVudCBhZGRDYXBhYmlsaXR5KERvY3VtZW50IG91dCwgRWxlbWVudCBjYXBhYmlsaXRpZXMsIFN0cmluZyBuYW1lLAorICAgICAgICAgICAgVmVyc2lvbkluZm8gdmVyc2lvbikgeworICAgICAgICByZXR1cm4gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgbmFtZSwgSWN1SW5mby52ZXJzaW9uSW5mb1RvU2hvcnRTdHJpbmcodmVyc2lvbikpOworICAgIH0KKworICAgIHByb3RlY3RlZCBDYXBTY2FuKFN0cmluZyBwcm9nKSB7CisgICAgICAgIHRoaXMucHJvZyA9IHByb2c7CisgICAgfQorICAgIAorICAgIERvY3VtZW50IG91dDsKKyAgICAKKyAgICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVQcm9kdWN0KFN0cmluZyBwcm9kdWN0TmFtZSkgeworICAgICAgICBFbGVtZW50IGJhc2UgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLklDVV9JTkZPKTsKKyAgICAgICAgb3V0LmFwcGVuZENoaWxkKGJhc2UpOworICAgICAgICAKKyAgICAgICAgRWxlbWVudCBwcm9kdWN0cyA9IG91dC5jcmVhdGVFbGVtZW50KEljdUluZm8uSUNVX1BST0RVQ1RTKTsKKyAgICAgICAgYmFzZS5hcHBlbmRDaGlsZChwcm9kdWN0cyk7CisgICAgICAgIAorICAgICAgICBFbGVtZW50IHByb2R1Y3QgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLklDVV9QUk9EVUNUKTsKKyAgICAgICAgcHJvZHVjdC5zZXRBdHRyaWJ1dGUoSWN1SW5mby5UWVBFLCBwcm9kdWN0TmFtZSk7CisgICAgICAgIHByb2R1Y3RzLmFwcGVuZENoaWxkKHByb2R1Y3QpOworICAgICAgICByZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlUmVsZWFzZShFbGVtZW50IHByb2R1Y3QsIFN0cmluZyB2ZXJzaW9uKSB7CisgICAgICAgIEVsZW1lbnQgcmVsZWFzZXMgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLlJFTEVBU0VTKTsKKyAgICAgICAgcHJvZHVjdC5hcHBlbmRDaGlsZChyZWxlYXNlcyk7CisgICAgICAgIAorICAgICAgICBFbGVtZW50IHJlbGVhc2UgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLlJFTEVBU0UpOworICAgICAgICByZWxlYXNlLnNldEF0dHJpYnV0ZShJY3VJbmZvLlZFUlNJT04sIHZlcnNpb24pOworICAgICAgICByZWxlYXNlcy5hcHBlbmRDaGlsZChyZWxlYXNlKTsKKyAgICAgICAgcmV0dXJuIHJlbGVhc2U7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHJ1bk1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgCisgICAgICAgIAorICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiMgIitwcm9nKyI6IHN0YXJ0dXAuIik7CisgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgIG91dCA9IFhNTFV0aWwuZ2V0QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7CisgICAgCisgICAgRWxlbWVudCBwcm9kdWN0ID0gY3JlYXRlUHJvZHVjdChnZXRQcm9kdWN0KCkpOworICAgIAorICAgIEVsZW1lbnQgcmVsZWFzZSA9IGNyZWF0ZVJlbGVhc2UocHJvZHVjdCwgZ2V0UmVsZWFzZSgpKTsKKyAgICAKKyAgICAKKyAgICBFbGVtZW50IGNhcGFiaWxpdGllcyA9IG91dC5jcmVhdGVFbGVtZW50KEljdUluZm8uQ0FQQUJJTElUSUVTKTsKKyAgICByZWxlYXNlLmFwcGVuZENoaWxkKGNhcGFiaWxpdGllcyk7CisgICAgCisgICAgYWRkQ2FwYWJpbGl0aWVzVG8oY2FwYWJpbGl0aWVzKTsKKworCisgICAgLy8gd3JpdGUgb3V0CisgICAgT3V0cHV0U3RyZWFtIG91dHN0ciA9IG51bGw7CisgICAgb3V0c3RyID0gU3lzdGVtLm91dDsKKy8vICAgIGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOworLy8gICAgaWYob3V0ZmlsZSE9bnVsbCkgeworLy8gICAgICAgIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dGZpbGUpOworLy8gICAgICAgIG91dCA9IGZvczsKKy8vICAgICAgICBpZih2ZXJib3NlKSBTeXN0ZW0uZXJyLnByaW50bG4oIiMgV3JpdGUgPCIrb3V0ZmlsZSsiPiIpOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBvdXQgPSBTeXN0ZW0ub3V0OworLy8gICAgICAgIGlmKHZlcmJvc2UpIFN5c3RlbS5lcnIucHJpbnRsbigiIyBXcml0ZSA8c3Rkb3V0PiIpOworLy8gICAgfQorLy8gICAgdHJ5IHsKKyAgICAgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXIgd3JpdGVyID0gbmV3IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyKAorICAgICAgICAgICAgIG91dHN0cik7CisgICAgIFN0cmluZyBjb3B5ID0gIiI7CisgICAgIGlmKHRydWUpIGNvcHkgPSAoIjwhLS0gQ29weXJpZ2h0IChjKSAiK0NhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0KENhbGVuZGFyLllFQVIpKyIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPlxuIik7CisgICAgIExETUxVdGlsaXRpZXMucHJpbnRET01UcmVlKG91dCwgbmV3IFByaW50V3JpdGVyKHdyaXRlciksY29weSsiXG48IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gXCJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZFwiPlxuIixudWxsKTsgLy8KKyAgICAgd3JpdGVyLmZsdXNoKCk7CisgICAgfQorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvZHVjdCgpOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UmVsZWFzZSgpOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZENhcGFiaWxpdGllc1RvKEVsZW1lbnQgY2FwYWJpbGl0aWVzKTsKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TY2FuSUNVLmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbklDVS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNmY4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbklDVS5qYXZhCkBAIC0wLDAgKzEsMTU2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gKi8KKworLyoqCisgKiAKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuc2NhbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLnVuaWNvZGUuY2xkci51dGlsLkxETUxVdGlsaXRpZXM7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2Lm1ldGEuSWN1SW5mbzsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYubWV0YS5YTUxVdGlsOworaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVmVyc2lvbkluZm87CisKKy8qKgorICogQGF1dGhvciBzcmwKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTY2FuSUNVIGV4dGVuZHMgQ2FwU2NhbnsKKworICAgIHByb3RlY3RlZCBTY2FuSUNVKCkgeworICAgICAgICBzdXBlcihTY2FuSUNVLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAorICAgICAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAgeworICAgICAgICBuZXcgU2NhbklDVSgpLnJ1bk1haW4oYXJncyk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZHVjdCgpIHsKKyAgICAgICAgcmV0dXJuICJpY3U0aiI7CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRSZWxlYXNlKCkgeworICAgICAgICAvKgorICAgICAgICAgKiAgICAgdHJ5IHsKKyAgICB9IGNhdGNoKE5vQ2xhc3NEZWZGb3VuZEVycm9yIG5jZGYpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogQ2FuJ3QgZ2V0IElDVSB2ZXJzaW9uOiAiICsgbmNkZi50b1N0cmluZygpKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfSBjYXRjaChOb1N1Y2hGaWVsZEVycm9yIG5zbWUpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogQ2FuJ3QgZ2V0IElDVSB2ZXJzaW9uOiAiICsgbnNtZS50b1N0cmluZygpKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfQorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIEljdUluZm8udmVyc2lvbkluZm9Ub1Nob3J0U3RyaW5nKFZlcnNpb25JbmZvLklDVV9WRVJTSU9OKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhZGRDYXBhYmlsaXRpZXNUbyhFbGVtZW50IGNhcGFiaWxpdGllcykgeworICAgICAgICAKKyAgICAgICAgYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgInVuaWNvZGUiLCBVQ2hhcmFjdGVyLmdldFVuaWNvZGVWZXJzaW9uKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgInVjYSIsIENvbGxhdG9yLmdldEluc3RhbmNlKCkuZ2V0VUNBVmVyc2lvbigpKTsKKyAgICAgICAgfSBjYXRjaChOb1N1Y2hNZXRob2RFcnJvciBuc21lKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4ocHJvZysiOiBOb3RlOiAiK25zbWUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsICJ0eiIsIFRpbWVab25lLmdldFRaRGF0YVZlcnNpb24oKSk7CisgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbnNtZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogTm90ZTogIituc21lLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGFkZEZvcm1hdHRpbmcoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgYWRkQ29sbGF0aW9uKGNhcGFiaWxpdGllcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRm9ybWF0dGluZyhFbGVtZW50IGNhcGFiaWxpdGllcykgeworICAgICAgICAgICAgRWxlbWVudCBsb2NzID0gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgQ2FwU2Nhbi5GT1JNQVRUSU5HKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFVMb2NhbGUgYXZhaWxhYmxlW10gPSBVTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgICAgIGxvY3Muc2V0QXR0cmlidXRlKCJ0b3RhbCIsIG5ldyBJbnRlZ2VyKGF2YWlsYWJsZS5sZW5ndGgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2luZm8gPSAiIjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTcGlubmVyIHNwID0gbmV3IFNwaW5uZXIobG9jcy5nZXROb2RlTmFtZSgpLGF2YWlsYWJsZS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8YXZhaWxhYmxlLmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAgICAgICAJVUxvY2FsZSBsb2MgPSBhdmFpbGFibGVbaV07CisgICAgICAgICAgICAgICAgICAgIGlmKGxvYy50b1N0cmluZygpLmVxdWFscygicm9vdCIpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsgICAgICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQgZm10ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBsb2MpOworICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgCWZtdCA9IERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgbG9jLnRvTG9jYWxlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm10LmZvcm1hdChuZXcgRGF0ZSgxMjM0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NpbmZvID0gbG9jaW5mbyArICIgIiArIGxvYy50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Auc3Bpbihsb2MuZ2V0QmFzZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4ocHJvZysiOiBsb2MgZmFpbDogIiArIGxvYyArICIgLSAiICsgdC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlIHR0ID0gb3V0LmNyZWF0ZVRleHROb2RlKGxvY2luZm8udHJpbSgpKTsKKyAgICAgICAgICAgICAgICBsb2NzLmFwcGVuZENoaWxkKHR0KTsKKyAgICAgICAgICAgIH0gY2F0Y2goTm9DbGFzc0RlZkZvdW5kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGxvY2FsZXM6ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBjYXRjaChOb1N1Y2hNZXRob2RFcnJvciBuY2RmKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jYWxlczogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gICAgCisgICAgdm9pZCBhZGRDb2xsYXRpb24oRWxlbWVudCBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgeworICAgICAgICAgICAgRWxlbWVudCBsb2NzID0gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgQ2FwU2Nhbi5DT0xMQVRJT04pOworICAgICAgICAgICAgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFVMb2NhbGUgYXZhaWxhYmxlW10gPSBDb2xsYXRvci5nZXRBdmFpbGFibGVVTG9jYWxlcygpOworICAgICAgICAgICAgICAgIFNwaW5uZXIgc3AgPSBuZXcgU3Bpbm5lcihsb2NzLmdldE5vZGVOYW1lKCksYXZhaWxhYmxlLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgbG9jcy5zZXRBdHRyaWJ1dGUoInRvdGFsIiwgbmV3IEludGVnZXIoYXZhaWxhYmxlLmxlbmd0aCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdHJpbmcgbG9jaW5mbyA9ICIiOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8YXZhaWxhYmxlLmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAgICAgICAJVUxvY2FsZSBsb2MgPSBhdmFpbGFibGVbaV07CisgICAgICAgICAgICAgICAgICAgIGlmKGxvYy50b1N0cmluZygpLmVxdWFscygicm9vdCIpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyAgQ29sbGF0b3IuZ2V0SW5zdGFuY2UobG9jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2luZm8gPSBsb2NpbmZvICsgIiAiICsgbG9jLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcC5zcGluKGxvYy5nZXRCYXNlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigibG9jIGZhaWw6ICIgKyBsb2MgKyAiIC0gIiArIHQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSB0dCA9IG91dC5jcmVhdGVUZXh0Tm9kZShsb2NpbmZvLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgbG9jcy5hcHBlbmRDaGlsZCh0dCk7CisgICAgICAgICAgICB9IGNhdGNoKE5vQ2xhc3NEZWZGb3VuZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImxvY2FsZXM6ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBjYXRjaChOb1N1Y2hNZXRob2RFcnJvciBuY2RmKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJsb2NhbGVzOiAiICsgbmNkZi50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TY2FuSmF2YS5qYXZhIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NjYW5KYXZhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwODc2YgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TY2FuSmF2YS5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gKi8KKworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuQ29sbGF0b3I7CitpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKKworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVUxvY2FsZTsKKworLyoqCisgKiBAYXV0aG9yIHNybAorICoKKyAqLworcHVibGljIGNsYXNzIFNjYW5KYXZhIGV4dGVuZHMgU2ltcGxlU2NhbiB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gcHJvZworICAgICAqLworICAgIHB1YmxpYyBTY2FuSmF2YSgpIHsKKyAgICAgICAgc3VwZXIoU2NhbkphdmEuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICAvKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBjb20uaWJtLmljdS5kZXYuc2Nhbi5DYXBTY2FuI2FkZENhcGFiaWxpdGllc1RvKG9yZy53M2MuZG9tLkNhcEVsZW1lbnQpCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkQ2FwYWJpbGl0aWVzVG8oQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgYWRkRm9ybWF0dGluZyhjYXBhYmlsaXRpZXMpOworICAgICAgICBhZGRDb2xsYXRpb24oY2FwYWJpbGl0aWVzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkQ29sbGF0aW9uKENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIENhcEVsZW1lbnQgbG9jcyA9IGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIENhcFNjYW4uQ09MTEFUSU9OKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgIExvY2FsZSBhdmFpbGFibGVbXSA9IENvbGxhdG9yLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgbG9jcy5zZXRBdHRyaWJ1dGUoInRvdGFsIiwgbmV3IEludGVnZXIoYXZhaWxhYmxlLmxlbmd0aCkudG9TdHJpbmcoKSk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQmVnaW4gY29sbCEiKTsKKyAgICAgICAgICAgIFN0cmluZyBsb2NpbmZvID0gIiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwaW5uZXIgc3AgPSBuZXcgU3Bpbm5lcihsb2NzLmdldE5vZGVOYW1lKCksYXZhaWxhYmxlLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGF2YWlsYWJsZS5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICAJTG9jYWxlIGxvYyA9IGF2YWlsYWJsZVtpXTsKKyAgICAgICAgICAgICAgICBpZihsb2MudG9TdHJpbmcoKS5lcXVhbHMoInJvb3QiKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgQ29sbGF0b3IgYyA9IENvbGxhdG9yLmdldEluc3RhbmNlKGxvYyk7CisgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBsb2MpOworICAgICAgICAgICAgICAgICAgICBmbXQuZm9ybWF0KG5ldyBEYXRlKDEyMzQpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jaW5mbyA9IGxvY2luZm8gKyAiICIgKyBsb2MudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgc3Auc3Bpbihsb2MudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jIGZhaWw6ICIgKyBsb2MgKyAiIC0gIiArIHQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBDYXBOb2RlIHR0ID0gb3V0LmNyZWF0ZVRleHROb2RlKGxvY2luZm8udHJpbSgpKTsKKyAgICAgICAgICAgIGxvY3MuYXBwZW5kQ2hpbGQodHQpOworICAgICAgICB9IGNhdGNoKE5vQ2xhc3NEZWZGb3VuZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGNvbGxhdGlvbjogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogY29sbGF0aW9uOiAiICsgbmNkZi50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbG9jcy5hcHBlbmRDaGlsZChvdXQuY3JlYXRlQ29tbWVudCgiTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiIpKTsKKyAgICAgICAgCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZEZvcm1hdHRpbmcoQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgQ2FwRWxlbWVudCBsb2NzID0gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgQ2FwU2Nhbi5GT1JNQVRUSU5HKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgIExvY2FsZSBhdmFpbGFibGVbXSA9IExvY2FsZS5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGxvY3Muc2V0QXR0cmlidXRlKCJ0b3RhbCIsIG5ldyBJbnRlZ2VyKGF2YWlsYWJsZS5sZW5ndGgpLnRvU3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBsb2NpbmZvID0gIiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwaW5uZXIgc3AgPSBuZXcgU3Bpbm5lcihsb2NzLmdldE5vZGVOYW1lKCksYXZhaWxhYmxlLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGF2YWlsYWJsZS5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICAJTG9jYWxlIGxvYyA9IGF2YWlsYWJsZVtpXTsKKyAgICAgICAgICAgICAgICBpZihsb2MudG9TdHJpbmcoKS5lcXVhbHMoInJvb3QiKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgRGF0ZUZvcm1hdCBmbXQgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIGxvYyk7CisgICAgICAgICAgICAgICAgICAgIGZtdC5mb3JtYXQobmV3IERhdGUoMTIzNCkpOworICAgICAgICAgICAgICAgICAgICBsb2NpbmZvID0gbG9jaW5mbyArICIgIiArIGxvYy50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBzcC5zcGluKGxvYy50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4ocHJvZysiOiBsb2MgZmFpbDogIiArIGxvYyArICIgLSAiICsgdC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENhcE5vZGUgdHQgPSBvdXQuY3JlYXRlVGV4dE5vZGUobG9jaW5mby50cmltKCkpOworICAgICAgICAgICAgbG9jcy5hcHBlbmRDaGlsZCh0dCk7CisgICAgICAgIH0gY2F0Y2goTm9DbGFzc0RlZkZvdW5kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jYWxlczogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jYWxlczogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvY3MuYXBwZW5kQ2hpbGQob3V0LmNyZWF0ZUNvbW1lbnQoIk5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4iKSk7CisgICAgICAgIAorICAgIH0KKworICAgIC8qIChub24tSmF2YWRvYykKKyAgICAgKiBAc2VlIGNvbS5pYm0uaWN1LmRldi5zY2FuLkNhcFNjYW4jZ2V0UHJvZHVjdCgpCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9kdWN0KCkgeworICAgICAgICByZXR1cm4gImphdmEiOworICAgIH0KKworICAgIC8qIChub24tSmF2YWRvYykKKyAgICAgKiBAc2VlIGNvbS5pYm0uaWN1LmRldi5zY2FuLkNhcFNjYW4jZ2V0UmVsZWFzZSgpCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRSZWxlYXNlKCkgeworICAgICAgICBTdHJpbmcgdmVyID0gIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIik7CisgICAgICAgIGludCB1ID0gdmVyLmluZGV4T2YoJ18nKTsKKyAgICAgICAgaWYodT4wKSB7CisgICAgICAgIAl2ZXIgPSB2ZXIuc3Vic3RyaW5nKDAsdSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gYXJncworICAgICAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG5ldyBTY2FuSmF2YSgpLnJ1bk1haW4oYXJncyk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2ltcGxlU2Nhbi5qYXZhIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NpbXBsZVNjYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTRkNzQyCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NpbXBsZVNjYW4uamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy51bmljb2RlLmNsZHIudXRpbC5MRE1MVXRpbGl0aWVzOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2Lm1ldGEuSWN1SW5mbzsKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYubWV0YS5YTUxVdGlsOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVmVyc2lvbkluZm87CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW1wbGVTY2FuIHsKKworICAgIC8qKiBDYXBhYmlsaXRpZXMgc3RyaW5nICoqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRJTkcgPSAiZm9ybWF0dGluZyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MTEFUSU9OID0gImNvbGxhdGlvbiI7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gYXJncworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgIAorICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiMgIitTaW1wbGVTY2FuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSsiOiBUaGlzIGlzIGp1c3QgdGhlIGJhc2UgY2xhc3MuIFVzZSBhIHN1YmNsYXNzLiIpOworICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHByb2c7CisKKyAgICBwcm90ZWN0ZWQgQ2FwRWxlbWVudCBhZGRDYXBhYmlsaXR5KENhcERvY3VtZW50IG91dCwgQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiBhZGRDYXBhYmlsaXR5KG91dCwgY2FwYWJpbGl0aWVzLCBuYW1lLCAoU3RyaW5nKW51bGwpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgQ2FwRWxlbWVudCBhZGRDYXBhYmlsaXR5KENhcERvY3VtZW50IG91dCwgQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMsIFN0cmluZyBuYW1lLAorICAgICAgICAgICAgU3RyaW5nIHZlcnNpb24pIHsKKyAgICAKKyAgICAgICAgQ2FwRWxlbWVudCBlID0gb3V0LmNyZWF0ZUNhcEVsZW1lbnQoSWN1SW5mby5GRUFUVVJFKTsKKyAgICAgICAgZS5zZXRBdHRyaWJ1dGUoSWN1SW5mby5UWVBFLG5hbWUudHJpbSgpKTsKKyAgICAgICAgaWYodmVyc2lvbiE9bnVsbCkgeworICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoSWN1SW5mby5WRVJTSU9OLHZlcnNpb24udHJpbSgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIHJldHVybiBlOworICAgIH0KKworICAgIHByb3RlY3RlZCBDYXBFbGVtZW50IGFkZENhcGFiaWxpdHkoQ2FwRG9jdW1lbnQgb3V0LCBDYXBFbGVtZW50IGNhcGFiaWxpdGllcywgU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBWZXJzaW9uSW5mbyB2ZXJzaW9uKSB7CisgICAgICAgIHJldHVybiBhZGRDYXBhYmlsaXR5KG91dCwgY2FwYWJpbGl0aWVzLCBuYW1lLCBJY3VJbmZvLnZlcnNpb25JbmZvVG9TaG9ydFN0cmluZyh2ZXJzaW9uKSk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIFNpbXBsZVNjYW4oU3RyaW5nIHByb2cpIHsKKyAgICAgICAgdGhpcy5wcm9nID0gcHJvZzsKKyAgICB9CisgICAgCisgICAgQ2FwRG9jdW1lbnQgb3V0OworICAgIAorICAgIHByb3RlY3RlZCBDYXBFbGVtZW50IGNyZWF0ZVByb2R1Y3QoU3RyaW5nIHByb2R1Y3ROYW1lKSB7CisgICAgICAgIENhcEVsZW1lbnQgYmFzZSA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uSUNVX0lORk8pOworICAgICAgICBvdXQuYXBwZW5kQ2hpbGQoYmFzZSk7CisgICAgICAgIAorICAgICAgICBDYXBFbGVtZW50IHByb2R1Y3RzID0gb3V0LmNyZWF0ZUNhcEVsZW1lbnQoSWN1SW5mby5JQ1VfUFJPRFVDVFMpOworICAgICAgICBiYXNlLmFwcGVuZENoaWxkKHByb2R1Y3RzKTsKKyAgICAgICAgCisgICAgICAgIENhcEVsZW1lbnQgcHJvZHVjdCA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uSUNVX1BST0RVQ1QpOworICAgICAgICBwcm9kdWN0LnNldEF0dHJpYnV0ZShJY3VJbmZvLlRZUEUsIHByb2R1Y3ROYW1lKTsKKyAgICAgICAgcHJvZHVjdHMuYXBwZW5kQ2hpbGQocHJvZHVjdCk7CisgICAgICAgIHJldHVybiBwcm9kdWN0OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2FwRWxlbWVudCBjcmVhdGVSZWxlYXNlKENhcEVsZW1lbnQgcHJvZHVjdCwgU3RyaW5nIHZlcnNpb24pIHsKKyAgICAgICAgQ2FwRWxlbWVudCByZWxlYXNlcyA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uUkVMRUFTRVMpOworICAgICAgICBwcm9kdWN0LmFwcGVuZENoaWxkKHJlbGVhc2VzKTsKKyAgICAgICAgCisgICAgICAgIENhcEVsZW1lbnQgcmVsZWFzZSA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uUkVMRUFTRSk7CisgICAgICAgIHJlbGVhc2Uuc2V0QXR0cmlidXRlKEljdUluZm8uVkVSU0lPTiwgdmVyc2lvbik7CisgICAgICAgIHJlbGVhc2VzLmFwcGVuZENoaWxkKHJlbGVhc2UpOworICAgICAgICByZXR1cm4gcmVsZWFzZTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgcnVuTWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAKKyAgICAgICAgCisgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIyAiK3Byb2crIjogc3RhcnR1cC4iKTsKKyAgICBvdXQgPSBDYXBEb2N1bWVudC5uZXdDYXBEb2N1bWVudCgpOworICAgIAorICAgIENhcEVsZW1lbnQgcHJvZHVjdCA9IGNyZWF0ZVByb2R1Y3QoZ2V0UHJvZHVjdCgpKTsKKyAgICAKKyAgICBDYXBFbGVtZW50IHJlbGVhc2UgPSBjcmVhdGVSZWxlYXNlKHByb2R1Y3QsIGdldFJlbGVhc2UoKSk7CisgICAgCisgICAgCisgICAgQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMgPSBvdXQuY3JlYXRlQ2FwRWxlbWVudChJY3VJbmZvLkNBUEFCSUxJVElFUyk7CisgICAgcmVsZWFzZS5hcHBlbmRDaGlsZChjYXBhYmlsaXRpZXMpOworICAgIAorICAgIGFkZENhcGFiaWxpdGllc1RvKGNhcGFiaWxpdGllcyk7CisKKworICAgIC8vIHdyaXRlIG91dAorICAgIE91dHB1dFN0cmVhbSBvdXRzdHIgPSBudWxsOworICAgIG91dHN0ciA9IFN5c3RlbS5vdXQ7CisvLyAgICBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKKy8vICAgIGlmKG91dGZpbGUhPW51bGwpIHsKKy8vICAgICAgICBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRmaWxlKTsKKy8vICAgICAgICBvdXQgPSBmb3M7CisvLyAgICAgICAgaWYodmVyYm9zZSkgU3lzdGVtLmVyci5wcmludGxuKCIjIFdyaXRlIDwiK291dGZpbGUrIj4iKTsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgb3V0ID0gU3lzdGVtLm91dDsKKy8vICAgICAgICBpZih2ZXJib3NlKSBTeXN0ZW0uZXJyLnByaW50bG4oIiMgV3JpdGUgPHN0ZG91dD4iKTsKKy8vICAgIH0KKy8vICAgIHRyeSB7CisgICAgIGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcigKKyAgICAgICAgICAgICBvdXRzdHIpOworICAgICBTdHJpbmcgY29weSA9ICIiOworICAgICBpZih0cnVlKSBjb3B5ID0gKCI8IS0tIENvcHlyaWdodCAoYykgIitDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldChDYWxlbmRhci5ZRUFSKSsiIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5cbiIpOworICAgICBDYXBEb2N1bWVudC5wcmludERPTVRyZWUob3V0LCBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKSxjb3B5KyJcbjwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSBcImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkXCI+XG4iLG51bGwpOyAvLworICAgICB3cml0ZXIuZmx1c2goKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRQcm9kdWN0KCk7CisgICAgCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRSZWxlYXNlKCk7CisgICAgCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYWRkQ2FwYWJpbGl0aWVzVG8oQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMpOworfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NwaW5uZXIuamF2YSBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TcGlubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5YTE2YgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TcGlubmVyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2NsYXNzIFNwaW5uZXIgeworICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBpbnQgbiA9IDA7CisgICAgaW50IG1heCA9IC0xOworICAgIFNwaW5uZXIoKSB7CisgICAgfQorICAgIFNwaW5uZXIoU3RyaW5nIHN0cikgeworICAgICAgICB0aGlzLnN0ciA9IHN0cjsKKyAgICB9CisgICAgU3Bpbm5lcihTdHJpbmcgc3RyLCBpbnQgbWF4KSB7CisgICAgICAgIHRoaXMuc3RyID0gc3RyOworICAgICAgICB0aGlzLm1heCA9IG1heDsKKyAgICB9CisgICAgdm9pZCBzcGluKCkgeworICAgICAgICBzcGluKG51bGwpOworICAgIH0KKyAgICB2b2lkIHNwaW4oU3RyaW5nIHdoYXQpIHsKKyAgICAgICAgLy8gVE9ETzogdGltZSBiYXNlZC4KKyAgICAgICAgbisrOworICAgICAgICBpZigobiUyNSk9PTApIHsKKyAgICAgICAgICAgIFN0cmluZyBuc3RyPSIiOworICAgICAgICAgICAgaWYobWF4PjApIHsKKyAgICAgICAgICAgICAgICBuc3RyPSIvIittYXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiMiK3N0cisiLi4iK24rbnN0cisiICIrKHdoYXQhPW51bGw/d2hhdDoiIikpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvTWFrZWZpbGUgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzNiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsMzU4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworYWxsOiBnbHVyZW5zIGlpIHBsdWdzIHRlc3Rwcm9nCisKKyMgZXh0cmEgZmlsZXMgdGhhdCBuZWVkIGdlbmVyYXRpb24uCitQTFVHX0VYVFJBX0RFUFM9CitVTkFNRT0kKHNoZWxsIHVuYW1lKQorRE9UPS4uLy4uL2MKK1NPQko9YW8KK2lmZXEgKCQoVU5BTUUpLExpbnV4KQorTElCUEFUSF9WQVI9TERfTElCUkFSWV9QQVRICitQTFVHX0VYVFJBX0xERkxBR1M9LWZQSUMKK1BCTERfRVhUUkFfRkxBR1M9LWZQSUMKK0dMVUVfRVhUUkFfQ0ZMQUdTPSAtZlBJQworUExVR0xJQl9TTz1zbworZWxzZQoraWZlcSAoJChVTkFNRSksRGFyd2luKQorTElCUEFUSF9WQVI9RFlMRF9MSUJSQVJZX1BBVEgKK1BMVUdfRVhUUkFfTERGTEFHUz0tZXhwb3J0ZWRfc3ltYm9sc19saXN0ICQoR0xVRV9FWFBPUlQpIC1keW5hbWljbGliIC1keW5hbWljCitQTFVHX0VYVFJBX0RFUFMrPSQoR0xVRV9FWFBPUlQpCitQTFVHTElCX1NPPWR5bGliCitlbHNlCitpZmVxICgkKFVOQU1FKSxBSVgpCitMSUJQQVRIX1ZBUj1MSUJQQVRICisjUExVR19FWFRSQV9MREZMQUdTPS1leHBvcnRlZF9zeW1ib2xzX2xpc3QgJChHTFVFX0VYUE9SVCkgLWR5bmFtaWNsaWIgLWR5bmFtaWMKK1BMVUdfRVhUUkFfREVQUys9JChHTFVFX0VYUE9SVCkKK1BMVUdMSUJfU089YQorU09CSj1vCitlbHNlCiskKHdhcm5pbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikKKyQod2FybmluZyB0aGlzIHNjcmlwdCBtYXkgbm90IGtub3cgaG93IHRvIGhhbmRsZSB5b3VyICQoVU5BTUUpIHN5c3RlbSkKK2VuZGlmCitlbmRpZgorZW5kaWYKKworU1VCSEVBRD0iKioqIElDVSIKKworc3JjZGlyPSQoc2hlbGwgcHdkKQorCitQUk9WSURFUj1wcm92aWRlcgorTElCUFJPVklERVI9bGliJChQUk9WSURFUikuYQorCisjbGliczogJChJQ1VfVEFSQkFMTFNfVkVSUzolPSQoT1VUKS8lL2xpYi8kKExJQlBST1ZJREVSKSkKKworUExVR0xJQl9JTlNUPSQoQ19JTlMpL3IkKFBMVUdMSUIpCitQTFVHTElCX0lDVV9DT05GSUc9JChQTFVHTElCX0lOU1QpL2Jpbi9pY3UtY29uZmlnCisjUExVR0xJQl9TTz0kKHNoZWxsICQoUExVR0xJQl9JQ1VfQ09ORklHKSAtLXNvIDI+L2Rldi9udWxsICkKK1BMVUdMSUJfTkFNRT1saWJpY3Vwcm92LiQoUExVR0xJQl9NQUopLiQoUExVR0xJQl9TTykKKyNQTFVHTElCX01BSj0kKGVjaG8gJChQTFVHTElCKSB8IGN1dCAtZF8gLWYtMSB8IHRyIC1kIF8gKQorI0dMT1VUX0lDVT0kKElDVV9UQVJCQUxMU19WRVJTOiU9JChHTE9VVCkvJS8kKE9LKSkKK1BMVUdMSUJfQVZBSUxBQkxFPSQoc2hlbGwgZWNobyAkKFBST1ZJREVSX0FWQUlMQUJMRSkgfCB0ciAnLicgJ18nKQorUExVR0xJQl9BVkFJTEFCTEVfREFUQT0kKFBMVUdMSUJfQVZBSUxBQkxFOiU9JChCVUlMRCkvJS9kYXRhL291dC90bXAvKi5vKQorUExVR0xJQl9BVkFJTEFCTEVfU1RBVElDUz0kKFBMVUdMSUJfQVZBSUxBQkxFOiU9JChCVUlMRCkvJS9bY2ldKi8qLiQoU09CSikpCitQTFVHTElCX09VVExJQlM9JChQTFVHTElCOiU9JChPVVQpLyUvbGliLyQoUExVR0xJQl9OQU1FKSkKKworCisKKyMjIGNvbmZpZ3VyYXRpb24KKyMgQWJzb2x1dGUgcGF0aCB0byB0aGlzIGRpci4gCisjIGRpciBob2xkaW5nIElDVXMgdG8gYmUgYnVpbHQKK01VTFRJQ1VfUk9PVD0uLi8uLgoraW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvYy9NYWtlZmlsZS1jLmluYworSUNVX0NPTkZJRz1pY3UtY29uZmlnLW5vc2FuaXR5CitJQ1VfQ09ORklHX09SSUc9aWN1LWNvbmZpZworCisjIHN1YmRpcnMuLi4KKyMgcHJlZml4IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gbm9uLXByb3ZpZGVyIGJ1aWxkcworUF9QUkVGSVg9cAorQlVJTEQ9JChNX1RNUCkvJChQX1BSRUZJWClibGQKK0lOU1Q9JChNX1RNUCkvJChQX1BSRUZJWClpbnMKK1NSQz0kKE1fVE1QKS8kKFBfUFJFRklYKXNyYworT1VUPSQoVE9QKS9vdXQKK1NPVVJDRT0kKFNfU1JDRElSKQorR0xVRT1nbHVlCitHTFVFX0VYUE9SVD0kKEdMVUUpL2V4cG9ydC50eHQKK0dMT1VUPSQoTV9UTVApLyQoUF9QUkVGSVgpZ2xvdXQKKyMgaGVhZGVyIGxvY2F0aW9ucworSU5DR0xVRT0kKFRPUCkvJChHTFVFKS9pbmNsdWRlCisjIHJlbGF0aXZlIHBhdGggdG8gaWN1Z2x1ZSB3aXRoaW4gZ2xvdXQKK0dMVVJFTj1nbHVyZW4vaW5jbHVkZS9pY3VnbHVlCisjIHJlbGF0aXZlIHBhdGggdG8gZ2x1cmVuLmgKK0dMVVJFTl9IPSQoR0xVUkVOKS9nbHVyZW4uaAorIyBTcGVjaWFsICdjb25maWd1cmUnIGNhbGxlcgorU1VQRVJDT05GPSQoVE9QKS8kKE1VTFRJQ1VfUk9PVCkvYy9zdXBlcmNvbmYuc2gKKyMgb3B0aW9ucyB0byBjb21waWxhdGlvbiAoc3VjaCBhcywgZGVidWcpCitYT1BUUz0kKEVYVFJBX0NPTVBJTEVfT1BUUykKK09LPW9rCitNT1BUUz0KKworIyBkaXJlY3RvcmllcyB0aGF0IG5lZWQgdG8gYmUgYnVpbHQKK0FMTERJUlM9JChJTlNUKSAkKEJVSUxEKSAkKFNSQykgJChHTE9VVCkgJChPVVQpICQoR0xPVVQpLyQoUExVR0xJQikgJChPVVQpLyQoUExVR0xJQikvYmluCisjIFRoZSAnb2snIGZsYWcgZmlsZSBmb3IgaW5zdGFsbGF0aW9ucworSU5TVF9JQ1U9JChQTFVHTElCX0FWQUlMQUJMRTolPSQoSU5TVCkvJS8kKE9LKSkKK0JVSUxEX0lDVT0kKFBMVUdMSUJfQVZBSUxBQkxFOiU9JChCVUlMRCkvJS8kKE9LKSkKKyMgdGhpcyBoYXMgdG8gZG8gd2l0aCB0aGUgcGx1Z2xpYgorR0xPVVRfSUNVPSQoUExVR0xJQjolPSQoR0xPVVQpLyUvb2JqLSQoT0spKQorI1NSQ19JQ1U9JChJQ1VfVEFSQkFMTFNfVkVSUzolPSQoU1JDKS8lLyQoT0spKQorIyBnbHVyZW4uaCBmaWxlcyBmb3IgZWFjaCB2ZXJzaW9uCitHTFVSRU5fSUNVPSQoUExVR0xJQl9BVkFJTEFCTEU6JT0kKEJVSUxEKS8lLyQoR0xVUkVOX0gpKQorIz8KK0NPTkZJR1VSRV9DTUQ9CisjIE9wdGlvbnMgcGFzc2VkIHRvIGNvbmZpZ3VyZQorQ09ORklHVVJFX09QVFM9LS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS1zaGFyZWQgLS13aXRoLWRhdGEtcGFja2FnaW5nPXN0YXRpYyAtLWRpc2FibGUtZXh0cmFzIC0tZGlzYWJsZS1pY3VpbyAtLWRpc2FibGUtbGF5b3V0IC0tZGlzYWJsZS10ZXN0cyAtLWRpc2FibGUtc2FtcGxlcyAgJChFWFRSQV9DT05GSUdVUkVfT1BUUykgCisjIGFkZGl0aW9uYWwgb3B0aW9ucyBwYXNzZWQgdG8gbWFrZQorTUFLRV9YVFJBX09QVFM9IlBLR0RBVEFfTU9ERT1zdGF0aWMiCisjIGFkZGl0aW9uYWwgb3B0aW9ucyBwYXNzZWQgdG8gbWFrZSBpbnN0YWxsCitNQUtFX0lOU1RBTExfWFRSQV9PUFRTPSQoTUFLRV9YVFJBX09QVFMpCisKKyMgTXVuZ2VkIHNvdXJjZSBuYW1lczogbGlzdCBvZiBDKyssIE8gZXRjIGZpbGVzIGZvciBGcm9udGVuZAorUEFSVFNVRkY9X2ZlCitHTF9GRV9DWFg9JChub3RkaXIgJCh3aWxkY2FyZCAkKEdMVUUpLyokKFBBUlRTVUZGKS5jcHApKQorR0xfRkVfRklMRVM9JChHTF9GRV9DWFg6JS5jcHA9JChHTFVFKS8lLmNwcCkKK0dMX0ZFX089JChHTF9GRV9DUFA6JS5jcHA9JS5vKQorR0xfUEFSVFM9JChHTF9GRV9DWFg6JSQoUEFSVFNVRkYpLmNwcD0lKQorIyBDIGZsYWdzIHVzZWQgaW4gR2x1ZSBjb21waWxhdGlvbgorR0xVRV9DRkxBR1M9LUkkKElOQ0dMVUUpICQoR0xVRV9FWFRSQV9DRkxBR1MpCisKKyMgaWN1LWNvbmZpZyBzd2l0Y2hlcyBmb3IgY29tcGlsaW5nOiBDIGFuZCBDKysKK0lDVV9DT05GSUdfQ09NTU9OPS0tY3BwZmxhZ3MKKyMgaWN1LWNvbmZpZyBzd2l0Y2hlcyBmb3IgQworSUNVX0NPTkZJR19DQz0tLWNjICQoSUNVX0NPTkZJR19DT01NT04pIC0tY2ZsYWdzIAorIyBpY3UtY29uZmlnIHN3aXRjaGVzIGZvciBDKysKK0lDVV9DT05GSUdfQ1hYPS0tY3h4ICQoSUNVX0NPTkZJR19DT01NT04pIC0tY3h4ZmxhZ3MKKworIyBzaWdoLCBpbmNsdWRlIGNvbW1vbi4KK1BMVUdfRVhUUkFfRkxBR1M9LUkkKEJVSUxEKS8kKFBMVUdMSUIpL2NvbW1vbiAtSSQoTV9UTVApL2J1aWxkL3IkKFBMVUdMSUIpL2ljdS9zb3VyY2UvY29tbW9uCisKK2luY2x1ZGUgTWFrZWZpbGUubG9jYWwKKworCisKKyMgVXNhZ2U6ICAkKGNhbGwgU0lMRU5UX0NPTVBJTEUsbG9nZmlsZSxjbWQpCitpZm5kZWYgVkVSQk9TRQorCUxPR19DT01QSUxFPWVjaG8gYnVpbGQgd2l0aCBWRVJCT1NFPTEgdG8gdW5oaWRlIGNvbXBpbGUgOyAgKCAoJCgyKSAyPiYxKSA+ICQoMSkgfHwgKGVjaG8gIkNvbXBpbGUgZmFpbGVkLCBzZWUgbG9nZmlsZSBpbiAkKDEpIGZvciBkZXRhaWxzLiIgO2V4aXQgMSkpCitlbHNlCisJTE9HX0NPTVBJTEU9JCgyKSAyPiYxIHwgdGVlICQoMSkKK2VuZGlmCisKK0VDSE9fQ09NUElMRT1lY2hvICJcIyAke3N1YnN0ICIsXCIsJCgxKX0iIDsgKCAkKDEpIHx8ICggIGV4aXQgMSkgKQorCitQTFVHTElCPSQoc2hlbGwgZWNobyAkKFBST1ZJREVSX1RBUkdFVCkgIHwgdHIgJy4nICdfJyApCitQTFVHTElCX01BSj0kKHNoZWxsICAuL2ljdTJzeW12ZXIuc2ggJChQTFVHTElCKSkKKworIyMgQGJ1aWxkIEFsbCBpbnN0YWxsZWQgSUNVcworaWk6ICQoR0xPVVRfSUNVKQorCisjIERvbid0IGRlbGV0ZSB0aGVzZSBmaWxlcworLlBSRUNJT1VTOiAoSU5TVF9JQ1UpICQoQlVJTERfSUNVKSAkKFNSQ19JQ1UpICQoSUNVX1RBUkJBTExTX1ZFUlM6JT0kKEJVSUxEKS8lL2NvbmZpZy5zdGF0dXMpICQoSUNVX1RBUkJBTExTX1ZFUlM6JT0kKEdMT1VUKS8lL29iai0kKE9LKSkgICQoSUNVX1RBUkJBTExTX1ZFUlM6JT0kKEJVSUxEKS8lL2NvbmZpZy8kKElDVV9DT05GSUcpKSAkKFBMVUdMSUJfSUNVX0NPTkZJRykKKworIyBjbGVhbnVwCitjbGVhbjoKKwktcm0gLXJmICQoQUxMRElSUykKKwktJChNQUtFKSAtQyAuLi8uLiBjbGVhbgorCisjIGNyZWF0ZSBhbGwgZW1wdHkgd29yayBkaXJzCiskKEFMTERJUlMpOgorCS1ta2RpciAtcCAkKEApCisKKyMgQnVpbGQgciQoUExVR0xJQikgZnJvbSAuLi8uLi9jCiskKFBMVUdMSUJfSUNVX0NPTkZJRyk6CisJQGVjaG8gIiQoU1VCSEVBRCkgIiQoUExVR0xJQikgIihwbHVnaW4pIGJ1aWxkaW5nLi4uIgorCSQoY2FsbCBMT0dfQ09NUElMRSwuLi8uLi9jL3JpY3VzJChQTFVHTElCKS5sb2csJChNQUtFKSBNQUtFX09QVFM9JChNQUtFX09QVFMpIFhUUkFfUklDVV9DUFBGTEFHUz0kKFhUUkFfUklDVV9DUFBGTEFHUykgLUMgLi4vLi4vYyBJQ1VWRVJTPSQoUExVR0xJQikgcmljdXMpCisKKyMgYnVpbGQgdGhlIGdsdWUgb2JqZWN0cyBmb3IgVEFSR0VUCisjIHVzZWQgdG8gYmUgJS8qIGluc3RlYWQgb2YgJChQTFVHTElCKSAtIG5vdywgd2lyZSBpdCBkb3duIHRvIHBsdWdsaWIuCiskKEdMT1VUKS8kKFBMVUdMSUIpL29iai0kKE9LKTogJChHTE9VVCkgZ2x1cmVucyAgJChQTFVHTElCX0lDVV9DT05GSUcpICQoR0xfRkVfRklMRVMpICQoQUxMRElSUykKKwlAZWNobyAkKFNVQkhFQUQpICQoUExVR0xJQikgIihwbHVnaW4pIGJ1aWxkaW5nIGdsdWUuLiIKKyMJJChzaGVsbCAkKEJVSUxEKS8kKFBMVUdMSUIpL2NvbmZpZy8kKElDVV9DT05GSUcpICQoSUNVX0NPTkZJR19DQykpICQoR0xVRV9DRkxBR1MpIC1jIC1ESUNVR0xVRV9WRVI9JChQTFVHTElCKSAtbyAkKEdMT1VUKS8kKFBMVUdMSUIpL2dsX2JlX2NfJChQTFVHTElCKS5vICQoR0xfQkVfQzolLmM9JChHTFVFKS8lLmMpCisjCSQoc2hlbGwgJChCVUlMRCkvJChQTFVHTElCKS9jb25maWcvJChJQ1VfQ09ORklHKSAkKElDVV9DT05GSUdfQ1hYKSkgJChHTFVFX0NGTEFHUykgLWMgLURJQ1VHTFVFX1ZFUj0kKFBMVUdMSUIpIC1vICQoR0xPVVQpLyQoUExVR0xJQikvZ2xfYmVfY3h4XyQoUExVR0xJQikubyAkKEdMX0JFX0NYWDolLmNwcD0kKEdMVUUpLyUuY3BwKQorCS1ybSAtcmYgJChHTE9VVCkvJChQTFVHTElCKS9pbmNsdWRlCisJbWtkaXIgLXAgJChHTE9VVCkvJChQTFVHTElCKS9pbmNsdWRlL2ljdWdsdWUvaW5jbHVkZQorIyBmb3IgZWFjaCB2ZXJzaW9uLi4gIGJ1aWxkIGFsbCBPVEhFUiBGRSBmaWxlcworIyBUT0RPOiBjaGVjayBpcyB1bm5lY2Vzc2FyeSwgbm90IHBlcm1pdHRlZC4KKyMgVE9ETzogY2hhbmdlIHRvIGRlcGVuZCBpbnN0ZWFkIG9mIGZvciBsaXN0LiAKKwlAZm9yIHZlciBpbiAkKFBMVUdMSUJfQVZBSUxBQkxFKSA7IFwKKwlkbyBcCisJCWVjaG8gIiokKFNVQkhFQUQpIiAkJHZlciAiKHByb3ZpZGVyKSIgZm9yICAkKFBMVUdMSUIpICIocGx1Z2luKSIgOyBcCisJCWlmIFsgISAiJCR2ZXIiID0gIiQoUExVR0xJQikiIF07IFwKKwkJdGhlbiBcCisJCQlmb3IgcGFydCBpbiAkKEdMX1BBUlRTKSA7IFwKKwkJCWRvIFwKKwkJCQllY2hvICIqKiQoU1VCSEVBRCkiICQkdmVyICIocHJvdmlkZXIpIGJhY2tlbmQ6IC0tLS0gIiAiJCRwYXJ0IiAiLS0tLSIgIDsgXAorCQkJCSQoY2FsbCBFQ0hPX0NPTVBJTEUsJChzaGVsbCAkKFBMVUdMSUJfSUNVX0NPTkZJRykgLS1ub3ZlcmlmeSAkKElDVV9DT05GSUdfQ1hYKSkgJChHTFVFX0NGTEFHUykgLWMgLUkkKFRPUCkvJChCVUlMRCkvJCR2ZXIvZ2x1cmVuL2luY2x1ZGUgLURJQ1VHTFVFX1ZFUj0kJHZlciAtRElDVUdMVUVfVkVSX1NUUj1cIiQkdmVyXCIgIi1ER0xVRV9TWU0oeCk9Z2x1ZSAjIyB4ICMjICQkdmVyIiAtbyAkKEdMT1VUKS8kKFBMVUdMSUIpLyQke3BhcnR9XyQke3Zlcn1fZm9yXyQoUExVR0xJQikubyAkKEdMVUUpLyQke3BhcnR9JChQQVJUU1VGRikuY3BwICQoWE9QVFMpICkgfHwgZXhpdCAxIDsgXAorCQkJZG9uZSA7IFwKKwkJCWVjaG8gIiBHTFVFX1ZFUiggJCR2ZXIgKSAiID4+ICQoR0xPVVQpLyQoUExVR0xJQikvaW5jbHVkZS9pY3VnbHVlL2dsdmVyLmg7IFwKKwkJZmkgXAorCWRvbmUKKyMgYnVpbGQgJ3RoaXMgdmVyc2lvbicgRkUgZmlsZXMKKwlAZm9yIHBhcnQgaW4gJChHTF9QQVJUUykgOyBcCisJZG8gXAorCQllY2hvICJJQ1UiICQoUExVR0xJQikgIihwbHVnaW4pIGJ1aWxkaW5nIHBsdWdpbiBmb3IgIC0tLS0tLS0gJCRwYXJ0IC0tLS0tIiA7IFwKKwkJJChjYWxsIEVDSE9fQ09NUElMRSwkKHNoZWxsICQoUExVR0xJQl9JQ1VfQ09ORklHKSAtLW5vdmVyaWZ5ICQoSUNVX0NPTkZJR19DWFgpKSAkKEdMVUVfQ0ZMQUdTKSAtSSQoR0xPVVQpLyQoUExVR0xJQikvaW5jbHVkZSAtYyAtbyAkKEdMT1VUKS8kKFBMVUdMSUIpLyQke3BhcnR9XyQoUExVR0xJQikubyAkKEdMVUUpLyQke3BhcnR9JChQQVJUU1VGRikuY3BwICQoWE9QVFMpICQoUExVR19FWFRSQV9GTEFHUykgKSB8fCBleGl0IDEgOyBcCisJZG9uZQorCXRvdWNoICRACisKK3BsdWdzOiAkKFBMVUdMSUJfT1VUTElCUykgJChPVVQpLyQoUExVR0xJQl9NQUo6JT1pY3VwbHVnaW5zJS50eHQpCisKK2luc3RhbGwtcGx1Z3M6ICQoUExVR0xJQl9JTlNUKS9saWIvJChQTFVHTElCX05BTUUpICQoUExVR0xJQl9JTlNUKS9saWIvaWN1L2ljdXBsdWdpbnMkKFBMVUdMSUJfTUFKKS50eHQKKwllY2hvICJQbHVnaW5zIGluc3RhbGxlZCBmb3IgdGVzdGluZy4iCisKKyNUT0RPOiBzaG91bGQgYmUgJ2luc3RhbGwnIG5vdCAnY3AnCiskKFBMVUdMSUJfSU5TVCkvbGliLyQoUExVR0xJQl9OQU1FKSAkKFBMVUdMSUJfSU5TVCkvbGliL2ljdS9pY3VwbHVnaW5zJChQTFVHTElCX01BSikudHh0OiAkKFBMVUdMSUJfT1VUTElCUykKKwljcCAkKFBMVUdMSUJfT1VUTElCUykgJChQTFVHTElCX0lOU1QpL2xpYgorCWVjaG8gIiMgR2VuZXJhdGVkLiAiID4gJChQTFVHTElCX0lOU1QpL2xpYi9pY3UvaWN1cGx1Z2lucyQoUExVR0xJQl9NQUopLnR4dAorCUBmb3IgcGFydCBpbiAkKEdMX1BBUlRTKSA7IFwKKwlkbyBcCisJCWVjaG8gIiQoUExVR0xJQl9OQU1FKQkkJHtwYXJ0fV9wcm92aWRlcl9wbHVnaW4iID4+ICQoUExVR0xJQl9JTlNUKS9saWIvaWN1L2ljdXBsdWdpbnMkKFBMVUdMSUJfTUFKKS50eHQgOyBcCisJCWVjaG8gIiAkJHtwYXJ0fV9wcm92aWRlcl9wbHVnaW4iIDsgXAorCWRvbmUKKworJChHTFVFX0VYUE9SVCk6IE1ha2VmaWxlICQoR0xfRkVfRklMRVMpCisJZWNobyAiIyBHZW5lcmF0ZWQgZm9yIGluc3RhbGxhdGlvbi4gIiA+ICRACisJQGZvciBwYXJ0IGluICQoR0xfUEFSVFMpIDsgXAorCWRvIFwKKwkJZWNobyAiXyQke3BhcnR9X3Byb3ZpZGVyX3BsdWdpbiIgPj4gJEAgOyBcCisJCWVjaG8gIiBfJCR7cGFydH1fcHJvdmlkZXJfcGx1Z2luIiA7IFwKKwlkb25lCisKKyQoT1VUKS9pY3VwbHVnaW5zJChQTFVHTElCX01BSikudHh0OiAkKFBMVUdMSUJfT1VUTElCUykgTWFrZWZpbGUKKwllY2hvICIjIEdlbmVyYXRlZCBmb3IgdGVzdGluZy4iID4gJEAKKwlAZm9yIHBhcnQgaW4gJChHTF9QQVJUUykgOyBcCisJZG8gXAorCQllY2hvICIkKFBMVUdMSUJfTkFNRSkJJCR7cGFydH1fcHJvdmlkZXJfcGx1Z2luIiA+PiAkQCA7IFwKKwkJZWNobyAiICQke3BhcnR9X3Byb3ZpZGVyX3BsdWdpbiIgOyBcCisJZG9uZQorCitURVNUUFJPRz0kKEdMX1BBUlRTOiU9JWRpZmYkKEVYRUVYVCkpCisKK3Rlc3Rwcm9nOiAkKFBMVUdMSUI6JT0kKE9VVCkvJS9iaW4vJChURVNUUFJPRykpIAorCitjaGVjay1pY3Uyc3ltdmVyOgorCS4vY2hlY2staWN1MnN5bXZlci5zaAorCitnZW5lcmF0ZS1nZGJyYzoKKwllY2hvICIjIGdlbmVyYXRlZCBieSAkQCIgPiAuZ2RicmMKKwllY2hvICJzZXQgZW52aXJvbm1lbnQgSUNVX1BMVUdJTlM9JChPVVQpIiA+PiAuZ2RicmMKKwllY2hvICJzZXQgZW52aXJvbm1lbnQgJChMSUJQQVRIX1ZBUik9JChPVVQpLy4uLyQoUExVR0xJQl9JTlNUKS9saWI6JChPVVQpLyQoUExVR0xJQikvbGliIiA+PiAuZ2RicmMKKworCitjaGVjazogY2hlY2staWN1MnN5bXZlciBhbGwgdGVzdHByb2cgJChPVVQpL2ljdXBsdWdpbnMkKFBMVUdMSUJfTUFKKS50eHQKKwlJQ1VfUExVR0lOUz0kKE9VVCkgJChMSUJQQVRIX1ZBUik9JChQTFVHTElCX0lOU1QpL2xpYjpvdXQvJChQTFVHTElCKS9saWIgJChQTFVHTElCX0lOU1QpL2Jpbi9pY3VpbmZvIHx8ICggZWNobyAiSUNVIGJyb2tlbi4iIDsgL2Jpbi9mYWxzZSApCisJSUNVX1BMVUdJTlM9JChPVVQpICQoTElCUEFUSF9WQVIpPSQoUExVR0xJQl9JTlNUKS9saWI6b3V0LyQoUExVR0xJQikvbGliICQoUExVR0xJQl9JTlNUKS9iaW4vaWN1aW5mbyAtTCB8fCAoIGVjaG8gIlBsdWdpbiBicm9rZW4uIiA7IC9iaW4vZmFsc2UgKQorCUBmb3IgcHJvZyBpbiAkKFRFU1RQUk9HKSA7IFwKKwlkbyBcCisJCWVjaG8gIiMgSUNVX1BMVUdJTlM9JChPVVQpICQoTElCUEFUSF9WQVIpPSQoUExVR0xJQl9JTlNUKS9saWI6b3V0LyQoUExVR0xJQikvbGliIG91dC8kKFBMVUdMSUIpL2Jpbi8kJHtwcm9nfSIgOyBcCisJCUlDVV9QTFVHSU5TPSQoT1VUKSAkKExJQlBBVEhfVkFSKT0kKFBMVUdMSUJfSU5TVCkvbGliOm91dC8kKFBMVUdMSUIpL2xpYiBvdXQvJChQTFVHTElCKS9iaW4vJCR7cHJvZ30gfHwgKCBlY2hvICIkJHtwcm9nfSBmYWlsZWQuIiA7IGV4aXQgMSApIDsgXAorCWRvbmUKKworaW5zdGFsbC1jaGVjazogaW5zdGFsbC1wbHVncworCSQoTElCUEFUSF9WQVIpPSQoUExVR0xJQl9JTlNUKS9saWIgJChQTFVHTElCX0lOU1QpL2Jpbi9pY3VpbmZvIC1MIHx8ICggZWNobyAiUGx1Z2luIGJyb2tlbi4iIDsgL2Jpbi9mYWxzZSApCisJQGZvciBwcm9nIGluICQoVEVTVFBST0cpIDsgXAorCWRvIFwKKwkJZWNobyAiIyAkJHtwcm9nfSIgOyBcCisJCSQoTElCUEFUSF9WQVIpPSQoUExVR0xJQl9JTlNUKS9saWIgb3V0LyQoUExVR0xJQikvYmluLyQke3Byb2d9IHx8ICggZWNobyAiJCR7cHJvZ30gYWdhaW5zdCBpbnN0YWxsZWQgZmFpbGVkLiIgOyBleGl0IDEgKSA7IFwKKwlkb25lCisKKyQoT1VUKS8kKFBMVUdMSUIpL2Jpbi8kKFRFU1RQUk9HKTogICQoR0xPVVQpLyQoUExVR0xJQikvb2JqLSQoT0spICQoT1VUKS8kKFBMVUdMSUIpL3Byb3ZpZGVyX3ZlcnNpb24uaCAkKEFMTERJUlMpCisJQGZvciBwcm9nIGluICQoVEVTVFBST0cpIDsgXAorCWRvIFwKKwkJJHtjYWxsIEVDSE9fQ09NUElMRSwkKHNoZWxsICQoUExVR0xJQl9JQ1VfQ09ORklHKSAtLWN4eCAtLWN4eGZsYWdzIC0tY3BwZmxhZ3MgLS1sZGZsYWdzKSAtbyAkKE9VVCkvJChQTFVHTElCKS9iaW4vJCR7cHJvZ30gLUkkKE9VVCkvJChQTFVHTElCKSAkKFRFU1RQUk9HX1hUUkFfT1BUUykgJChzcmNkaXIpLyQke3Byb2d9LmNwcH0gfHwgZXhpdCAxIDsgXAorCWRvbmUKKworJChPVVQpLyUvbGliLyQoUExVR0xJQl9OQU1FKTogICQoR0xPVVQpLyUvb2JqLSQoT0spICQoUExVR19FWFRSQV9ERVBTKQorCS1ta2RpciAtcCAkKE9VVCkvJCovbGliCisJJChzaGVsbCAkKFBMVUdMSUJfSUNVX0NPTkZJRykgLS1jeHggLS1jeHhmbGFncyAtLWNwcGZsYWdzIC0tbGRmbGFncykgJChQTFVHX0VYVFJBX0xERkxBR1MpIC1zaGFyZWQgLW8gJEAgJChHTE9VVCkvJCovKi5vICQoUExVR0xJQl9BVkFJTEFCTEVfREFUQSkgJChQTFVHTElCX0FWQUlMQUJMRV9TVEFUSUNTKQorCisjCWNwICRAICQoQ19JTlMpL3IkKi9saWIvCisKKyQoT1VUKS8lL2xpYi8kKExJQlBST1ZJREVSKTogICQoR0xPVVQpLyUvb2JqLSQoT0spCisJLW1rZGlyIC1wICQoT1VUKS8kKi9saWIKKwllY2hvIGNvcHkgaW5jbHVkZXMKKwlhciAtcnYgJEAgJChHTE9VVCkvJCovKi5vCisJcmFubGliICRACisKKyMjIEBAIGJ1aWxkIGdsdSByZW5hbWUgZmlsZXMKK2dsdXJlbnM6ICQoR0xVUkVOX0lDVSkKKworIyBidWlsZCBzaW5nbGUgZ2x1cmVuLmggCiskKEJVSUxEKS8lLyQoR0xVUkVOX0gpOiAkKEJVSUxEKS8lL29rIE1ha2VmaWxlIG1ha2VnbHVyZW4uc2gKKwktbWtkaXIgLXAgJChCVUlMRCkvJCovJChHTFVSRU4pCisJZW52IFNSQz0iJChTUkMpIiBTT1VSQ0U9IiQoU09VUkNFKSIgR0xVRT0iJChHTFVFKSIgLi9tYWtlZ2x1cmVuLnNoICRAICQqCisJQGZncmVwIC1xIE9JQ1VfICRAIHx8ICggZWNobyAiRXJyb3I6ICRAOiBubyBPSUNVXyBzeW1ib2xzIGZvdW5kLiBSZW1vdmluZyBnbHVyZW4uaCAiIDsgcm0gLWYgJEAgOyBleGl0IDEpCisKKyQoQlVJTEQpLyUvY29uZmlnLyQoSUNVX0NPTkZJRyk6ICQoQlVJTEQpLyUvY29uZmlnLyQoSUNVX0NPTkZJR19PUklHKSBpY3UtY29uZmlnLnNlZCAkKEJVSUxEKS8lL29rIAorCXNlZCAtZiBpY3UtY29uZmlnLnNlZCA8ICQoQlVJTEQpLyQqL2NvbmZpZy8kKElDVV9DT05GSUdfT1JJRykgPiAgJChCVUlMRCkvJCovY29uZmlnLyQoSUNVX0NPTkZJRykgJiYgY2htb2QgYStyeCAgJChCVUlMRCkvJCovY29uZmlnLyQoSUNVX0NPTkZJRykKKworIyBwZXJmb3JtIGluc3RhbGxhdGlvbgorJChJTlNUKS8lL29rOiAkKEJVSUxEKS8lL29rCisJZWNobyAkKFNVQkhFQUQpICQqICIoYmFja2VuZCkgaW5zdGFsbGluZy4uLiIKKwllY2hvICJJTlNUICIgIlsiICQqICJdIgorCW1rZGlyIC1wICQoSU5TVCkvJCoKKwktJChjYWxsIExPR19DT01QSUxFLCQoQlVJTEQpJCovb2subG9nLCQoTUFLRSkgJChNT1BUUykgLUMgJChCVUlMRCkvJCogaW5zdGFsbCAkKE1BS0VfSU5TVEFMTF9YVFJBX09QVFMpKQorCXRvdWNoICRACisKKyMgdW5wYWNrIElDVSBhbmQgcGF0Y2gKKyQoU1JDKS8lL29rOiAkKElDVVMpL2ljdTRjLSUtc3JjLnRnegorCS1bIC1kICQoU1JDKS8kKiBdICYmIHJtIC1yZiAkKFNSQykvJCoKKwlAZWNobyAkKFNVQkhFQUQpICQqICIoYmFja2VuZCkgdW5wYWNraW5nLi4uIgorCW1rZGlyIC1wICQoU1JDKS8kKgorCSQoY2FsbCBMT0dfQ09NUElMRSwkKFNSQykvJCovdW5wYWNrLmxvZywoIGNkICQoU1JDKS8kKiAmJiBndW56aXAgLWQgPCAkKFRPUCkvJChJQ1VTKS9pY3U0Yy0kKi1zcmMudGd6IHwgdGFyIHh2ZnAgLSApKQorCShbIC1mICQoRE9UKS9wYXRjaC8kKiBdICYmIHBhdGNoIC1kICQoU1JDKS8kKiAtcDEgPCAkKERPVCkvcGF0Y2gvJCopIHx8IHRydWUKKwl0b3VjaCAkQAorCisjIGNvbmZpZyAKKyQoQlVJTEQpLyUvY29uZmlnLnN0YXR1czogJChTUkMpLyUvb2sKKwlAZWNobyAkKFNVQkhFQUQpICQqICIoYmFja2VuZCkgY29uZmlndXJpbmcuLi4iCisJLVsgLWQgJChCVUlMRCkvJCogXSAmJiBybSAtcmYgJChCVUlMRCkvJCoKKwlta2RpciAtcCAkKEJVSUxEKS8kKgorCSQoY2FsbCBMT0dfQ09NUElMRSwkKEJVSUxEKS8kKi9jb25maWd1cmUubG9nLCggY2QgJChCVUlMRCkvJCogJiYgZW52IENGTEFHUz0iJChDRkxBR1MpICQoUEJMRF9FWFRSQV9GTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSAkKFBCTERfRVhUUkFfRkxBR1MpIiAkKHNoZWxsICQoU1VQRVJDT05GKSAkKFRPUCkvJChTUkMpLyQqLyQoU09VUkNFKSAkKikgJChDT05GSUdVUkVfT1BUUykgLS1zcmNkaXI9JChUT1ApLyQoU1JDKS8kKi8kKFNPVVJDRSkgLS1wcmVmaXg9JChUT1ApLyQoSU5TVCkvJCogKSkKKworIyBidWlsZCAKKyMgbm90ZTogcmVnZXggaGFkIHJlbmFtaW5nIHByb2JsZW1zLCBhbmQgc3Bvb2YgZGVwZW5kcyBvbiByZWdleC4gTnVrZSB0aGVtLgorJChCVUlMRCkvJS9vazogJChCVUlMRCkvJS9jb25maWcuc3RhdHVzCisJQGVjaG8gJChTVUJIRUFEKSAkKiAiKGJhY2tlbmQpIGJ1aWxkaW5nLi4iCisJJChjYWxsIExPR19DT01QSUxFLCQoQlVJTEQpLyQqL29rMi5sb2csKCAkKE1BS0UpICAkKE1PUFRTKSAtQyAkKEJVSUxEKS8kKiBhbGwgJChNQUtFX1hUUkFfT1BUUykgKSkKKwlAaWYgWyAhIC1mICQoQlVJTEQpLyQqL2NvbW1vbi9wdXRpbC4kKFNPQkopIF07IFwKKwl0aGVuIFwKKwkJZWNobyByZS11bnBhY2tpbmcgJChCVUlMRCkvJCovY29tbW9uIDsgXAorCQkoIGNkICQoQlVJTEQpLyQqL2NvbW1vbiAmJiBhciB4ZiAuLi9saWIvbGlic2ljdXVjLmEgfHwgZWNobyBjb3VsZCBub3QgdW5wYWNrIC4uL2xpYi9saWJzaWN1dWMuYSApIDsgXAorCQllY2hvIHJlLXVucGFja2luZyAkKEJVSUxEKS8kKi9pMThuIDsgXAorCQkoIGNkICQoQlVJTEQpLyQqL2kxOG4gJiYgYXIgeGYgLi4vbGliL2xpYnNpY3VpMThuLmEgfHwgZWNobyBjb3VsZCBub3QgdW5wYWNrIC4uL2xpYi9saWJzaWN1aTE4bi5hICkgOyBcCisJZmkKKwlAaWYgWyAhIC1mICQoQlVJTEQpLyQqL2NvbW1vbi9wdXRpbC4kKFNPQkopIF07IFwKKwl0aGVuIFwKKwkJZWNobyBFUlJPUjogc3RpbGwgY291bGQgbm90IGZpbmQgJChCVUlMRCkvJCovY29tbW9uL3B1dGlsLiQoU09CSikgLSBidWlsZCBtYXkgZmFpbC47IFwKKwlmaQorCS1ybSAtZiAkKEJVSUxEKS8kKi9pMThuL3VyZWdleCouKiAkKEJVSUxEKS8kKi9pMThuL3VzcG9vZiouKm8qCisJdG91Y2ggJEAKKworaW5mbyBoZWxwOgorCUBlY2hvICQoU1VCSEVBRCkgUHJvdmlkZXIgQnVpbGQKKwlAZWNobyAiVGFyZ2V0dGluZyBQcm92aWRlciBhZ2FpbnN0IElDVSAkKFBST1ZJREVSX1RBUkdFVCkgKCQoUExVR0xJQiksIG1ham9yICQoUExVR0xJQl9NQUopKSIKKwlAZWNobyAiQXZhaWxhYmxlIHBsdWdpbnM6ICQoUFJPVklERVJfQVZBSUxBQkxFKSAoJChQTFVHTElCX0FWQUlMQUJMRSkpIgorCUBlY2hvICJBdmFpbGFibGUga2V5d29yZHM6IgorCUBmb3IgdmVyIGluICQoUFJPVklERVJfQVZBSUxBQkxFKTsgZG8gXAorCQllY2hvICIgICAuLi5AcHJvdmlkZXI9aWN1ImBlY2hvICQkdmVyIHwgLi9pY3Uyc3ltdmVyLnNoYDsgXAorCWRvbmUKKwlAZWNobyAiUGx1Z2luIGxpYnJhcnkgd2lsbCBiZSAkKFBMVUdMSUJfTkFNRSkiCisJQGVjaG8KKwlAZWNobyBBdmFpbGFibGUgSUNVIHRhcmJhbGxzOiAgJChJQ1VfVEFSQkFMTFMpCisJQGVjaG8gQXZhaWxhYmxlIElDVSB2ZXJzaW9uczogJChzaGVsbCBlY2hvICQoSUNVX1RBUkJBTExTX1ZFUlMpIHwgdHIgJ18nICcuJykKKworJChPVVQpLyQoUExVR0xJQikvcHJvdmlkZXJfdmVyc2lvbi5oOiBNYWtlZmlsZS5sb2NhbCBNYWtlZmlsZSAkKEFMTERJUlMpCisJQGVjaG8gJChTVUJIRUFEKSAkKFBMVUdJTikgIihwbHVnaW4pIiBHZW5lcmF0aW5nICRAIC4uCisJQGVjaG8gIi8qIEdlbmVyYXRlZCBmaWxlLiAqLyIgPiAkQAorCUBlY2hvICJjb25zdCBjaGFyICpwcm92aWRlcl92ZXJzaW9uW10gPSB7IiA+PiAkQAorCUBmb3IgdmVyIGluICQoUFJPVklERVJfQVZBSUxBQkxFKTsgZG8gXAorCQlzeW09YGVjaG8gJCR2ZXIgfCAuL2ljdTJzeW12ZXIuc2hgIDsgXAorCQllY2hvIFZlcnNpb24gJCR2ZXIsIFN5bWJvbCAkJHN5bSA7IFwKKwkJZWNobyAiXCIkJHN5bVwiIiwgID4+ICRAIDsgXAorCWRvbmUKKwlAZWNobyAiIH07ICIgPj4gJEAKKwlAZWNobyAiI2RlZmluZSBQUk9WSURFUl9DT1VOVCAoc2l6ZW9mKHByb3ZpZGVyX3ZlcnNpb24pL3NpemVvZihwcm92aWRlcl92ZXJzaW9uWzBdKSkiID4+ICRACisJQGVjaG8gPj4gJEAKKwlAZWNobyAkKFNVQkhFQUQpICQoUExVR0lOKSAiKHBsdWdpbikiIEdlbmVyYXRlZCAkQAorCisjLS0gZm9yIHRoZSBwcm90b3R5cGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvTWFrZWZpbGUubG9jYWwtc2FtcGxlIGIvbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZS5sb2NhbC1zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhMzZjZQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvTWFrZWZpbGUubG9jYWwtc2FtcGxlCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworIyBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IGdvIGluIE1ha2VmaWxlLmxvY2FsCisjIGV4YW1wbGU6CisKKyMjCisjIyBUaGVzZSB0d28gYXJlIFJFUVVJUkVELgorIyMKKworIyBUaGUgdmVyc2lvbiBvZiBJQ1UgeW91IHdpbGwgYnVpbGQgYWdhaW5zdCAod2hpY2ggQVBJIHlvdSB3aWxsIHVzZSkuICBOb3RlLCA0OS4xIGlzIHJlcXVpcmVkIGZvciBjb2xsYXRpb24gc3VwcG9ydCwgYW5kIGZvciBkYXRlIHN1cHBvcnQuCisjIEVYQU1QTEU6IDQ5LjEKK1BST1ZJREVSX1RBUkdFVD00OS4xCisKKyMgVGhlIHZlcnNpb25zIG9mIElDVSB5b3Ugd2FudCB0byBoYXZlIGF2YWlsYWJsZSBpbiB0aGUgcGx1Z2luLiBTcGFjZSBzZXBhcmF0ZWQuICBEb24ndCBpbmNsdWRlIHRoZSBQUk9WSURFUl9UQVJHRVQgdmVyc2lvbi4KKyMgRVhBTVBMRTogMy44LjEgIDQuMi4wLjEKK1BST1ZJREVSX0FWQUlMQUJMRT0zLjguMSA0LjIuMC4xCisKKworCisKKworIyMKKyMjIGZvbGxvd2luZyBhcmUgT1BUSU9OQUwKKyMjCisKKyMjIGRlYnVnIG9wdGlvbnMKKyNFWFRSQV9DT01QSUxFX09QVFM9LWcKKworIyMgY29uZmlndXJlIG9wdGlvbnMKKyNFWFRSQV9DT05GSUdVUkVfT1BUUz0tLXdpdGgtbGlicmFyeS1zdWZmaXg9c3JsCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvY2FsZGlmZi5jcHAgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NhbGRpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzQwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NhbGRpZmYuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSA8dW5pY29kZS9kYXRlZm10Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91ZGF0Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2xlYW4uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisKKy8qIFN0cmluZyB0byB1c2UuICovCitjb25zdCBVRGF0ZSBzdHVmZiA9IDEyOTk5Nzc3NzEwMDAuMEw7CisKK2ludCBlcnI9MDsKKyNpbmNsdWRlICJwcm92aWRlcl92ZXJzaW9uLmgiCisKKworI2RlZmluZSBMT0NBTEVfQ09VTlQgNAorY29uc3QgY2hhciAqbG9jYWxlW0xPQ0FMRV9DT1VOVF0gPSB7ICJlc19HVSIsICJmcl9BRCIsICJldF9BTSIsICJlbl9JRSIgfTsgLyogTGlzdCBvZiBsb2NhbGVzIHRvIHRlc3QgKi8KKworLyoqCisgKiBTZXQgdXAgSUNVLCBwcmludCAjIG9mIGF2YWlsYWJsZSBjb2xsYXRvcnMKKyAqLwordm9pZCBzZXR1cChVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgICB1X2luaXQoJnN0YXR1cyk7CisgIAorICAgIGZwcmludGYoc3RkZXJyLCAiSUNVICVzIGluaXQ6ICVzXG4iLCBVX0lDVV9WRVJTSU9OLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKworICAgICBpbnQzMl90IGNvdW50OworICAgICBjb25zdCBMb2NhbGUgKnNlID0gQ2FsZW5kYXI6OmdldEF2YWlsYWJsZUxvY2FsZXMoY291bnQpOworICAgICBmcHJpbnRmKHN0ZGVyciwgIiMgQ2FsZW5kYXJzIG5vdyBhdmFpbGFibGU6ICVkLFx0JXMgLSAlZCBwcm92aWRlcnMgZXhwZWN0ZWQuXG4iLCBjb3VudCwgdV9lcnJvck5hbWUoc3RhdHVzKSwgKGludDMyX3QpUFJPVklERVJfQ09VTlQpOworfQorCitpbnQgbWFpbihpbnQgLyogYXJnYyovICwgY29uc3QgY2hhciAqIC8qYXJndiovIFtdKSB7CisjaWYgMAorICAvLyBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElDVSAlcyBkb2Vzbid0IHN1cHBvcnQgZGF0ZSBwcm92aWRlcnMuIE5lZWQgYXQgbGVhc3QgNDkuXG4iLCAgVV9JQ1VfVkVSU0lPTiApOworICAvLyByZXR1cm4gMDsKKyNlbHNlCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IGRpZmZzID0gMDsKKyAgICBpbnQgZ2JhZGRpZmZzID0wOworICAgIFVEYXRlRm9ybWF0U3R5bGUgc3R5bGVzW10gPSB7IFVEQVRfRlVMTCwgVURBVF9TSE9SVCB9OworICAgIHNldHVwKHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHJldHVybiAxOworCisgICAgaW50IGV4cGVjdGVkID0gUFJPVklERVJfQ09VTlQ7CisKKyAgICBmb3IodWludDMyX3Qgcz0wO3M8c2l6ZW9mKHN0eWxlcykvc2l6ZW9mKHN0eWxlc1swXSk7cysrKSB7CisgICAgICBmb3IoaW50IGw9MDtsPExPQ0FMRV9DT1VOVDtsKyspIHsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBjaGFyIG9sZENoYXJzWzIwMF07CisgICAgICAgIGludDMyX3Qgb2xkTGVuID0gLTE7CisgICAgICAgIGZvcihpbnQgdj0wO3Y8PWV4cGVjdGVkO3YrKykgeworICAgICAgICAgIAorICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbG9jYWxlIElECisgICAgICAgICAgY2hhciBsb2NJRFsyMDBdOworICAgICAgICAgIHN0cmNweShsb2NJRCwgbG9jYWxlW2xdKTsKKyAgICAgICAgICBpZigodiE9ZXhwZWN0ZWQpKSB7IC8vIC0xID0gbm8gdmVyc2lvbgorICAgICAgICAgICAgc3RyY2F0KGxvY0lELCAiQHNwPWljdSIpOworICAgICAgICAgICAgc3RyY2F0KGxvY0lELCBwcm92aWRlcl92ZXJzaW9uW3ZdKTsKKyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgcHJpbnRmKCIlMThzIDogIiwgbG9jSUQpOworICAgICAgICAgIAorICAgICAgICAgIFVFcnJvckNvZGUgc3ViU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgIGNoYXIgb3V0Y2hhcnNbMjAwXTsKKyAgICAgICAgICAKKyAgICAgICAgICBMb2NhbFBvaW50ZXI8Q2FsZW5kYXI+IGNhbChDYWxlbmRhcjo6Y3JlYXRlSW5zdGFuY2UoTG9jYWxlKGxvY0lEKSwgc3ViU3RhdHVzKSk7CisgICAgICAgICAgCisgICAgICAgICAgaWYoVV9GQUlMVVJFKHN1YlN0YXR1cykpIHsKKyAgICAgICAgICAgIHByaW50ZigiRVJSOiAlc1xuIiwgdV9lcnJvck5hbWUoc3ViU3RhdHVzKSk7CisgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAvLyBpbnQzMl90IGxlbiA9IHVkYXRfZm9ybWF0KGRhdCwgc3R1ZmYsIG91dGNoYXJzLCAyMDAsIE5VTEwsICZzdWJTdGF0dXMpOyAKKyAgICAgICAgICAKKyAgICAgICAgICAvLyAvL3ByaW50ZigiXG4iKTsKKyAgICAgICAgICAvL2NoYXIgdXRmOFsyMDBdOworICAgICAgICAgIC8vIHVfc3RyVG9VVEY4KHV0ZjgsIDIwMCwgTlVMTCwgb3V0Y2hhcnMsIGxlbiwgJnN1YlN0YXR1cyk7CisgICAgICAgICAgCisgICAgICAgICAgc3ByaW50ZihvdXRjaGFycywgIiBjYWw6IG1pbmRheXM9JWQgZmlyc3RkYXk9JWQgIiwgKGludCljYWwtPmdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKSwgKGludCljYWwtPmdldEZpcnN0RGF5T2ZXZWVrKCkpOworICAgICAgICAgIGludDMyX3QgbGVuID0gc3RybGVuKG91dGNoYXJzKTsKKworICAgICAgICAgIGlmKG9sZExlbiE9bGVuIHx8IG1lbWNtcChvdXRjaGFycyxvbGRDaGFycyxsZW4qc2l6ZW9mKG91dGNoYXJzWzBdKSkpIHsKKyAgICAgICAgICAgIGlmKHY9PTApIHsKKyAgICAgICAgICAgICAgcHV0Y2hhcignICcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcHV0Y2hhciAoJyEnKTsKKyAgICAgICAgICAgICAgZGlmZnMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHV0Y2hhciAoJz0nKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcHJpbnRmKCIgJXMgIiwgb3V0Y2hhcnMpOyAKKyAgICAgICAgICAKKyAgICAgICAgICBmb3IoaW50IGk9MDtpPGxlbjtpKyspIHsKKyAgICAgICAgICAgICAgIGlmKChpPG9sZExlbikmJihvdXRjaGFyc1tpXSE9b2xkQ2hhcnNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmcysrOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIqIiwgb2xkQ2hhcnNbaV0pOworICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgLy8gICAvLyAgICAgICAgICAgICAgICBwcmludGYoIlUrJTA0WCIsIChvdXRjaGFyc1tpXSkpOworICAgICAgICAgIH0KKyAgICAgICAgICBwdXRjaGFyKCdcbicpOworICAgICAgICAgIAorICAgICAgICAgIG9sZExlbiA9IGxlbjsKKyAgICAgICAgICBtZW1jcHkob2xkQ2hhcnMsIG91dGNoYXJzLCBsZW4qc2l6ZW9mKG9sZENoYXJzWzBdKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgICAKKyAgICBpZihkaWZmcz09MCkgeworICAgICAgcHJpbnRmKCJFUlJPUjogMCBkaWZmZXJlbmNlcyBmb3VuZCBiZXR3ZWVuIHBsYXRmb3Jtcy4uIGFyZSB0aGUgcGxhdGZvcm1zIGluc3RhbGxlZD8gVHJ5ICdpY3VpbmZvIC1MJ1xuIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgcHJpbnRmKCIlZCBkaWZmZXJlbmNlcyBmb3VuZCBhbW9uZyBwcm92aWRlciB2ZXJzaW9ucyEgUHJvdmlkZXIgaXMgd29ya2luZyFcbiIsIGRpZmZzKTsKKyAgICB9CisKKyAgICAvLyBpZihnYmFkZGlmZnM+MCkgeworICAgIC8vICAgcHJpbnRmKCJFUlJPUjogJWQgZGlmZnMgZm91bmQgYmV0d2VlbiBhIGNvbGxhdG9yIGFuZCBpdCdzIHJlb3BlbmVkIChmcm9tIHNob3J0c3RyaW5nKSB2YXJpYW50LlxuIiwgZ2JhZGRpZmZzKTsKKyAgICAvLyAgIHJldHVybiAyOworICAgIC8vIH0gZWxzZSB7CisgICAgLy8gICBwcmludGYoIkNvbGxhdG9yIGFuZCByZW9wZW5lZCAoc2hvcnRzdHJpbmcpIGFyZSBPSy5cbiIpOworICAgIC8vIH0KKworICAgIGlmKGVycikgeworICAgICAgcHJpbnRmKCIlZCBlcnJvcnMgLSBGQUlMIVxuIiwgZXJyKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHByaW50ZigiU3VjY2VzcyFcbiIpOworICAgIAorICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NoZWNrLWljdTJzeW12ZXIuc2ggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NoZWNrLWljdTJzeW12ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjZmNzJiYgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvY2hlY2staWN1MnN5bXZlci5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworaWYgWyAkIyAtZXEgMSBdOwordGhlbgorICAgIFZFUkJPU0U9MQorZWxzZQorICAgIFZFUkJPU0U9MAorZmkKKworZnVuY3Rpb24gdmVyYm9zZSgpCit7CisgICAgaWYgWyAke1ZFUkJPU0V9IC1lcSAxIF07CisgICAgdGhlbgorICAgICAgICBlY2hvICIkKiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gLW4gLgorICAgIGZpCit9CisKK2Z1bmN0aW9uIGMoKQoreworICAgIElOPSQxCisgICAgRVhQPSQyCisgICAgT1VUPWAuL2ljdTJzeW12ZXIuc2ggJElOYAorICAgIGlmIFsgIngke09VVH0iICE9ICJ4JHtFWFB9IiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IFwiJHtJTn1cIiAtPiBcIiR7T1VUfVwiLCBleHBlY3RlZCAke0VYUH0iID4mMgorICAgICAgICBleGl0IDEKKyAgICBlbHNlCisgICAgICAgIHZlcmJvc2UgIiR7SU59IC0+ICR7T1VUfSIKKyAgICBmaQorCisgICAgT1VUPWBlY2hvICR7SU59IHwgLi9pY3Uyc3ltdmVyLnNoYAorICAgIGlmIFsgIngke09VVH0iICE9ICJ4JHtFWFB9IiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IFwiJHtJTn1cIiAtPiBcIiR7T1VUfVwiLCBleHBlY3RlZCAke0VYUH0gKHZpYSBzdHJlYW0pIiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgZWxzZQorICAgICAgICB2ZXJib3NlICIke0lOfSAtPiAke09VVH0gKHZpYSBzdHJlYW0pIgorICAgIGZpCit9CisKK2MJJzMuNi4yJwkJJzM2JworYwknMS4wJwkJJzEwJworYwknNC44JwkJJzQ4JworYwknNC44LjEuMScJJzQ4JworYwknNC4wLjInCQknNDAnCitjCSc0LjEuMicJCSc0MScKK2MJJzQ5LjEuMicJJzQ5JworYwknNDknCQknNDknCitjCSc1MC4wLjMnCSc1MCcKK2MJJzUxLjAuMC4xJwknNTEnCisKK2VjaG8gIiBPSyEiCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9jb2xsZGlmZi5jcHAgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NvbGxkaWZmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDVjZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9jb2xsZGlmZi5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlIDx1bmljb2RlL2NvbGwuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbGVhbi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworLyogU3RyaW5nIHRvIHVzZS4gKi8KK2NvbnN0IFVDaGFyIHN0dWZmW10gPSB7IDB4MzBCQiwgMHgwZDRjLCAweDUzLCAweDc0LCAweDc1LCAweDY2LCAweDY2LCAweDAwIH07IC8qIFN0dWZmICovCisKKyNpbmNsdWRlICJwcm92aWRlcl92ZXJzaW9uLmgiCisKKworI2RlZmluZSBMT0NBTEVfQ09VTlQgNAorY29uc3QgY2hhciAqbG9jYWxlW0xPQ0FMRV9DT1VOVF0gPSB7ICJmaSIsICJlbl9VUyIsICJqYSIsICJtbCIgfTsgLyogTGlzdCBvZiBsb2NhbGVzIHRvIHRlc3QgKi8KKworLyoqCisgKiBTZXQgdXAgSUNVLCBwcmludCAjIG9mIGF2YWlsYWJsZSBjb2xsYXRvcnMKKyAqLwordm9pZCBzZXR1cChVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgICB1X2luaXQoJnN0YXR1cyk7CisgIAorICAgIGZwcmludGYoc3RkZXJyLCAiSUNVICVzIGluaXQ6ICVzXG4iLCBVX0lDVV9WRVJTSU9OLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKworICAgIGludDMyX3QgY291bnQ7CisgICAgU3RyaW5nRW51bWVyYXRpb24gKnNlID0gQ29sbGF0b3I6OmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb3VudCA9IHNlLT5jb3VudChzdGF0dXMpOworICAgIGZwcmludGYoc3RkZXJyLCAiIyBDb2xsYXRvcnMgbm93IGF2YWlsYWJsZTogJWQsXHQlcyAtICVkIHByb3ZpZGVycyBleHBlY3RlZC5cbiIsIGNvdW50LCB1X2Vycm9yTmFtZShzdGF0dXMpLCAoaW50MzJfdClQUk9WSURFUl9DT1VOVCk7Cit9CisKK2ludCBtYWluKGludCAvKiBhcmdjKi8gLCBjb25zdCBjaGFyICogLyphcmd2Ki8gW10pIHsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQgZGlmZnMgPSAwOworICAgIGludCBnYmFkZGlmZnMgPTA7CisgICAgc2V0dXAoc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgcmV0dXJuIDE7CisKKyAgICBpbnQgZXhwZWN0ZWQgPSBQUk9WSURFUl9DT1VOVDsKKworICAgIGZvcihpbnQgbD0wO2w8TE9DQUxFX0NPVU5UO2wrKykgeworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIHVpbnQ4X3Qgb2xkQnl0ZXNbMjAwXTsKKyAgICAgICAgaW50MzJfdCBvbGRMZW4gPSAtMTsKKyAgICAgICAgZm9yKGludCB2PTA7djw9ZXhwZWN0ZWQ7disrKSB7CisKKyAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbG9jYWxlIElECisgICAgICAgICAgICBjaGFyIGxvY0lEWzIwMF07CisgICAgICAgICAgICBzdHJjcHkobG9jSUQsIGxvY2FsZVtsXSk7CisgICAgICAgICAgICBpZigodiE9ZXhwZWN0ZWQpKSB7IC8vIC0xID0gbm8gdmVyc2lvbgorICAgICAgICAgICAgICAgIHN0cmNhdChsb2NJRCwgIkBzcD1pY3UiKTsKKyAgICAgICAgICAgICAgICBzdHJjYXQobG9jSUQsIHByb3ZpZGVyX3ZlcnNpb25bdl0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwcmludGYoIiUtMjhzID0gICIsIGxvY0lEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVUVycm9yQ29kZSBzdWJTdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICB1aW50OF90IGJ5dGVzWzIwMF07CisgICAgICAgICAgICB1aW50OF90IGJ5dGVzYlsyMDBdOworI2RlZmluZSBVU0VfQ1hYIDAKKworI2lmIFVTRV9DWFgKKyAgICAgICAgICAgIENvbGxhdG9yICpjb2wgPSBDb2xsYXRvcjo6Y3JlYXRlSW5zdGFuY2UoTG9jYWxlKGxvY0lEKSxzdWJTdGF0dXMpOworICAgICAgICAgICAgaWYoVV9GQUlMVVJFKHN1YlN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkVSUjogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50MzJfdCBsZW4gPSBjb2wtPmdldFNvcnRLZXkoc3R1ZmYsIC0xLCBieXRlcywgMjAwKTsKKyNlbHNlCisjaWYgMQorICAgICAgICAgICAgY2hhciB4YnVmMlsyMDBdOworICAgICAgICAgICAgc3RyY3B5KHhidWYyLCJYLyIpOworICAgICAgICAgICAgc3RyY2F0KHhidWYyLGxvY0lEKTsKKyAgICAgICAgICAgIHN0cmNhdCh4YnVmMiwiLyIpOworICAgICAgICAgICAgLy9wcmludGYoIiAtPiAlc1xuIiwgeGJ1ZjIpOworICAgICAgICAgICAgVUNvbGxhdG9yICpjb2wgPSB1Y29sX29wZW5Gcm9tU2hvcnRTdHJpbmcoeGJ1ZjIsIEZBTFNFLE5VTEwsICZzdWJTdGF0dXMpOworI2Vsc2UKKyAgICAgICAgICAgIFVDb2xsYXRvciAqY29sID0gdWNvbF9vcGVuKGxvY0lELCAmc3ViU3RhdHVzKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYoVV9GQUlMVVJFKHN1YlN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkVSUjogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGNoYXIgeGJ1ZjNbMjAwXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50MzJfdCBkZWYgPSB1Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZyhjb2wsbG9jSUQvKk5VTEwqLyx4YnVmMywyMDAsJnN1YlN0YXR1cyk7CisgICAgICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnIgZ2V0dGluZyBzaG9ydCBzdHJpbmcgbmFtZTogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiIC0tPiAlc1xuIiwgeGJ1ZjMpOworICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50MzJfdCBsZW4gPSB1Y29sX2dldFNvcnRLZXkoY29sLCBzdHVmZiwgLTEsIGJ5dGVzLCAyMDApOworI2VuZGlmCisKKyAgICAgICAgICAgIHByaW50ZigiICAgICAiKTsKKworICAgICAgICAgICAgaW50IHRkaWZmcz0wOworCisgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGxlbjtpKyspIHsKKwkgICAgICBpZihpPG9sZExlbiYmYnl0ZXNbaV0hPW9sZEJ5dGVzW2ldKSB7CisgICAgICAgICAgICAgICAgZGlmZnMrKzsKKyAgICAgICAgICAgICAgICBwcmludGYoIioiKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwcmludGYoIiUwMlgiLCAoMHhGRiZieXRlc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworCisgICAgICAgICAgICBjaGFyIHhidWY0WzIwMF07CisgICAgICAgICAgICBVQ29sbGF0b3IgKmNvbDIgPSB1Y29sX29wZW5Gcm9tU2hvcnRTdHJpbmcoeGJ1ZjMsIEZBTFNFLCBOVUxMLCAmc3ViU3RhdHVzKTsKKyAgICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICAgIHByaW50ZigiRXJyIG9wZW5pbmcgZnJvbSBuZXcgc2hvcnQgc3RyaW5nIDogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGludDMyX3QgZGVmNCA9IHVjb2xfZ2V0U2hvcnREZWZpbml0aW9uU3RyaW5nKGNvbCxsb2NJRC8qTlVMTCovLHhidWY0LDIwMCwmc3ViU3RhdHVzKTsKKyAgICAgICAgICAgICAgaWYoc3RyY21wKHhidWY0LHhidWYzKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiIC0tPiByZW9wZW5lZCA9ICVzICglcylcbiIsIHhidWY0LCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50MzJfdCBsZW4yID0gdWNvbF9nZXRTb3J0S2V5KGNvbDIsIHN0dWZmLCAtMSwgYnl0ZXNiLCAyMDApOworCisgICAgICAgICAgICBpbnQgYmFkZGlmZnM9MDsKKyAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8bGVuO2krKykgeworCSAgICAgIGlmKGk8bGVuJiZieXRlc1tpXSE9Ynl0ZXNiW2ldKSB7CisgICAgICAgICAgICAgICAgICBiYWRkaWZmcysrOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIhIik7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmKCIgIik7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBwcmludGYoIiUwMlgiLCAoMHhGRiZieXRlc2JbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGJhZGRpZmZzPjApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgLSBFUlIhIERpZmZzIGZyb20gJXMgaW4gJWQgcGxhY2VzXG4iLCB4YnVmMixiYWRkaWZmcyk7CisgICAgICAgICAgICAgIGdiYWRkaWZmcys9YmFkZGlmZnM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvL3ByaW50ZigiICBPSy5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gICAgICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgICAgIAorCisjaWYgVVNFX0NYWAorICAgICAgICAgICAgZGVsZXRlIGNvbDsKKyNlbHNlCisgICAgICAgICAgICB1Y29sX2Nsb3NlKGNvbCk7CisjZW5kaWYKKworICAgICAgICAgICAgb2xkTGVuID0gbGVuOworICAgICAgICAgICAgbWVtY3B5KG9sZEJ5dGVzLCBieXRlcywgbGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKGRpZmZzPT0wKSB7CisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNDkpCisgICAgICBwcmludGYoIkVSUk9SOiAwIGRpZmZlcmVuY2VzIGZvdW5kIGJldHdlZW4gcGxhdGZvcm1zLiBJQ1UgIiBVX0lDVV9WRVJTSU9OICIgZG9lcyBub3Qgc3VwcG9ydCBjb2xsYXRvciBwbHVnaW5zIHByb3Blcmx5IChub3QgdW50aWwgNDkpXG4iKTsKKyNlbHNlCisgICAgICBwcmludGYoIkVSUk9SOiAwIGRpZmZlcmVuY2VzIGZvdW5kIGJldHdlZW4gcGxhdGZvcm1zLi4gYXJlIHRoZSBwbGF0Zm9ybXMgaW5zdGFsbGVkPyBUcnkgJ2ljdWluZm8gLUwnXG4iKTsKKyNlbmRpZgorICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHByaW50ZigiJWQgZGlmZmVyZW5jZXMgZm91bmQgYW1vbmcgcHJvdmlkZXIgdmVyc2lvbnMhXG4iLCBkaWZmcyk7CisgICAgfQorCisgICAgaWYoZ2JhZGRpZmZzPjApIHsKKyAgICAgIHByaW50ZigiRVJST1I6ICVkIGRpZmZzIGZvdW5kIGJldHdlZW4gYSBjb2xsYXRvciBhbmQgaXQncyByZW9wZW5lZCAoZnJvbSBzaG9ydHN0cmluZykgdmFyaWFudC5cbiIsIGdiYWRkaWZmcyk7CisgICAgICByZXR1cm4gMjsKKyAgICB9IGVsc2UgeworICAgICAgcHJpbnRmKCJDb2xsYXRvciBhbmQgcmVvcGVuZWQgKHNob3J0c3RyaW5nKSBhcmUgT0suXG4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIlN1Y2Nlc3MhXG4iKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZGF0ZWRpZmYuY3BwIGIvbXVsdGkvcHJvai9wcm92aWRlci9kYXRlZGlmZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2OWI5MAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZGF0ZWRpZmYuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSA8dW5pY29kZS9kYXRlZm10Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91ZGF0Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2xlYW4uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisKKy8qIFN0cmluZyB0byB1c2UuICovCitjb25zdCBVRGF0ZSBzdHVmZiA9IDEyOTk5Nzc3NzEwMDAuMEw7CisKKyNpbmNsdWRlICJwcm92aWRlcl92ZXJzaW9uLmgiCisKKworI2RlZmluZSBMT0NBTEVfQ09VTlQgNAorY29uc3QgY2hhciAqbG9jYWxlW0xPQ0FMRV9DT1VOVF0gPSB7ICJmaSIsICJlbl9VUyIsICJqYSIsICJtbCIgfTsgLyogTGlzdCBvZiBsb2NhbGVzIHRvIHRlc3QgKi8KKworLyoqCisgKiBTZXQgdXAgSUNVLCBwcmludCAjIG9mIGF2YWlsYWJsZSBjb2xsYXRvcnMKKyAqLwordm9pZCBzZXR1cChVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgICB1X2luaXQoJnN0YXR1cyk7CisgIAorICAgIGZwcmludGYoc3RkZXJyLCAiSUNVICVzIGluaXQ6ICVzXG4iLCBVX0lDVV9WRVJTSU9OLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKworICAgIC8vIGludDMyX3QgY291bnQ7CisgICAgLy8gU3RyaW5nRW51bWVyYXRpb24gKnNlID0gRGF0ZUZvcm1hdDo6Z2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIC8vIGNvdW50ID0gc2UtPmNvdW50KHN0YXR1cyk7CisgICAgLy8gZnByaW50ZihzdGRlcnIsICIjIERhdGVGb3JtYXRzIG5vdyBhdmFpbGFibGU6ICVkLFx0JXMgLSAlZCBwcm92aWRlcnMgZXhwZWN0ZWQuXG4iLCBjb3VudCwgdV9lcnJvck5hbWUoc3RhdHVzKSwgKGludDMyX3QpUFJPVklERVJfQ09VTlQpOworfQorCitpbnQgbWFpbihpbnQgLyogYXJnYyovICwgY29uc3QgY2hhciAqIC8qYXJndiovIFtdKSB7CisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNDkpCisgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogSUNVICVzIGRvZXNuJ3Qgc3VwcG9ydCBkYXRlIHByb3ZpZGVycy4gTmVlZCBhdCBsZWFzdCA0OS5cbiIsICBVX0lDVV9WRVJTSU9OICk7CisgIHJldHVybiAwOworI2Vsc2UKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQgZGlmZnMgPSAwOworICAgIGludCBnYmFkZGlmZnMgPTA7CisgICAgVURhdGVGb3JtYXRTdHlsZSBzdHlsZXNbXSA9IHsgVURBVF9GVUxMLCBVREFUX1NIT1JUIH07CisgICAgc2V0dXAoc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgcmV0dXJuIDE7CisKKyAgICBpbnQgZXhwZWN0ZWQgPSBQUk9WSURFUl9DT1VOVDsKKworICAgIGZvcih1aW50MzJfdCBzPTA7czxzaXplb2Yoc3R5bGVzKS9zaXplb2Yoc3R5bGVzWzBdKTtzKyspIHsKKyAgICAgIGZvcihpbnQgbD0wO2w8TE9DQUxFX0NPVU5UO2wrKykgeworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIFVDaGFyIG9sZENoYXJzWzIwMF07CisgICAgICAgIGludDMyX3Qgb2xkTGVuID0gLTE7CisgICAgICAgIGZvcihpbnQgdj0wO3Y8PWV4cGVjdGVkO3YrKykgeworICAgICAgICAgIAorICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbG9jYWxlIElECisgICAgICAgICAgY2hhciBsb2NJRFsyMDBdOworICAgICAgICAgIHN0cmNweShsb2NJRCwgbG9jYWxlW2xdKTsKKyAgICAgICAgICBpZigodiE9ZXhwZWN0ZWQpKSB7IC8vIC0xID0gbm8gdmVyc2lvbgorICAgICAgICAgICAgc3RyY2F0KGxvY0lELCAiQHNwPWljdSIpOworICAgICAgICAgICAgc3RyY2F0KGxvY0lELCBwcm92aWRlcl92ZXJzaW9uW3ZdKTsKKyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgcHJpbnRmKCIlMThzIDogIiwgbG9jSUQpOworICAgICAgICAgIAorICAgICAgICAgIFVFcnJvckNvZGUgc3ViU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgIFVDaGFyIG91dGNoYXJzWzIwMF07CisgICAgICAgICAgCisgICAgICAgICAgVURhdGVGb3JtYXQgKmRhdCA9IHVkYXRfb3BlbihzdHlsZXNbc10sc3R5bGVzW3NdLCBsb2NJRCwgTlVMTCwgLTEsIE5VTEwsIDAsICZzdWJTdGF0dXMpOworICAgICAgICAgIAorICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICBwcmludGYoIkVSUjogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIGludDMyX3QgbGVuID0gdWRhdF9mb3JtYXQoZGF0LCBzdHVmZiwgb3V0Y2hhcnMsIDIwMCwgTlVMTCwgJnN1YlN0YXR1cyk7IAorICAgICAgICAgIAorICAgICAgICAgIC8vcHJpbnRmKCJcbiIpOworICAgICAgICAgIGNoYXIgdXRmOFsyMDBdOworICAgICAgICAgIHVfc3RyVG9VVEY4KHV0ZjgsIDIwMCwgTlVMTCwgb3V0Y2hhcnMsIGxlbiwgJnN1YlN0YXR1cyk7CisgICAgICAgICAgaWYob2xkTGVuIT1sZW4gfHwgbWVtY21wKG91dGNoYXJzLG9sZENoYXJzLGxlbipzaXplb2Yob3V0Y2hhcnNbMF0pKSkgeworICAgICAgICAgICAgcHV0Y2hhciAoJyEnKTsKKyAgICAgICAgICAgIGRpZmZzKys7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1dGNoYXIgKCc9Jyk7CisgICAgICAgICAgfQorICAgICAgICAgIHByaW50ZigiICVzICIsIHV0ZjgpOyAKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBmb3IoaW50IGk9MDtpPGxlbjtpKyspIHsKKyAgICAgICAgICAvLyAgIGlmKChpPG9sZExlbikmJihvdXRjaGFyc1tpXSE9b2xkQ2hhcnNbaV0pKSB7CisgICAgICAgICAgLy8gICAgICAgZGlmZnMrKzsKKyAgICAgICAgICAvLyAgICAgICBwcmludGYoIioiLCBvbGRDaGFyc1tpXSk7CisgICAgICAgICAgLy8gICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAvLyAgIC8vICAgICAgICAgICAgICAgIHByaW50ZigiVSslMDRYIiwgKG91dGNoYXJzW2ldKSk7CisgICAgICAgICAgLy8gfQorICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7CisgICAgICAgICAgdWRhdF9jbG9zZShkYXQpOworICAgICAgICAgIAorICAgICAgICAgIG9sZExlbiA9IGxlbjsKKyAgICAgICAgICBtZW1jcHkob2xkQ2hhcnMsIG91dGNoYXJzLCBsZW4qc2l6ZW9mKG9sZENoYXJzWzBdKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgICAKKyAgICBpZihkaWZmcz09MCkgeworICAgICAgcHJpbnRmKCJFUlJPUjogMCBkaWZmZXJlbmNlcyBmb3VuZCBiZXR3ZWVuIHBsYXRmb3Jtcy4uIGFyZSB0aGUgcGxhdGZvcm1zIGluc3RhbGxlZD8gVHJ5ICdpY3VpbmZvIC1MJ1xuIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgcHJpbnRmKCIlZCBkaWZmZXJlbmNlcyBmb3VuZCBhbW9uZyBwcm92aWRlciB2ZXJzaW9ucyFcbiIsIGRpZmZzKTsKKyAgICB9CisKKyAgICAvLyBpZihnYmFkZGlmZnM+MCkgeworICAgIC8vICAgcHJpbnRmKCJFUlJPUjogJWQgZGlmZnMgZm91bmQgYmV0d2VlbiBhIGNvbGxhdG9yIGFuZCBpdCdzIHJlb3BlbmVkIChmcm9tIHNob3J0c3RyaW5nKSB2YXJpYW50LlxuIiwgZ2JhZGRpZmZzKTsKKyAgICAvLyAgIHJldHVybiAyOworICAgIC8vIH0gZWxzZSB7CisgICAgLy8gICBwcmludGYoIkNvbGxhdG9yIGFuZCByZW9wZW5lZCAoc2hvcnRzdHJpbmcpIGFyZSBPSy5cbiIpOworICAgIC8vIH0KKworICAgIHByaW50ZigiU3VjY2VzcyFcbiIpOworICAgIAorICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2V4cG9ydC50eHQgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2V4cG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhYjc4NAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZXhwb3J0LnR4dApAQCAtMCwwICsxLDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCitfY29sbF9wcm92aWRlcl9wbHVnaW4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9fdmVyc2lvbmxpc3RfLmNwcCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9fdmVyc2lvbmxpc3RfLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDEwNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL192ZXJzaW9ubGlzdF8uY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSA8aWN1Z2x1ZS9pY3VnbHVlLmg+CisjaW5jbHVkZSA8dW5pY29kZS9jb2xsLmg+CisKKworI2lmIGRlZmluZWQgKCBJQ1VHTFVFX1ZFUiApCisvLyNlcnJvciBERUZJTkVEIQorI2Vsc2UKKworI2RlZmluZSBHTFVFX1ZFUih4KSBwdXRzKCJWZXJzaW9uICIgIyB4ICk7CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBnZW5lcmF0ZSBsaXN0IG9mIHZlcnNpb25zCisjaW5jbHVkZSA8aWN1Z2x1ZS9mZV92ZXJsaXN0Lmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKK3ByaW50ZigiSSdtIG9uICIgVV9JQ1VfVkVSU0lPTiAiIGJ1dCBpIGhhdmUgbW9kdWxlcyBmb3I6IFxuIik7CisgIGZvcihpbnQgaT0wO2ZlX3Zlcmxpc3RbaV07aSsrKSB7CisgICAgICBwcmludGYoIiVkOiAlc1xuIiwgaSwgZmVfdmVybGlzdFtpXSk7CisgIH0KK30KKworI2VuZGlmCisKKworCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jYWxfZmUuY3BwIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2NhbF9mZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZDgxNwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jYWxfZmUuY3BwCkBAIC0wLDAgKzEsNDI4IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworI2RlZmluZSBDQUxfRkVfREVCVUcgMQorCisjaWZuZGVmIENBTF9GRV9ERUJVRworI2RlZmluZSBDQUxfRkVfREVCVUcgMAorI2VuZGlmCisKKyNpZiBDQUxfRkVfREVCVUcKKyNkZWZpbmUgZGVidWdmcHJpbnRmKHgpIGZmbHVzaChzdGRlcnIpLGZmbHVzaChzdGRvdXQpLGZwcmludGYgeCxmZmx1c2goc3RkZXJyKSxmZmx1c2goc3Rkb3V0KQorI2Vsc2UKKyNkZWZpbmUgZGVidWdmcHJpbnRmKHgpCisjZW5kaWYKKworI2luY2x1ZGUgPGljdWdsdWUvaWN1Z2x1ZS5oPgorI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgorLy8jaW5jbHVkZSA8dW5pY29kZS90Ymxjb2xsLmg+CisjaW5jbHVkZSAidW5pY29kZS9jYWxlbmRhci5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisjaW5jbHVkZSAidW5pY29kZS9ncmVnb2NhbC5oIgorCisKKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgdGhlIENhbGVuZGFyX2dsdWVfNF8yIGNsYXNzIAorICovCisjaWZkZWYgR0xVRV9WRVIKKyNlcnJvciBHTFVFX1ZFUiBpcyBkZWZpbmVkCisjZW5kaWYKKworI2RlZmluZSBHTFVFX1ZFUih4KSBjbGFzcyBHTFVFX1NZTV9WKCBDYWxlbmRhciwgeCApIDogcHVibGljIENhbGVuZGFyIHsgIFwKK3B1YmxpYzogLyogc3RhdGljIGNyZWF0ZSAqLyBcCisgIFVDYWxlbmRhciAqX3RoaXM7IEdMVUVfU1lNX1YoIENhbGVuZGFyLCB4ICkgKCBjb25zdCBMb2NhbGUmLCBVRXJyb3JDb2RlJiApOyBcCitwcml2YXRlOiBcCisgICAgdmlydHVhbCB+IEdMVUVfU1lNX1YgKCBDYWxlbmRhciwgeCkgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCB2b2lkKiBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQqIGdldFN0YXRpY0NsYXNzSUQoKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIG92ZXJyaWRlcyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIFVCb29sIGhhdmVEZWZhdWx0Q2VudHVyeSgpIGNvbnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBVRGF0ZSBkZWZhdWx0Q2VudHVyeVN0YXJ0KCkgY29uc3QgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgaW50MzJfdCBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSA7IFwKK3ZpcnR1YWwgY29uc3QgY2hhciAqIGdldFR5cGUoKSBjb25zdCA7IFwKK3ZpcnR1YWwgVUJvb2wgaW5EYXlsaWdodFRpbWUoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCA7IFwKKyAgICB2aXJ0dWFsIGludDMyX3QgZGVmYXVsdENlbnR1cnlTdGFydFllYXIoKSBjb25zdCA7ICBcCisgICAgdmlydHVhbCBpbnQzMl90IGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KGludDMyX3QgZXllYXIsIGludDMyX3QgbW9udGgsIFVCb29sIHVzZU1vbnRoKSBjb25zdCA7IFwKKyAgICB2aXJ0dWFsIGludDMyX3QgaGFuZGxlR2V0TGltaXQoVUNhbGVuZGFyRGF0ZUZpZWxkcyBmaWVsZCwgRUxpbWl0VHlwZSBsaW1pdFR5cGUpIGNvbnN0IDsgXAorICAgIHZpcnR1YWwgQ2FsZW5kYXIqIGNsb25lKHZvaWQpIGNvbnN0OyBcCisgIHB1YmxpYzogc3RhdGljIGludDMyX3QgY291bnRBdmFpbGFibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitwdWJsaWM6IHN0YXRpYyBpbnQzMl90IGFwcGVuZEF2YWlsYWJsZShVbmljb2RlU3RyaW5nKiBzdHJzLCBpbnQzMl90IGksIGludDMyX3QgY291bnQpOyBcCisgIH07CisKKworLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBUaGUgZm9sbG93aW5nIGNvZGUgcnVucyBpbnNpZGUgdGhlICd0YXJnZXQnIHZlcnNpb24gKGkuZS4gb2xkIElDVSkgPT09PT09PT09PSAqKi8KKyNpZiBkZWZpbmVkICggSUNVR0xVRV9WRVIgKQorCisvKiBjb2RlIGZvciBzb21lIHZlcnNpb24gKi8KKyNpbmNsdWRlIDxpY3VnbHVlL2dsdXJlbi5oPgorI2luY2x1ZGUgIm9pY3UuaCIKKworI2lmZGVmIEdMVUVfVkVSCitHTFVFX1ZFUiggSUNVR0xVRV9WRVIgKQorI2VuZGlmCisKK0dMVUVfU1lNIChDYWxlbmRhciApIDo6IEdMVUVfU1lNKENhbGVuZGFyKSAoIGNvbnN0IExvY2FsZSYgbG9jLCBVRXJyb3JDb2RlJiBzdGF0dXMgKSA6CitDYWxlbmRhcihzdGF0dXMpLCBfdGhpcyhOVUxMKQoreyAKKworICBfdGhpcyA9IE9JQ1VfdWNhbF9vcGVuKE5VTEwsIC0xLCAvKmxvY2FsZSovTlVMTCwgVUNBTF9ERUZBVUxULCAmc3RhdHVzKTsKKworICAvLyBjb3B5IHNvbWUgdGhpbmdzIG92ZXIKKyAgc2V0TWluaW1hbERheXNJbkZpcnN0V2VlayhPSUNVX3VjYWxfZ2V0QXR0cmlidXRlKF90aGlzLCBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLKSk7CisgIHNldEZpcnN0RGF5T2ZXZWVrKChVQ2FsZW5kYXJEYXlzT2ZXZWVrKU9JQ1VfdWNhbF9nZXRBdHRyaWJ1dGUoX3RoaXMsIFVDQUxfRklSU1RfREFZX09GX1dFRUspKTsKK30KKworR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IH4gR0xVRV9TWU0oQ2FsZW5kYXIpICgpIHsKKyNpZiBDQUxfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVjYWxfY2xvc2UiKTsKKyNlbmRpZgorICAgIE9JQ1VfdWNhbF9jbG9zZShfdGhpcyk7Cit9CisKKworVUJvb2wgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGhhdmVEZWZhdWx0Q2VudHVyeSgpIGNvbnN0IHsKKyAgcmV0dXJuIEZBTFNFOworfQorVURhdGUgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGRlZmF1bHRDZW50dXJ5U3RhcnQoKSBjb25zdCB7CisgIHJldHVybiAwTDsKK30KK2ludDMyX3QgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGhhbmRsZUdldEV4dGVuZGVkWWVhcigpIHsKKyAgcmV0dXJuIDA7Cit9Citjb25zdCBjaGFyICogR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGdldFR5cGUoKSBjb25zdCAgeworICByZXR1cm4gImRpbGJlcnQiOworfQorVUJvb2wgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGluRGF5bGlnaHRUaW1lKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgIHsKKyAgcmV0dXJuIEZBTFNFOworfQoraW50MzJfdCBHTFVFX1NZTSAoIENhbGVuZGFyICkgOjogZGVmYXVsdENlbnR1cnlTdGFydFllYXIoKSBjb25zdCAgeworICByZXR1cm4gMjAxMjsKK30KK2ludDMyX3QgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGhhbmRsZUNvbXB1dGVNb250aFN0YXJ0KGludDMyX3QgZXllYXIsIGludDMyX3QgbW9udGgsIFVCb29sIHVzZU1vbnRoKSBjb25zdCB7CisgIHJldHVybiAwOworfQorCitpbnQzMl90IEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBoYW5kbGVHZXRMaW1pdChVQ2FsZW5kYXJEYXRlRmllbGRzIGZpZWxkLCBFTGltaXRUeXBlIGxpbWl0VHlwZSkgY29uc3QgeworICByZXR1cm4gMTsKK30KK0NhbGVuZGFyKiBHTFVFX1NZTSAoIENhbGVuZGFyICkgOjogY2xvbmUodm9pZCkgY29uc3QgeworICByZXR1cm4gTlVMTDsKK30KKworCisvLyBEYXRlRm9ybWF0ICoKKy8vIEdMVUVfU1lNICggRGF0ZUZvcm1hdCApIDo6IGNyZWF0ZShVRGF0ZUZvcm1hdFN0eWxlICB0aW1lU3R5bGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICpsb2NhbGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqcGF0dGVybiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYWxlICZsb2MsIGNvbnN0IGNoYXIgKi8qdmVyKi8pIHsKKy8vICAgLy8gVE9ETzogc2F2ZSB2ZXJzaW9uCisvLyAgIC8vY2hhciBsb2NCdWZbMjAwXTsKKy8vICAgLy9jaGFyIGt3dkJ1ZlsyMDBdOworLy8gICBVRGF0ZUZvcm1hdCAqIHVjID0gIE9JQ1VfdWRhdF9vcGVuKCB0aW1lU3R5bGUsIGRhdGVTdHlsZSwgbG9jYWxlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eklELAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eklETGVuZ3RoLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOworLy8gICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgcmV0dXJuIE5VTEw7IC8vIFRPRE86IEVSUj8KKy8vICAgICBEYXRlRm9ybWF0ICpjID0gIG5ldyBHTFVFX1NZTSggRGF0ZUZvcm1hdCApICggdWMgKTsKKy8vICNpZiBDQUxfRkVfREVCVUcKKy8vICAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVkYXRfb3Blbj0lcyAtPj4gJXBcbiIsIGxvYy5nZXROYW1lKCksICh2b2lkKiljKTsKKy8vICNlbmRpZgorLy8gICAgIHJldHVybiBjOworLy8gfQorCisKKyBpbnQzMl90IEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBjb3VudEF2YWlsYWJsZSgpIHsKKyAgICBpbnQzMl90IGNvdW50ID0gIE9JQ1VfdWRhdF9jb3VudEF2YWlsYWJsZSgpOworICAgIHJldHVybiBjb3VudDsKKyB9CisgCisgCitpbnQzMl90IEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBhcHBlbmRBdmFpbGFibGUoVW5pY29kZVN0cmluZyogc3RycywgaW50MzJfdCBpLCBpbnQzMl90IC8qY291bnQqLykgeworICAgaW50IGF2YWlsID0gT0lDVV91ZGF0X2NvdW50QXZhaWxhYmxlKCk7CisgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgIE9JQ1VfdV9pbml0KCZzdGF0dXMpOworI2lmIENBTF9GRV9ERUJVRworICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXZhaWwgJWQgLSBpbml0ICVzXG4iLCBhdmFpbCwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisjZW5kaWYgICAKKyAgICBmb3IoaW50IGo9MDtqPGF2YWlsO2orKykgeworICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZChPSUNVX3VkYXRfZ2V0QXZhaWxhYmxlKGopKTsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIkBzcD1pY3UiKTsKKyAgICAgICAgIGlmKElTX09MRF9WRVJTVFIoSUNVR0xVRV9WRVJfU1RSKSkgeworICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbT0xEX1ZFUlNUUl9NQUpdICk7ICAvLyBYX3kKKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW09MRF9WRVJTVFJfTUlOXSApOyAgLy8geF9ZCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbTkVXX1ZFUlNUUl9NQUpdICk7ICAvLyBYeV8KKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW05FV19WRVJTVFJfTUlOXSApOyAgLy8geFlfCisgICAgICAgICB9CisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgICAgICB7IAorICAgICAgICAgICAgY2hhciBmb29bOTk5XTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcyA9IHN0cnNbaStqXS5nZXRUZXJtaW5hdGVkQnVmZmVyKCk7CisgICAgICAgICAgICB1X2F1c3RyY3B5KGZvbywgc3MpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXBwZW5kaW5nIFslZCslZD0lZF0gPDwlcz4+XG4iLCBpLCBqLCBpK2osIGZvbyk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgfQorCitVT0JKRUNUX0RFRklORV9SVFRJX0lNUExFTUVOVEFUSU9OKCBHTFVFX1NZTSggQ2FsZW5kYXIgKSApCisKKworCisKKyNlbHNlCisvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRoZSBmb2xsb3dpbmcgY29kZSBydW5zIGluc2lkZSB0aGUgJ3Byb3ZpZGVyJyB2ZXJzaW9uIChpLmUuIGN1cnJlbnQgSUNVKSA9PT09PT09PT09ICoqLworCisvLyAjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNDkpCisvLyAjZGVmaW5lIENBTF9QUk9WSURFUl9VTlNVUFBPUlRFRAorLy8gI2VuZGlmCisKKyNpZm5kZWYgQ0FMX1BST1ZJREVSX1VOU1VQUE9SVEVECisvLyBkZWZpbmUgQ29sbGF0b3JfWFgKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKyNpbmNsdWRlICJzZXJ2bG9jLmgiCisKKy8vIGdlbmVyYXRlIGxpc3Qgb2YgdmVyc2lvbnMKK3N0YXRpYworI2luY2x1ZGUgPGljdWdsdWUvZmVfdmVybGlzdC5oPgorCitjbGFzcyBWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5IDogcHVibGljIExvY2FsZUtleUZhY3RvcnkgIHsKK3B1YmxpYzoKKyAgVmVyc2lvbkNhbGVuZGFyRmFjdG9yeSgpOworICB2aXJ0dWFsIFVPYmplY3QqIGhhbmRsZUNyZWF0ZShjb25zdCBMb2NhbGUgJmxvYywgaW50MzJfdCBraW5kLCBjb25zdCBJQ1VTZXJ2aWNlKiBzZXJ2aWNlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0OworICAvLyB2aXJ0dWFsIENhbGVuZGFyICpjcmVhdGVGb3JtYXQoVUNhbGVuZGFyU3R5bGUgIHRpbWVTdHlsZSwKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyU3R5bGUgIGRhdGVTdHlsZSwKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5ndGgsCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzKTsKKyAgdmlydHVhbCB2b2lkKiBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0OyAKKyAgc3RhdGljIHZvaWQqIGdldFN0YXRpY0NsYXNzSUQoKSA7IAorICB2aXJ0dWFsIGNvbnN0IEhhc2h0YWJsZSogZ2V0U3VwcG9ydGVkSURzKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7Citwcml2YXRlOgorICBjb25zdCBVbmljb2RlU3RyaW5nICpnZXRTdXBwb3J0ZWRJRHMoaW50MzJfdCAmY291bnQsIFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Q7CisKK3B1YmxpYzoKK3ZpcnR1YWwgVU9iamVjdCoKKyBjcmVhdGUoY29uc3QgSUNVU2VydmljZUtleSYga2V5LCBjb25zdCBJQ1VTZXJ2aWNlKiBzZXJ2aWNlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IDsKKworfTsKKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggVmVyc2lvbkNhbGVuZGFyRmFjdG9yeSApCisKK1VPYmplY3QqCitWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5OjpjcmVhdGUoY29uc3QgSUNVU2VydmljZUtleSYga2V5LCBjb25zdCBJQ1VTZXJ2aWNlKiBzZXJ2aWNlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0ICB7CisgIC8vICBVbmljb2RlU3RyaW5nIGlkOworICAvLyAga2V5LmN1cnJlbnRJRChpZCk7CisgIC8vICBMb2NhbGUgbChpZCk7CisgIExvY2FsZSBsOworICBjb25zdCBMb2NhbGVLZXkmIGxrZXkgPSAoTG9jYWxlS2V5JilrZXk7CisgIGxrZXkuY3VycmVudExvY2FsZShsKTsKKyAgZGVidWdmcHJpbnRmKChzdGRlcnIsICJWQ2FsRjo6Y3JlYXRlKCkgLi4gJXMgZXJyPSVzXG4iLCAoY29uc3QgY2hhciopbC5nZXROYW1lKCksIHVfZXJyb3JOYW1lKHN0YXR1cykpKTsKKworICBjaGFyIGt3WzEwMF07CisgIGludDMyX3Qga3dsZW4gPSBsLmdldEtleXdvcmRWYWx1ZSgic3AiLCBrdywgMTAwLCBzdGF0dXMpOworCisgIFVPYmplY3QgKmY7CisgIGlmKGt3bGVuPjApIHsKKyAgICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgIlRyeWluZyBmb3Iga3c9JXNcbiIsIGt3KSk7CisgICAgZiA9IGhhbmRsZUNyZWF0ZShsLCAtMSwgc2VydmljZSwgc3RhdHVzKTsKKyAgfSBlbHNlIHsKKyAgICBmID0gTG9jYWxlS2V5RmFjdG9yeTo6Y3JlYXRlKGtleSxzZXJ2aWNlLHN0YXR1cyk7CisgIH0KKworCisgIAorICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgIlZDYWxGOjpjcmVhdGUoKSAuLiA9ICVwIGVycj0lc1xuIiwgKHZvaWQqKWYsIHVfZXJyb3JOYW1lKHN0YXR1cykpKTsKKyAgcmV0dXJuIGY7Cit9CisKK1ZlcnNpb25DYWxlbmRhckZhY3Rvcnk6OlZlcnNpb25DYWxlbmRhckZhY3RvcnkoKSA6TG9jYWxlS2V5RmFjdG9yeShMb2NhbGVLZXlGYWN0b3J5OjpWSVNJQkxFKXsKKyNpZiBDQUxfRkVfREVCVUcKKyAgcHJpbnRmKCJWQ2FsRjogaGkhIHBpZD0lZCwgdGhpcz0lcFxuIiwgZ2V0cGlkKCksICh2b2lkKil0aGlzKTsKKyNlbmRpZgorfQorVU9iamVjdCogVmVyc2lvbkNhbGVuZGFyRmFjdG9yeTo6aGFuZGxlQ3JlYXRlKGNvbnN0IExvY2FsZSAmbG9jLCBpbnQzMl90IGtpbmQsIGNvbnN0IElDVVNlcnZpY2UqIHNlcnZpY2UsIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgeworICAvL0xvY2FsZSBsb2MobG9jYWxlKTsKKyAgICAvLyBwdWxsIG9mZiBwcm92aWRlciAjCisgICAgY2hhciBwcm92aWRlclsyMDBdOworI2lmIENBTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDYWxGOkNDICVzXG4iLCBsb2MuZ2V0TmFtZSgpKTsKKyNlbmRpZgorICAgIGludDMyX3QgbGVuID0gbG9jLmdldEtleXdvcmRWYWx1ZSgic3AiLCBwcm92aWRlciwgMjAwLCBzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpfHxsZW49PTApIHJldHVybiBOVUxMOworI2lmIENBTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDYWxGOktXVj4gJXMvJWRcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cyksIGxlbik7CisjZW5kaWYKKyAgICBwcm92aWRlcltsZW5dPTA7CisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNhbEY6S1dWICVzXG4iLCBwcm92aWRlcik7CisjZW5kaWYKKyAgICBpZihzdHJuY21wKHByb3ZpZGVyLCJpY3UiLDMpKSByZXR1cm4gTlVMTDsKKyAgICBjb25zdCBjaGFyICppY3V2ZXI9cHJvdmlkZXIrMzsKKyNpZiBDQUxfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ2FsRjpJQ1VWICVzXG4iLCBpY3V2ZXIpOworI2VuZGlmCisgICAgCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGRlYnVnZnByaW50Zigoc3RkZXJyLCIlYy8lY3wlYy8lY1xuIiwgaWN1dmVyWzBdLCgjeClbMF0saWN1dmVyWzFdLCgjeClbMl0pKTsgIGlmKENNUF9WRVJTVFIoaWN1dmVyLCAoI3gpKSkgeyBDYWxlbmRhciAqYyA9IG5ldyBnbHVlICMjIENhbGVuZGFyICMjIHggKGxvYywgc3RhdHVzKTsgZGVidWdmcHJpbnRmKChzdGRlcnIsICJWQ2FsRjo6Q0MgJXMgLT4gJXBcbiIsIGxvYy5nZXROYW1lKCksIGMpKTsgcmV0dXJuIGM7IH0KKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNhbEY6Q0MgJXMgZmFpbGVkXG4iLCBsb2MuZ2V0TmFtZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmdMb2NhbGVzRGF0ZSA9IE5VTEw7CitzdGF0aWMgIGludDMyX3QgZ0xvY0NvdW50RGF0ZSA9IDA7IAorCitjb25zdCBIYXNodGFibGUgKlZlcnNpb25DYWxlbmRhckZhY3Rvcnk6OmdldFN1cHBvcnRlZElEcyAoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCB7CisgIC8vIGZyb20gY29sbC5jcHAKKyAgSGFzaHRhYmxlICpfaWRzID0gTlVMTDsKKyAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgaW50MzJfdCBjb3VudCA9IDA7CisgICAgX2lkcyA9IG5ldyBIYXNodGFibGUoc3RhdHVzKTsKKyAgICBpZiAoX2lkcykgeworICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAqIGlkbGlzdCA9IC8qIF9kZWxlZ2F0ZSAtPiAqLyBnZXRTdXBwb3J0ZWRJRHMoY291bnQsIHN0YXR1cyk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgX2lkcy0+cHV0KGlkbGlzdFtpXSwgKHZvaWQqKXRoaXMsIHN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgICAgIGRlbGV0ZSBfaWRzOworICAgICAgICAgIF9pZHMgPSBOVUxMOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgIH0KKyAgICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwiVkNhbEY6IGhhc2g9JXAsIGNvdW50PSVkLCBlcnI9JXNcbiIsICh2b2lkKilfaWRzLCBjb3VudCwgdV9lcnJvck5hbWUoc3RhdHVzKSkpOworICB9CisgIHJldHVybiBfaWRzOworfQorCitjb25zdCBVbmljb2RlU3RyaW5nCisqVmVyc2lvbkNhbGVuZGFyRmFjdG9yeTo6Z2V0U3VwcG9ydGVkSURzKGludDMyX3QgJmNvdW50LCBVRXJyb3JDb2RlICYvKnN0YXR1cyovKSBjb25zdCB7CisgIGlmKGdMb2NhbGVzRGF0ZT09TlVMTCkgeworICAgIGNvdW50ID0gMDsKKyAgICAKKyAgICAKKyAgICAvKiBnYXRoZXIgY291bnRzICovCisKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKyNkZWZpbmUgR0xVRV9WRVIoeCkgY291bnQgKz0gZ2x1ZSAjIyBDYWxlbmRhciAjIyB4IDo6IGNvdW50QXZhaWxhYmxlKCk7CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgcHJpbnRmKCJWQ2FsRjogY291bnQ9JWRcbiIsIGNvdW50KTsKKyNlbmRpZgorICAgIFVuaWNvZGVTdHJpbmcgKnN0cnMgPSBuZXcgIFVuaWNvZGVTdHJpbmdbY291bnRdOworICAgIGludDMyX3QgaSA9IDA7CisKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKyNkZWZpbmUgR0xVRV9WRVIoeCkgaSArPSBnbHVlICMjIENhbGVuZGFyICMjIHggOjogYXBwZW5kQXZhaWxhYmxlKHN0cnMsIGksIGNvdW50KTsKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKyNpZiBDQUxfRkVfREVCVUcKKyAgICBwcmludGYoIlZDYWxGOiBhcHBlbmRlZCBjb3VudD0lZFxuIiwgY291bnQpOworI2VuZGlmCisKKyAgICBnTG9jQ291bnREYXRlID0gY291bnQ7CisgICAgZ0xvY2FsZXNEYXRlID0gc3RyczsKKyAgfQorICBjb3VudCA9IGdMb2NDb3VudERhdGU7CisgIHJldHVybiBnTG9jYWxlc0RhdGU7Cit9CisKKworLyogUGx1Z2luIENvZGUgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPgorCitzdGF0aWMgVVJlZ2lzdHJ5S2V5IHJrY2FsID0gTlVMTDsKKwordm9pZCBjYWxfcHJvdmlkZXJfcmVnaXN0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGRlYnVnZnByaW50Zigoc3RkZXJyLCAiYWJvdXQgdG8gcmVnaXN0ZXIgVkNhbEZcbiIpKTsKKyAgcmtjYWwgPSBDYWxlbmRhcjo6cmVnaXN0ZXJGYWN0b3J5KG5ldyBWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5KCksIHN0YXR1cyk7CisgIGRlYnVnZnByaW50Zigoc3RkZXJyLCAiLi4gcmVnaXN0ZXJlZCBWQ2FsRiwga2V5PSVwXG4iLCAodm9pZCopcmtjYWwpKTsKK30KKwordm9pZCBjYWxfcHJvdmlkZXJfdW5yZWdpc3RlcihVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgQ2FsZW5kYXI6OnVucmVnaXN0ZXIocmtjYWwsIHN0YXR1cyk7Cit9CisKKyNlbHNlCisKKy8qIG5vIG9wLSB0aGlzIElDVSBkb2Vzbid0IHN1cHBvcnQgZGF0ZSBwcm92aWRlcnMgKi8KKwordm9pZCBjYWxfcHJvdmlkZXJfcmVnaXN0ZXIoVUVycm9yQ29kZSAmKSB7CisgIC8vIG5vdCBzdXBwb3J0ZWQKK30KKwordm9pZCBjYWxfcHJvdmlkZXJfdW5yZWdpc3RlcihVRXJyb3JDb2RlICYpIHsKKyAgLy8gbm90IHN1cHBvcnRlZAorfQorCisjZW5kaWYKKworLyogUGx1Z2luLSBvbmx5IElDVSA0LjQrICovCisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gNCkgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT09NCkmJihVX0lDVV9WRVJTSU9OX01JTk9SX05VTT4zKSkKKyNpbmNsdWRlICJ1bmljb2RlL2ljdXBsdWcuaCIKKworVV9DQVBJIFVQbHVnVG9rZW5SZXR1cm4gVV9FWFBPUlQyIGNhbF9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCitVX0NBUEkgVVBsdWdUb2tlblJldHVybiBVX0VYUE9SVDIgY2FsX3Byb3ZpZGVyX3BsdWdpbiAoVVBsdWdEYXRhICpkYXRhLCBVUGx1Z1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKyAgc3dpdGNoKHJlYXNvbikgeworICBjYXNlIFVQTFVHX1JFQVNPTl9RVUVSWToKKyAgICB1cGx1Z19zZXRQbHVnTmFtZShkYXRhLCAiQ2FsZW5kYXIgUHJvdmlkZXIgUGx1Z2luIik7CisgICAgdXBsdWdfc2V0UGx1Z0xldmVsKGRhdGEsIFVQTFVHX0xFVkVMX0hJR0gpOworICAgIGJyZWFrOworICBjYXNlIFVQTFVHX1JFQVNPTl9MT0FEOgorICAgIGNhbF9wcm92aWRlcl9yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgY2FzZSBVUExVR19SRUFTT05fVU5MT0FEOgorICAgIGNhbF9wcm92aWRlcl91bnJlZ2lzdGVyKCpzdGF0dXMpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGJyZWFrOyAvKiBub3QgaGFuZGxlZCAqLworICB9CisgIHJldHVybiBVUExVR19UT0tFTjsKK30KKyNlbHNlCisKKy8qIAorICAgTm90ZTogdGhpcyBJQ1UgdmVyc2lvbiBtdXN0IGV4cGxpY2l0bHkgY2FsbCAnY2FsX3Byb3ZpZGVyX3BsdWdpbicKKyovCisKKyNlbmRpZiAvKiBwbHVnaW4gKi8KKworI2VuZGlmIC8qIHByb3ZpZGVyIHNpZGUgKHZzIHRhcmdldCkgKi8KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jb2xsX2ZlLmNwcCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jb2xsX2ZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2NvbGxfZmUuY3BwCkBAIC0wLDAgKzEsNTE0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIENPTExfRkVfREVCVUcKKyNkZWZpbmUgQ09MTF9GRV9ERUJVRyAwCisjZW5kaWYKKworI2luY2x1ZGUgPGljdWdsdWUvaWN1Z2x1ZS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvY29sbC5oPgorLy8jaW5jbHVkZSA8dW5pY29kZS90Ymxjb2xsLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKworI2lmIENPTExfRkVfREVCVUcKKyNkZWZpbmUgZGVidWdmcHJpbnRmKHgpIGZwcmludGYgeAorI2Vsc2UKKyNkZWZpbmUgZGVidWdmcHJpbnRmKHgpCisjZW5kaWYKKworLyoKKyAqIEJlZm9yZSBJQ1UgNTAuMC4yICg1MG0yKSAtIHRoZXJlIHdhcyBhIGRpZmZlcmVudCBjb2xsYXRvciBzaWduYXR1cmUuCisgKiBzZWU6IHRpY2tldDo5NDYwIHRpY2tldDo5MzQ2CisgKi8KKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1MCkgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT09NTApJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU09PTApJiYoVV9JQ1VfVkVSU0lPTl9QQVRDSExFVkVMX05VTTwyKSkKKyNkZWZpbmUgUFJFXzUwXzBfMl9DT0xMQVRPUgorI2RlZmluZSBDT05TVF9CRUZPUkVfNTBfMF8yIGNvbnN0CisjZGVmaW5lIENPTlNUX0FGVEVSXzUwXzBfMiAKKyNkZWZpbmUgUkVGX0FGVEVSXzUwXzBfMgorI2Vsc2UKKy8qICJjdXJyZW50IiBBUEkgKi8KKyNkZWZpbmUgQ09OU1RfQkVGT1JFXzUwXzBfMgorI2RlZmluZSBDT05TVF9BRlRFUl81MF8wXzIgY29uc3QKKyNkZWZpbmUgUkVGX0FGVEVSXzUwXzBfMiAmCisjZW5kaWYKKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgdGhlIENvbGxhdG9yX2dsdWVfNF8yIGNsYXNzIAorICovCisjZGVmaW5lIEdMVUVfVkVSKHgpIGNsYXNzIEdMVUVfU1lNX1YoIENvbGxhdG9yLCB4ICkgOiBwdWJsaWMgQ29sbGF0b3IgeyAgXAorICAgIFwKKyAgcHVibGljOiAgc3RhdGljIENvbGxhdG9yICpjcmVhdGUoY29uc3QgTG9jYWxlICZsb2MsIGNvbnN0IGNoYXIgKnZlcik7IFwKKyAgcHJpdmF0ZTogVUNvbGxhdG9yICpfdGhpczsgR0xVRV9TWU1fViggQ29sbGF0b3IsIHggKSAoIFVDb2xsYXRvciogdG4gKSA6IF90aGlzKHRuKXt9IFwKKyAgICB2aXJ0dWFsIH4gR0xVRV9TWU1fViAoIENvbGxhdG9yLCB4KSAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQqIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgdm9pZCogZ2V0U3RhdGljQ2xhc3NJRCgpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIENvbGxhdG9yKiBjbG9uZSgpIGNvbnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIFVDb2xsYXRpb25SZXN1bHQgY29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nJiwgY29uc3QgVW5pY29kZVN0cmluZyYsIFVFcnJvckNvZGUmKSBjb25zdDsgXAorICAgIHZpcnR1YWwgVUNvbGxhdGlvblJlc3VsdCBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBjb25zdCBVbmljb2RlU3RyaW5nJiwgaW50MzJfdCwgVUVycm9yQ29kZSYpIGNvbnN0OyBcCisgICAgdmlydHVhbCBVQ29sbGF0aW9uUmVzdWx0IGNvbXBhcmUoY29uc3QgVUNoYXIqLCBpbnQzMl90LCBjb25zdCBVQ2hhciosIGludDMyX3QsIFVFcnJvckNvZGUmKSBjb25zdDsgXAorICAgIHZpcnR1YWwgQ29sbGF0aW9uS2V5JiBnZXRDb2xsYXRpb25LZXkoY29uc3QgVW5pY29kZVN0cmluZyYsIENvbGxhdGlvbktleSYsIFVFcnJvckNvZGUmKSBjb25zdDsgXAorICAgIHZpcnR1YWwgQ29sbGF0aW9uS2V5JiBnZXRDb2xsYXRpb25LZXkoY29uc3QgVUNoYXIqLCBpbnQzMl90LCBDb2xsYXRpb25LZXkmLCBVRXJyb3JDb2RlJikgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIGludDMyX3QgaGFzaENvZGUoKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIENPTlNUX0JFRk9SRV81MF8wXzIgTG9jYWxlIGdldExvY2FsZShVTG9jRGF0YUxvY2FsZVR5cGUsIFVFcnJvckNvZGUmKSBjb25zdDsgXAorICAgIHZpcnR1YWwgRUNvbGxhdGlvblN0cmVuZ3RoIGdldFN0cmVuZ3RoKCkgY29uc3Q7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJlbmd0aChFQ29sbGF0aW9uU3RyZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJzaW9uKHVpbnQ4X3QqKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRyaWJ1dGUoVUNvbEF0dHJpYnV0ZSwgVUNvbEF0dHJpYnV0ZVZhbHVlLCBVRXJyb3JDb2RlJikgOyBcCisgICAgdmlydHVhbCBVQ29sQXR0cmlidXRlVmFsdWUgZ2V0QXR0cmlidXRlKFVDb2xBdHRyaWJ1dGUsIFVFcnJvckNvZGUmKSBDT05TVF9BRlRFUl81MF8wXzI7IFwKKyAgICB2aXJ0dWFsIHVpbnQzMl90IHNldFZhcmlhYmxlVG9wKGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgVUVycm9yQ29kZSYpOyBcCisgICAgdmlydHVhbCB1aW50MzJfdCBzZXRWYXJpYWJsZVRvcChjb25zdCBVbmljb2RlU3RyaW5nIFJFRl9BRlRFUl81MF8wXzIsIFVFcnJvckNvZGUmKTsgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFyaWFibGVUb3AodWludDMyX3QsIFVFcnJvckNvZGUmKTsgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGdldFZhcmlhYmxlVG9wKFVFcnJvckNvZGUmKSBjb25zdDsgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIENvbGxhdG9yKiBzYWZlQ2xvbmUoKSBDT05TVF9BRlRFUl81MF8wXzIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgaW50MzJfdCBnZXRTb3J0S2V5KGNvbnN0IFVuaWNvZGVTdHJpbmcmLCB1aW50OF90KiwgaW50MzJfdCkgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0U29ydEtleShjb25zdCBVQ2hhciosIGludDMyX3QsIHVpbnQ4X3QqLCBpbnQzMl90KSBjb25zdDsgXAorICBwdWJsaWM6IHN0YXRpYyBpbnQzMl90IGNvdW50QXZhaWxhYmxlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdWJsaWM6IHN0YXRpYyBpbnQzMl90IGFwcGVuZEF2YWlsYWJsZShVbmljb2RlU3RyaW5nKiBzdHJzLCBpbnQzMl90IGksIGludDMyX3QgY291bnQpOyBcCisgIHB1YmxpYzogdmlydHVhbCBpbnQzMl90IGludGVybmFsR2V0U2hvcnREZWZpbml0aW9uU3RyaW5nKGNvbnN0IGNoYXIgKmxvY2FsZSwgY2hhciAqYnVmZmVyLCBpbnQzMl90IGNhcGFjaXR5LCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OyBcCisgIH07CisKKy8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGhlIGZvbGxvd2luZyBjb2RlIHJ1bnMgaW5zaWRlIHRoZSAndGFyZ2V0JyB2ZXJzaW9uIChpLmUuIG9sZCBJQ1UpID09PT09PT09PT0gKiovCisjaWYgZGVmaW5lZCAoIElDVUdMVUVfVkVSICkKKworCisvLyB0aGVzZSBmcm9tIHRibGNvbGwuaAorc3RhdGljIENvbGxhdG9yOjpFQ29sbGF0aW9uU3RyZW5ndGggX2dldEVDb2xsYXRpb25TdHJlbmd0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDb2xsYXRpb25TdHJlbmd0aCAmc3RyZW5ndGgpIAoreworICAgIHN3aXRjaCAoc3RyZW5ndGgpCisgICAgeworICAgIGNhc2UgVUNPTF9QUklNQVJZIDoKKyAgICAgICAgcmV0dXJuIENvbGxhdG9yOjpQUklNQVJZOworICAgIGNhc2UgVUNPTF9TRUNPTkRBUlkgOgorICAgICAgICByZXR1cm4gQ29sbGF0b3I6OlNFQ09OREFSWTsKKyAgICBjYXNlIFVDT0xfVEVSVElBUlkgOgorICAgICAgICByZXR1cm4gQ29sbGF0b3I6OlRFUlRJQVJZOworICAgIGNhc2UgVUNPTF9RVUFURVJOQVJZIDoKKyAgICAgICAgcmV0dXJuIENvbGxhdG9yOjpRVUFURVJOQVJZOworICAgIGRlZmF1bHQgOgorICAgICAgICByZXR1cm4gQ29sbGF0b3I6OklERU5USUNBTDsKKyAgICB9Cit9CisKK3N0YXRpYyBVQ29sbGF0aW9uU3RyZW5ndGggX2dldFVDb2xsYXRpb25TdHJlbmd0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sbGF0b3I6OkVDb2xsYXRpb25TdHJlbmd0aCAmc3RyZW5ndGgpIAoreworICAgIHN3aXRjaCAoc3RyZW5ndGgpCisgICAgeworICAgIGNhc2UgQ29sbGF0b3I6OlBSSU1BUlkgOgorICAgICAgICByZXR1cm4gVUNPTF9QUklNQVJZOworICAgIGNhc2UgQ29sbGF0b3I6OlNFQ09OREFSWSA6CisgICAgICAgIHJldHVybiBVQ09MX1NFQ09OREFSWTsKKyAgICBjYXNlIENvbGxhdG9yOjpURVJUSUFSWSA6CisgICAgICAgIHJldHVybiBVQ09MX1RFUlRJQVJZOworICAgIGNhc2UgQ29sbGF0b3I6OlFVQVRFUk5BUlkgOgorICAgICAgICByZXR1cm4gVUNPTF9RVUFURVJOQVJZOworICAgIGRlZmF1bHQgOgorICAgICAgICByZXR1cm4gVUNPTF9JREVOVElDQUw7CisgICAgfQorfQorCisKKworLyogY29kZSBmb3Igc29tZSB2ZXJzaW9uICovCisjaW5jbHVkZSA8aWN1Z2x1ZS9nbHVyZW4uaD4KKworI2luY2x1ZGUgIm9pY3UuaCIKKworLyogRXhwYW5kIEdMVUVfVkVSIHRvIGRlZmluZSB0aGUgY2xhc3MgKi8KKyNpZmRlZiBHTFVFX1ZFUgorR0xVRV9WRVIoIElDVUdMVUVfVkVSICkKKyNlbmRpZgorCitHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogfiBHTFVFX1NZTShDb2xsYXRvcikgKCkgeworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVjb2xfY2xvc2UiKTsKKyNlbmRpZgorICAgIE9JQ1VfdWNvbF9jbG9zZShfdGhpcyk7Cit9CisKKyNpZiAwCitVX0NGVU5DIGludDMyX3QgVV9DQUxMQ09OVgorR0xVRV9TWU0gKCBnbHVlX2NhbGNTb3J0S2V5KSAoY29uc3QgICAgVUNvbGxhdG9yICAgICpjb2xsLAorICAgICAgICBjb25zdCAgICBVQ2hhciAgICAgICAgKnNvdXJjZSwKKyAgICAgICAgaW50MzJfdCAgICAgICAgc291cmNlTGVuZ3RoLAorICAgICAgICB1aW50OF90ICAgICAgICAqKnJlc3VsdCwKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUJvb2wgYWxsb2NhdGVTS0J1ZmZlciwKKyAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworI2VuZGlmCisKK0NvbGxhdG9yICoKK0dMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBjcmVhdGUgKGNvbnN0IExvY2FsZSAmbG9jLCBjb25zdCBjaGFyICovKnZlciovKSB7CisgIC8vIFRPRE86IHNhdmUgJ3Zlcicgb2ZmLgorICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNoYXIgbG9jQnVmWzIwMF07CisgICAgY2hhciBrd3ZCdWZbMjAwXTsKKyAgICBpbnQzMl90IGxlbiA9IGxvYy5nZXRLZXl3b3JkVmFsdWUoImNvbGxhdGlvbiIsIGt3dkJ1ZiwgMjAwLCBzdGF0dXMpOworICAgIHN0cmNweShsb2NCdWYsbG9jLmdldEJhc2VOYW1lKCkpOworICAgIGlmKGxlbj4wKSB7CisgICAgICAgIHN0cmNhdChsb2NCdWYsIkBjb2xsYXRvcj0iKTsKKyAgICAgICAgc3RyY2F0KGxvY0J1Zixrd3ZCdWYpOworICAgIH0KKyAgICBVQ29sbGF0b3IgKiB1YyA9ICBPSUNVX3Vjb2xfb3BlbiggbG9jQnVmLCBzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSByZXR1cm4gTlVMTDsgLy8gVE9ETzogRVJSPworICAgIENvbGxhdG9yICpjID0gIG5ldyBHTFVFX1NZTSggQ29sbGF0b3IgKSAoIHVjICk7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgdWNvbF9vcGVuPSVzIC0+PiAlcFxuIiwgbG9jQnVmLCBjKTsKKyNlbmRpZgorICAgIHJldHVybiBjOworfQorCitVT0JKRUNUX0RFRklORV9SVFRJX0lNUExFTUVOVEFUSU9OKCBHTFVFX1NZTSggQ29sbGF0b3IgKSApCisKK0NvbGxhdG9yKiBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogY2xvbmUoKSBjb25zdCAgeworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIGNsb25lICVwIC0+ICIgLCB0aGlzKTsKKyNlbmRpZgorICAgIFVDb2xsYXRvciAqY2xjID0gT0lDVV91Y29sX3NhZmVDbG9uZSggX3RoaXMsIE5VTEwsIDAsICZzdGF0dXMpOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIC4uIHNhZmVjbG9uZSAlcyBfdGhpcyAlcC0+ICVwICIgLCB1X2Vycm9yTmFtZShzdGF0dXMpLCBfdGhpcywgY2xjKTsKKyNlbmRpZgorICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpfHxjbGM9PU5VTEwpIHJldHVybiBOVUxMOworICAgIENvbGxhdG9yICpjID0gbmV3IEdMVUVfU1lNKCBDb2xsYXRvciApICggY2xjICk7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgLi4gd3JhcCglcCkgLT4gJXBcbiIsIGNsYywgYyk7CisjZW5kaWYKKworICAgIHJldHVybiBjOworfQorCisKK1VDb2xsYXRpb25SZXN1bHQgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGNvbXBhcmUoY29uc3QgVW5pY29kZVN0cmluZyYsIGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBVRXJyb3JDb2RlJikgY29uc3QgIHsKKyAgICByZXR1cm4gKFVDb2xsYXRpb25SZXN1bHQpMDsKK30KKworCitVQ29sbGF0aW9uUmVzdWx0IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBjb25zdCBVbmljb2RlU3RyaW5nJiwgaW50MzJfdCwgVUVycm9yQ29kZSYpIGNvbnN0ICB7CisgICAgcmV0dXJuIChVQ29sbGF0aW9uUmVzdWx0KTA7Cit9CisKKworVUNvbGxhdGlvblJlc3VsdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogY29tcGFyZShjb25zdCBVQ2hhciogcywgaW50MzJfdCBzbCwgY29uc3QgVUNoYXIqIGQgLCBpbnQzMl90IGRsLCBVRXJyb3JDb2RlJi8qZSovICkgY29uc3QgIHsKKyAgICByZXR1cm4gT0lDVV91Y29sX3N0cmNvbGwoX3RoaXMsIHMsIHNsLCBkLCBkbCk7Cit9CisKKyNpbmNsdWRlICJ1bmljb2RlL3NvcnRrZXkuaCIKKworc3RhdGljIENvbGxhdGlvbktleSBrazsKKworQ29sbGF0aW9uS2V5JiBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0Q29sbGF0aW9uS2V5KGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBDb2xsYXRpb25LZXkmLCBVRXJyb3JDb2RlJikgY29uc3QgIHsKKyAgLy8jaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIEdDSyAtIG5vdGltcCIpOworICAgIC8vI2VuZGlmCityZXR1cm4ga2s7Cit9CisKKworQ29sbGF0aW9uS2V5JiBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0Q29sbGF0aW9uS2V5KGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgQ29sbGF0aW9uS2V5JiwgVUVycm9yQ29kZSYpIGNvbnN0ICB7CisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgR0tLMiAtIG5vdGltcCIpOworcmV0dXJuIGtrOworfQorCisKK2ludDMyX3QgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGhhc2hDb2RlKCkgY29uc3QgIHsKKyAgICByZXR1cm4gMDsKK30KKworCitDT05TVF9CRUZPUkVfNTBfMF8yIExvY2FsZSBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0TG9jYWxlKFVMb2NEYXRhTG9jYWxlVHlwZSwgVUVycm9yQ29kZSYpIGNvbnN0ICB7CisgICAgcmV0dXJuIExvY2FsZSgpOworfQorCisKK0NvbGxhdG9yOjpFQ29sbGF0aW9uU3RyZW5ndGgKKyBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0U3RyZW5ndGgoKSBjb25zdCAgeworICAgIHJldHVybiBfZ2V0RUNvbGxhdGlvblN0cmVuZ3RoKE9JQ1VfdWNvbF9nZXRTdHJlbmd0aChfdGhpcykpOworfQorCisKK3ZvaWQgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IHNldFN0cmVuZ3RoKEVDb2xsYXRpb25TdHJlbmd0aCBzKSAgeworICAgIE9JQ1VfdWNvbF9zZXRTdHJlbmd0aChfdGhpcywgX2dldFVDb2xsYXRpb25TdHJlbmd0aChzKSk7Cit9CisKKwordm9pZCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0VmVyc2lvbih1aW50OF90KikgY29uc3QgIHsKK30KKworCit2b2lkIEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBzZXRBdHRyaWJ1dGUoVUNvbEF0dHJpYnV0ZSwgVUNvbEF0dHJpYnV0ZVZhbHVlLCBVRXJyb3JDb2RlJikgeworfQorCisKK1VDb2xBdHRyaWJ1dGVWYWx1ZSBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0QXR0cmlidXRlKFVDb2xBdHRyaWJ1dGUsIFVFcnJvckNvZGUmKSBDT05TVF9BRlRFUl81MF8wXzIgeworcmV0dXJuIChVQ29sQXR0cmlidXRlVmFsdWUpMDsKK30KKworCit1aW50MzJfdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogc2V0VmFyaWFibGVUb3AoY29uc3QgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlJikgIHsKK3JldHVybiAwOworfQorCisKK3VpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBzZXRWYXJpYWJsZVRvcChjb25zdCBVbmljb2RlU3RyaW5nIFJFRl9BRlRFUl81MF8wXzIsIFVFcnJvckNvZGUmKSAgeworcmV0dXJuIDA7Cit9CisKKwordm9pZCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogc2V0VmFyaWFibGVUb3AodWludDMyX3QsIFVFcnJvckNvZGUmKSAgeworfQorCisKK3VpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBnZXRWYXJpYWJsZVRvcChVRXJyb3JDb2RlJikgY29uc3QgIHsKK3JldHVybiAwOworfQorCisKK0NvbGxhdG9yKiBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogc2FmZUNsb25lKCkgQ09OU1RfQUZURVJfNTBfMF8yIHsKKyAgICByZXR1cm4gY2xvbmUoKTsKK30KKworCitpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBnZXRTb3J0S2V5KGNvbnN0IFVuaWNvZGVTdHJpbmcmIHMsIHVpbnQ4X3QqYnVmLCBpbnQzMl90IGxlbikgY29uc3QgIHsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIEdTSyIpOworI2VuZGlmCisgICAgcmV0dXJuIGdldFNvcnRLZXkocy5nZXRCdWZmZXIoKSxzLmxlbmd0aCgpLCBidWYsIGxlbik7Cit9CisKKworCisKK2ludDMyX3QgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldFNvcnRLZXkoY29uc3QgVUNoYXIqcywgaW50MzJfdCBsLCB1aW50OF90KmQsIGludDMyX3QgYikgY29uc3QgIHsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgR0tTIik7CisjZW5kaWYKKyAgICByZXR1cm4gT0lDVV91Y29sX2dldFNvcnRLZXkoX3RoaXMsIHMsbCxkLGIpOworfQorCitpbnQzMl90IEdMVUVfU1lNIChDb2xsYXRvciApIDo6ICBpbnRlcm5hbEdldFNob3J0RGVmaW5pdGlvblN0cmluZyhjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKmJ1ZmZlciwgaW50MzJfdCBjYXBhY2l0eSwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdCB7CisgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSByZXR1cm4gMDsKKyAgaW50MzJfdCBpbnRSZXMgPSBPSUNVX3Vjb2xfZ2V0U2hvcnREZWZpbml0aW9uU3RyaW5nKF90aGlzLCBsb2NhbGUsIGJ1ZmZlciwgY2FwYWNpdHksICZzdGF0dXMpOworICBpbnQzMl90IG5ld1JlcyA9IChpbnRSZXMgKz0gNyk7IC8qIF9QSUNVMzggKi8KKyAgaW50MzJfdCByZW1haW5DYXAgPSBjYXBhY2l0eSAtIG5ld1JlczsKKworICBpZihyZW1haW5DYXAgPCAwICYmIFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgc3RhdHVzID0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1I7IC8qIHJhbiBvdXQgb2Ygc3BhY2Ugb24gb3VyIHdhdGNoICovCisgIH0KKyAgaWYoVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICBjaGFyICpwID0gYnVmZmVyK3N0cmxlbihidWZmZXIpOworICAgIHN0cm5jYXQocCwiX1BJQ1UiLDUpOworICAgIHAgKz01IDsKKyAgICBDUFlfVkVSU1RSKHAsIElDVUdMVUVfVkVSX1NUUik7CisgICAgcCArPTI7CisgICAgaWYocmVtYWluQ2FwPjApIHsKKyAgICAgICoocCsrKT0wOworICAgIH0KKyAgfQorICByZXR1cm4gbmV3UmVzOworfQorCisKKworIGludDMyX3QgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGNvdW50QXZhaWxhYmxlKCkgeworICAgIGludDMyX3QgY291bnQgPSAgT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIGNvdW50OworIH0KKyAKKyAKK2ludDMyX3QgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGFwcGVuZEF2YWlsYWJsZShVbmljb2RlU3RyaW5nKiBzdHJzLCBpbnQzMl90IGksIGludDMyX3QgLypjb3VudCovKSB7CisgICBpbnQgYXZhaWwgPSBPSUNVX3Vjb2xfY291bnRBdmFpbGFibGUoKTsKKyAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgT0lDVV91X2luaXQoJnN0YXR1cyk7CisjaWYgQ09MTF9GRV9ERUJVRworICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXZhaWwgJWQgLSBpbml0ICVzXG4iLCBhdmFpbCwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisjZW5kaWYgICAKKyAgICBmb3IoaW50IGo9MDtqPGF2YWlsO2orKykgeworICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZChPSUNVX3Vjb2xfZ2V0QXZhaWxhYmxlKGopKTsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIkBzcD1pY3UiKTsKKyAgICAgICAgIAorICAgICAgICAgaWYoSVNfT0xEX1ZFUlNUUihJQ1VHTFVFX1ZFUl9TVFIpKSB7CisgICAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUltPTERfVkVSU1RSX01BSl0gKTsgIC8vIFhfeQorICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbT0xEX1ZFUlNUUl9NSU5dICk7ICAvLyB4X1kKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUltORVdfVkVSU1RSX01BSl0gKTsgIC8vIFh5XworICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbTkVXX1ZFUlNUUl9NSU5dICk7ICAvLyB4WV8KKyAgICAgICAgIH0KKworI2lmIENPTExfRkVfREVCVUcKKyAgICAgICAgIHsgCisgICAgICAgICAgICBjaGFyIGZvb1s5OTldOworICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNzID0gc3Ryc1tpK2pdLmdldFRlcm1pbmF0ZWRCdWZmZXIoKTsKKyAgICAgICAgICAgIHVfYXVzdHJjcHkoZm9vLCBzcyk7CisgICAgICAgICAgICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiBhcHBlbmRpbmcgWyVkKyVkPSVkXSA8PCVzPj5cbiIsIGksIGosIGkraiwgZm9vKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgfQorCisKKworI2Vsc2UKKy8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGhlIGZvbGxvd2luZyBjb2RlIHJ1bnMgaW5zaWRlIHRoZSAncHJvdmlkZXInIHZlcnNpb24gKGkuZS4gY3VycmVudCBJQ1UpID09PT09PT09PT0gKiovCisKKy8vIGRlZmluZSBDb2xsYXRvcl9YWAorI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKworLy8gZ2VuZXJhdGUgbGlzdCBvZiB2ZXJzaW9ucworc3RhdGljCisjaW5jbHVkZSA8aWN1Z2x1ZS9mZV92ZXJsaXN0Lmg+CisKK2NsYXNzIFZlcnNpb25Db2xsYXRvckZhY3RvcnkgOiBwdWJsaWMgQ29sbGF0b3JGYWN0b3J5IHsKK3B1YmxpYzoKKyAgdmlydHVhbCBDb2xsYXRvciAqY3JlYXRlQ29sbGF0b3IoY29uc3QgTG9jYWxlICZsb2MpOworICB2aXJ0dWFsIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmdldFN1cHBvcnRlZElEcyhpbnQzMl90ICZjb3VudCwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgdmlydHVhbCB2b2lkKiBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0OyAKKyAgc3RhdGljIHZvaWQqIGdldFN0YXRpY0NsYXNzSUQoKSA7IAorfTsKKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggVmVyc2lvbkNvbGxhdG9yRmFjdG9yeSApCisKK0NvbGxhdG9yICpWZXJzaW9uQ29sbGF0b3JGYWN0b3J5OjpjcmVhdGVDb2xsYXRvcihjb25zdCBMb2NhbGUgJmxvYykgeworICAgIC8vIHB1bGwgb2ZmIHByb3ZpZGVyICMKKyAgICBjaGFyIHByb3ZpZGVyWzIwMF07CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpDQyAlc1xuIiwgbG9jLmdldE5hbWUoKSk7CisjZW5kaWYKKyAgICBpbnQzMl90IGxlbiA9IGxvYy5nZXRLZXl3b3JkVmFsdWUoInNwIiwgcHJvdmlkZXIsIDIwMCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKXx8bGVuPT0wKSByZXR1cm4gTlVMTDsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGOktXVj4gJXMvJWRcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cyksIGxlbik7CisjZW5kaWYKKyAgICBwcm92aWRlcltsZW5dPTA7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpLV1YgJXNcbiIsIHByb3ZpZGVyKTsKKyNlbmRpZgorICAgIGlmKHN0cm5jbXAocHJvdmlkZXIsImljdSIsMykpIHJldHVybiBOVUxMOworICAgIGNvbnN0IGNoYXIgKmljdXZlcj1wcm92aWRlciszOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6SUNVViAlc1xuIiwgaWN1dmVyKTsKKyNlbmRpZgorICAgIAorI2lmIGRlZmluZWQoR0xVRV9WRVIpCisjdW5kZWYgR0xVRV9WRVIKKyNlbmRpZgorCisjZGVmaW5lIEdMVUVfVkVSKHgpIFwKKyAgICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwiJWMvJWN8JWMvJWNcbiIsIGljdXZlclswXSwoI3gpWzBdLGljdXZlclsxXSwoI3gpWzJdKSk7ICBcCisgICAgaWYoQ01QX1ZFUlNUUihpY3V2ZXIsICgjeCkpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBDb2xsYXRvciAqYyA9IGdsdWUgIyMgQ29sbGF0b3IgIyMgeCA6OiBjcmVhdGUobG9jLCBpY3V2ZXIpOyBcCisgICAgICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgIlZDRjo6Q0MgJXMgLT4gJXBcbiIsIGxvYy5nZXROYW1lKCksIGMpKTsgXAorICAgICAgcmV0dXJuIGM7IFwKKyAgICB9CisKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpDQyAlcyBmYWlsZWRcbiIsIGxvYy5nZXROYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgY29uc3QgVW5pY29kZVN0cmluZyAqZ0xvY2FsZXMgPSBOVUxMOworc3RhdGljICBpbnQzMl90IGdMb2NDb3VudCA9IDA7IAorCitjb25zdCBVbmljb2RlU3RyaW5nCisqVmVyc2lvbkNvbGxhdG9yRmFjdG9yeTo6Z2V0U3VwcG9ydGVkSURzKGludDMyX3QgJmNvdW50LCBVRXJyb3JDb2RlICYvKnN0YXR1cyovKSB7CisgIGlmKGdMb2NhbGVzPT1OVUxMKSB7CisgICAgY291bnQgPSAwOworICAgIAorICAgIAorICAgIC8qIGdhdGhlciBjb3VudHMgKi8KKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKyNkZWZpbmUgR0xVRV9WRVIoeCkgY291bnQgKz0gZ2x1ZSAjIyBDb2xsYXRvciAjIyB4IDo6IGNvdW50QXZhaWxhYmxlKCk7CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaWYgQ09MTF9GRV9ERUJVRworICAgIHByaW50ZigiVkNGOiBjb3VudD0lZFxuIiwgY291bnQpOworI2VuZGlmCisgICAgVW5pY29kZVN0cmluZyAqc3RycyA9IG5ldyAgVW5pY29kZVN0cmluZ1tjb3VudF07CisgICAgaW50MzJfdCBpID0gMDsKKworI2lmIGRlZmluZWQoR0xVRV9WRVIpCisjdW5kZWYgR0xVRV9WRVIKKyNlbmRpZgorI2RlZmluZSBHTFVFX1ZFUih4KSBpICs9IGdsdWUgIyMgQ29sbGF0b3IgIyMgeCA6OiBhcHBlbmRBdmFpbGFibGUoc3RycywgaSwgY291bnQpOworI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKworI2lmIENPTExfRkVfREVCVUcKKyAgICBwcmludGYoIlZDRjogYXBwZW5kZWQgY291bnQ9JWRcbiIsIGNvdW50KTsKKyNlbmRpZgorCisgICAgZ0xvY0NvdW50ID0gY291bnQ7CisgICAgZ0xvY2FsZXMgPSBzdHJzOworICB9CisgIGNvdW50ID0gZ0xvY0NvdW50OworICByZXR1cm4gZ0xvY2FsZXM7Cit9CisKKworLyogUGx1Z2luIENvZGUgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPgorCitzdGF0aWMgVVJlZ2lzdHJ5S2V5IHJrID0gTlVMTDsKKwordm9pZCBjb2xsX3Byb3ZpZGVyX3JlZ2lzdGVyKFVFcnJvckNvZGUgJnN0YXR1cykgeworICByayA9IENvbGxhdG9yOjpyZWdpc3RlckZhY3RvcnkobmV3IFZlcnNpb25Db2xsYXRvckZhY3RvcnkoKSwgc3RhdHVzKTsKK30KKwordm9pZCBjb2xsX3Byb3ZpZGVyX3VucmVnaXN0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIENvbGxhdG9yOjp1bnJlZ2lzdGVyKHJrLCBzdGF0dXMpOworfQorCisvKiBQbHVnaW4tIG9ubHkgSUNVIDQuNCsgKi8KKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiA0KSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPT00KSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjMpKQorI2luY2x1ZGUgInVuaWNvZGUvaWN1cGx1Zy5oIgorCitVX0NBUEkgVVBsdWdUb2tlblJldHVybiBVX0VYUE9SVDIgY29sbF9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCitVX0NBUEkgVVBsdWdUb2tlblJldHVybiBVX0VYUE9SVDIgY29sbF9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIHN3aXRjaChyZWFzb24pIHsKKyAgY2FzZSBVUExVR19SRUFTT05fUVVFUlk6CisgICAgdXBsdWdfc2V0UGx1Z05hbWUoZGF0YSwgIkNvbGxhdGlvbiBQcm92aWRlciBQbHVnaW4iKTsKKyAgICB1cGx1Z19zZXRQbHVnTGV2ZWwoZGF0YSwgVVBMVUdfTEVWRUxfSElHSCk7CisgICAgYnJlYWs7CisgIGNhc2UgVVBMVUdfUkVBU09OX0xPQUQ6CisgICAgY29sbF9wcm92aWRlcl9yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgY2FzZSBVUExVR19SRUFTT05fVU5MT0FEOgorICAgIGNvbGxfcHJvdmlkZXJfdW5yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsgLyogbm90IGhhbmRsZWQgKi8KKyAgfQorICByZXR1cm4gVVBMVUdfVE9LRU47Cit9CisjZWxzZQorCisvKiAKKyAgIE5vdGU6IHRoaXMgSUNVIHZlcnNpb24gbXVzdCBleHBsaWNpdGx5IGNhbGwgJ2NvbGxfcHJvdmlkZXJfcGx1Z2luJworKi8KKworI2VuZGlmIC8qIHBsdWdpbiAqLworCisjZW5kaWYgLyogcHJvdmlkZXIgc2lkZSAodnMgdGFyZ2V0KSAqLwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2RhdGVfZmUuY3BwIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2RhdGVfZmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWZlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZGF0ZV9mZS5jcHAKQEAgLTAsMCArMSwzNzggQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgREFURV9GRV9ERUJVRworI2RlZmluZSBEQVRFX0ZFX0RFQlVHIDAKKyNlbmRpZgorCisjaW5jbHVkZSA8aWN1Z2x1ZS9pY3VnbHVlLmg+CisjaW5jbHVkZSAidW5pY29kZS91ZGF0LmgiCisvLyNpbmNsdWRlIDx1bmljb2RlL3RibGNvbGwuaD4KKyNpbmNsdWRlICJ1bmljb2RlL2RhdGVmbXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3NtcGR0Zm10LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2dyZWdvY2FsLmgiCisKKworCisvKioKKyAqIE1hY3JvIHRvIGRlZmluZSB0aGUgQ29sbGF0b3JfZ2x1ZV80XzIgY2xhc3MgCisgKi8KKyNpZmRlZiBHTFVFX1ZFUgorI2Vycm9yIEdMVUVfVkVSIGlzIGRlZmluZWQKKyNlbmRpZgorCisjZGVmaW5lIEdMVUVfVkVSKHgpIGNsYXNzIEdMVUVfU1lNX1YoIERhdGVGb3JtYXQsIHggKSA6IHB1YmxpYyBEYXRlRm9ybWF0IHsgIFwKKyAgcHVibGljOiAgc3RhdGljIERhdGVGb3JtYXQgKmNyZWF0ZShVRGF0ZUZvcm1hdFN0eWxlICB0aW1lU3R5bGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMsIGNvbnN0IExvY2FsZSAmbG9jLCBjb25zdCBjaGFyICp2ZXIpOyBcCisgIHByaXZhdGU6IFVEYXRlRm9ybWF0ICpfdGhpczsgR0xVRV9TWU1fViggRGF0ZUZvcm1hdCwgeCApICggVURhdGVGb3JtYXQqIHRuICk7IFwKKyAgICB2aXJ0dWFsIH4gR0xVRV9TWU1fViAoIERhdGVGb3JtYXQsIHgpICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgdm9pZCogZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyB2b2lkKiBnZXRTdGF0aWNDbGFzc0lEKCkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgVW5pY29kZVN0cmluZyYgZm9ybWF0KCAgQ2FsZW5kYXImIGNhbCwgVW5pY29kZVN0cmluZyYgYXBwZW5kVG8sIEZpZWxkUG9zaXRpb24mIHBvcykgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQsIENhbGVuZGFyJiBjYWwsIFBhcnNlUG9zaXRpb24mIHBvcykgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIEZvcm1hdCogY2xvbmUodm9pZCkgY29uc3Q7IFwKKyAgcHVibGljOiBzdGF0aWMgaW50MzJfdCBjb3VudEF2YWlsYWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3B1YmxpYzogc3RhdGljIGludDMyX3QgYXBwZW5kQXZhaWxhYmxlKFVuaWNvZGVTdHJpbmcqIHN0cnMsIGludDMyX3QgaSwgaW50MzJfdCBjb3VudCk7IFwKKyAgfTsgXAorCisKKworLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBUaGUgZm9sbG93aW5nIGNvZGUgcnVucyBpbnNpZGUgdGhlICd0YXJnZXQnIHZlcnNpb24gKGkuZS4gb2xkIElDVSkgPT09PT09PT09PSAqKi8KKyNpZiBkZWZpbmVkICggSUNVR0xVRV9WRVIgKQorCisKKworLyogY29kZSBmb3Igc29tZSB2ZXJzaW9uICovCisjaW5jbHVkZSA8aWN1Z2x1ZS9nbHVyZW4uaD4KKyNpbmNsdWRlICJvaWN1LmgiCisKKyNpZmRlZiBHTFVFX1ZFUgorR0xVRV9WRVIoIElDVUdMVUVfVkVSICkKKyNlbmRpZgorCitHTFVFX1NZTSAoRGF0ZUZvcm1hdCApIDo6IEdMVUVfU1lNKERhdGVGb3JtYXQpICggVURhdGVGb3JtYXQqIHRuKSA6CisgX3RoaXModG4pCit7IAorCisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBhZG9wdENhbGVuZGFyKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihzdGF0dXMpKTsKK30KKworR0xVRV9TWU0gKCBEYXRlRm9ybWF0ICkgOjogfiBHTFVFX1NZTShEYXRlRm9ybWF0KSAoKSB7CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgdWRhdF9jbG9zZSIpOworI2VuZGlmCisgICAgT0lDVV91ZGF0X2Nsb3NlKF90aGlzKTsKK30KKworRGF0ZUZvcm1hdCAqCitHTFVFX1NZTSAoIERhdGVGb3JtYXQgKSA6OiBjcmVhdGUoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUgIGRhdGVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2FsZSAmbG9jLCBjb25zdCBjaGFyICovKnZlciovKSB7CisgIC8vIFRPRE86IHNhdmUgdmVyc2lvbgorICAvL2NoYXIgbG9jQnVmWzIwMF07CisgIC8vY2hhciBrd3ZCdWZbMjAwXTsKKyAgVURhdGVGb3JtYXQgKiB1YyA9ICBPSUNVX3VkYXRfb3BlbiggdGltZVN0eWxlLCBkYXRlU3R5bGUsIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHpJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHpJRExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHJldHVybiBOVUxMOyAvLyBUT0RPOiBFUlI/CisgICAgRGF0ZUZvcm1hdCAqYyA9ICBuZXcgR0xVRV9TWU0oIERhdGVGb3JtYXQgKSAoIHVjICk7CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgdWRhdF9vcGVuPSVzIC0+PiAlcFxuIiwgbG9jLmdldE5hbWUoKSwgKHZvaWQqKWMpOworI2VuZGlmCisgICAgcmV0dXJuIGM7Cit9CisKK1VuaWNvZGVTdHJpbmcmIEdMVUVfU1lNIChEYXRlRm9ybWF0ICkgOjogZm9ybWF0KCAgQ2FsZW5kYXImIGNhbCwgVW5pY29kZVN0cmluZyYgYXBwZW5kVG8sIEZpZWxkUG9zaXRpb24mIHBvcykgY29uc3QKK3sKKyNpZiBEQVRFX0ZFX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgLSBmb3JtYXR0aW5nLiBcbiIpOworI2VuZGlmCisgIGludDMyX3QgbGVuID0gYXBwZW5kVG8ubGVuZ3RoKCk7CisKKyAgVUNoYXIganVua1syMDBdOworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKworICBVRmllbGRQb3NpdGlvbiBwb3MyOworCisgIGludDMyX3QgbmxlbiA9IE9JQ1VfdWRhdF9mb3JtYXQoX3RoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLmdldFRpbWUoc3RhdHVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9zMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHVzKTsKKworICAvLyB0b2RvOiB1c2UgcG9zMgorICBwb3Muc2V0QmVnaW5JbmRleChsZW4pOworICBwb3Muc2V0RW5kSW5kZXgobGVuICs9IG5sZW4pOworICBhcHBlbmRUby5hcHBlbmQoanVuaywgbmxlbik7CisKKyAgcmV0dXJuIGFwcGVuZFRvOworfQorCit2b2lkICBHTFVFX1NZTSAoRGF0ZUZvcm1hdCApIDo6IHBhcnNlKCBjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0LCBDYWxlbmRhciYgY2FsLCBQYXJzZVBvc2l0aW9uJiBwb3MpIGNvbnN0Cit7CisgIHJldHVybjsKK30KKworRm9ybWF0KiAgR0xVRV9TWU0gKERhdGVGb3JtYXQgKSA6OiBjbG9uZSh2b2lkKSBjb25zdAoreworICByZXR1cm4gTlVMTDsKK30KKworCisKKyBpbnQzMl90IEdMVUVfU1lNICggRGF0ZUZvcm1hdCApIDo6IGNvdW50QXZhaWxhYmxlKCkgeworICAgIGludDMyX3QgY291bnQgPSAgT0lDVV91ZGF0X2NvdW50QXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIGNvdW50OworIH0KKyAKKyAKK2ludDMyX3QgR0xVRV9TWU0gKCBEYXRlRm9ybWF0ICkgOjogYXBwZW5kQXZhaWxhYmxlKFVuaWNvZGVTdHJpbmcqIHN0cnMsIGludDMyX3QgaSwgaW50MzJfdCAvKmNvdW50Ki8pIHsKKyAgIGludCBhdmFpbCA9IE9JQ1VfdWRhdF9jb3VudEF2YWlsYWJsZSgpOworICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICBPSUNVX3VfaW5pdCgmc3RhdHVzKTsKKyNpZiBEQVRFX0ZFX0RFQlVHCisgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiBhdmFpbCAlZCAtIGluaXQgJXNcbiIsIGF2YWlsLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyNlbmRpZiAgIAorICAgIGZvcihpbnQgaj0wO2o8YXZhaWw7aisrKSB7CisgICAgICAgICBzdHJzW2kral0uYXBwZW5kKE9JQ1VfdWRhdF9nZXRBdmFpbGFibGUoaikpOworICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCgiQHNwPWljdSIpOworICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSWzBdICk7ICAvLyBYX3kKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUlsyXSApOyAgLy8geF9ZCisjaWYgREFURV9GRV9ERUJVRworICAgICAgICAgeyAKKyAgICAgICAgICAgIGNoYXIgZm9vWzk5OV07CisgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3MgPSBzdHJzW2kral0uZ2V0VGVybWluYXRlZEJ1ZmZlcigpOworICAgICAgICAgICAgdV9hdXN0cmNweShmb28sIHNzKTsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXBwZW5kaW5nIFslZCslZD0lZF0gPDwlcz4+XG4iLCBpLCBqLCBpK2osIGZvbyk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgfQorCitVT0JKRUNUX0RFRklORV9SVFRJX0lNUExFTUVOVEFUSU9OKCBHTFVFX1NZTSggRGF0ZUZvcm1hdCApICkKKworCisKKworI2Vsc2UKKy8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGhlIGZvbGxvd2luZyBjb2RlIHJ1bnMgaW5zaWRlIHRoZSAncHJvdmlkZXInIHZlcnNpb24gKGkuZS4gY3VycmVudCBJQ1UpID09PT09PT09PT0gKiovCisKKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA0OSkKKyNkZWZpbmUgREFURV9QUk9WSURFUl9VTlNVUFBPUlRFRAorI2VuZGlmCisKKyNpZm5kZWYgREFURV9QUk9WSURFUl9VTlNVUFBPUlRFRAorLy8gZGVmaW5lIENvbGxhdG9yX1hYCisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisvLyBnZW5lcmF0ZSBsaXN0IG9mIHZlcnNpb25zCitzdGF0aWMKKyNpbmNsdWRlIDxpY3VnbHVlL2ZlX3Zlcmxpc3QuaD4KKworY2xhc3MgVmVyc2lvbkRhdGVGb3JtYXRGYWN0b3J5IDogcHVibGljIFVPYmplY3QgIHsKK3B1YmxpYzoKKyAgdmlydHVhbCBEYXRlRm9ybWF0ICpjcmVhdGVGb3JtYXQoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICpsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisgIHZpcnR1YWwgY29uc3QgVW5pY29kZVN0cmluZyAqZ2V0U3VwcG9ydGVkSURzKGludDMyX3QgJmNvdW50LCBVRXJyb3JDb2RlICZzdGF0dXMpOworICB2aXJ0dWFsIHZvaWQqIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7IAorICBzdGF0aWMgdm9pZCogZ2V0U3RhdGljQ2xhc3NJRCgpIDsgCit9OworCitVT0JKRUNUX0RFRklORV9SVFRJX0lNUExFTUVOVEFUSU9OKCBWZXJzaW9uRGF0ZUZvcm1hdEZhY3RvcnkgKQorCitEYXRlRm9ybWF0ICpWZXJzaW9uRGF0ZUZvcm1hdEZhY3Rvcnk6OmNyZWF0ZUZvcm1hdChVRGF0ZUZvcm1hdFN0eWxlICB0aW1lU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICpsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpIHsKKyAgICBMb2NhbGUgbG9jKGxvY2FsZSk7CisgICAgLy8gcHVsbCBvZmYgcHJvdmlkZXIgIworICAgIGNoYXIgcHJvdmlkZXJbMjAwXTsKKyNpZiBEQVRFX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGOkNDICVzXG4iLCBsb2MuZ2V0TmFtZSgpKTsKKyNlbmRpZgorICAgIGludDMyX3QgbGVuID0gbG9jLmdldEtleXdvcmRWYWx1ZSgic3AiLCBwcm92aWRlciwgMjAwLCAqc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cyl8fGxlbj09MCkgcmV0dXJuIE5VTEw7CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpLV1Y+ICVzLyVkXG4iLCB1X2Vycm9yTmFtZSgqc3RhdHVzKSwgbGVuKTsKKyNlbmRpZgorICAgIHByb3ZpZGVyW2xlbl09MDsKKyNpZiBEQVRFX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGOktXViAlc1xuIiwgcHJvdmlkZXIpOworI2VuZGlmCisgICAgaWYoc3RybmNtcChwcm92aWRlciwiaWN1IiwzKSkgcmV0dXJuIE5VTEw7CisgICAgY29uc3QgY2hhciAqaWN1dmVyPXByb3ZpZGVyKzM7CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpJQ1VWICVzXG4iLCBpY3V2ZXIpOworI2VuZGlmCisgICAgCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIC8qcHJpbnRmKCIlYy8lY3wlYy8lY1xuIiwgaWN1dmVyWzBdLCgjeClbMF0saWN1dmVyWzFdLCgjeClbMl0pOyovICBpZihpY3V2ZXJbMF09PSAoI3gpWzBdICYmIGljdXZlclsxXT09KCN4KVsyXSkgeyBEYXRlRm9ybWF0ICpjID0gZ2x1ZSAjIyBEYXRlRm9ybWF0ICMjIHggOjogY3JlYXRlKHRpbWVTdHlsZSxkYXRlU3R5bGUsbG9jYWxlLHR6SUQsdHpJRExlbmd0aCxwYXR0ZXJuLHBhdHRlcm5MZW5ndGgsc3RhdHVzLGxvYyxpY3V2ZXIpOyAvKmZwcmludGYoc3RkZXJyLCAiVkNGOjpDQyAlcyAtPiAlcFxuIiwgbG9jLmdldE5hbWUoKSwgYyk7Ki8gcmV0dXJuIGM7IH0KKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpDQyAlcyBmYWlsZWRcbiIsIGxvYy5nZXROYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgY29uc3QgVW5pY29kZVN0cmluZyAqZ0xvY2FsZXNEYXRlID0gTlVMTDsKK3N0YXRpYyAgaW50MzJfdCBnTG9jQ291bnREYXRlID0gMDsgCisKKworY29uc3QgVW5pY29kZVN0cmluZworKlZlcnNpb25EYXRlRm9ybWF0RmFjdG9yeTo6Z2V0U3VwcG9ydGVkSURzKGludDMyX3QgJmNvdW50LCBVRXJyb3JDb2RlICYvKnN0YXR1cyovKSB7CisgIGlmKGdMb2NhbGVzRGF0ZT09TlVMTCkgeworICAgIGNvdW50ID0gMDsKKyAgICAKKyAgICAKKyAgICAvKiBnYXRoZXIgY291bnRzICovCisKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKyNkZWZpbmUgR0xVRV9WRVIoeCkgY291bnQgKz0gZ2x1ZSAjIyBEYXRlRm9ybWF0ICMjIHggOjogY291bnRBdmFpbGFibGUoKTsKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKyNpZiBEQVRFX0ZFX0RFQlVHCisgICAgcHJpbnRmKCJWQ0Y6IGNvdW50PSVkXG4iLCBjb3VudCk7CisjZW5kaWYKKyAgICBVbmljb2RlU3RyaW5nICpzdHJzID0gbmV3ICBVbmljb2RlU3RyaW5nW2NvdW50XTsKKyAgICBpbnQzMl90IGkgPSAwOworCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGkgKz0gZ2x1ZSAjIyBEYXRlRm9ybWF0ICMjIHggOjogYXBwZW5kQXZhaWxhYmxlKHN0cnMsIGksIGNvdW50KTsKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKyNpZiBEQVRFX0ZFX0RFQlVHCisgICAgcHJpbnRmKCJWQ0Y6IGFwcGVuZGVkIGNvdW50PSVkXG4iLCBjb3VudCk7CisjZW5kaWYKKworICAgIGdMb2NDb3VudERhdGUgPSBjb3VudDsKKyAgICBnTG9jYWxlc0RhdGUgPSBzdHJzOworICB9CisgIGNvdW50ID0gZ0xvY0NvdW50RGF0ZTsKKyAgcmV0dXJuIGdMb2NhbGVzRGF0ZTsKK30KKworCisvKiBQbHVnaW4gQ29kZSAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+CisKKy8vc3RhdGljIFVSZWdpc3RyeUtleSBya2RhdGUgPSBOVUxMOworCitzdGF0aWMgVmVyc2lvbkRhdGVGb3JtYXRGYWN0b3J5IHZkZjsKKworZXh0ZXJuICJDIiBVRGF0ZUZvcm1hdCAqdmVyc2lvbkRhdGVGb3JtYXRPcGVuZXIoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUgIGRhdGVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzKSB7CisgIERhdGVGb3JtYXQgKmRmID0gdmRmLmNyZWF0ZUZvcm1hdCh0aW1lU3R5bGUsZGF0ZVN0eWxlLGxvY2FsZSx0eklELHR6SURMZW5ndGgscGF0dGVybixwYXR0ZXJuTGVuZ3RoLHN0YXR1cyk7CisgIC8vIHByaW50ZigiSGV5ISBJIGdvdDogJXMgLT4gJXBcbiIsIGxvY2FsZSwgZGYpOworICByZXR1cm4gKFVEYXRlRm9ybWF0KilkZjsKK30KKwordm9pZCBkYXRlX3Byb3ZpZGVyX3JlZ2lzdGVyKFVFcnJvckNvZGUgJnN0YXR1cykgeworICB1ZGF0X3JlZ2lzdGVyT3BlbmVyKHZlcnNpb25EYXRlRm9ybWF0T3BlbmVyLCAmc3RhdHVzKTsKKyAgLy8gICBya2RhdGUgPSBEYXRlRm9ybWF0OjpyZWdpc3RlckZhY3RvcnkobmV3IFZlcnNpb25EYXRlRm9ybWF0RmFjdG9yeSgpLCBzdGF0dXMpOworfQorCit2b2lkIGRhdGVfcHJvdmlkZXJfdW5yZWdpc3RlcihVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgdWRhdF91bnJlZ2lzdGVyT3BlbmVyKHZlcnNpb25EYXRlRm9ybWF0T3BlbmVyLCAmc3RhdHVzKTsKK30KKworI2Vsc2UKKworLyogbm8gb3AtIHRoaXMgSUNVIGRvZXNuJ3Qgc3VwcG9ydCBkYXRlIHByb3ZpZGVycyAqLworCit2b2lkIGRhdGVfcHJvdmlkZXJfcmVnaXN0ZXIoVUVycm9yQ29kZSAmKSB7CisgIC8vIG5vdCBzdXBwb3J0ZWQKK30KKwordm9pZCBkYXRlX3Byb3ZpZGVyX3VucmVnaXN0ZXIoVUVycm9yQ29kZSAmKSB7CisgIC8vIG5vdCBzdXBwb3J0ZWQKK30KKworI2VuZGlmCisKKy8qIFBsdWdpbi0gb25seSBJQ1UgNC40KyAqLworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+IDQpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU09PTQpJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0+MykpCisjaW5jbHVkZSAidW5pY29kZS9pY3VwbHVnLmgiCisKK1VfQ0FQSSBVUGx1Z1Rva2VuUmV0dXJuIFVfRVhQT1JUMiBkYXRlX3Byb3ZpZGVyX3BsdWdpbiAoVVBsdWdEYXRhICpkYXRhLCBVUGx1Z1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKK1VfQ0FQSSBVUGx1Z1Rva2VuUmV0dXJuIFVfRVhQT1JUMiBkYXRlX3Byb3ZpZGVyX3BsdWdpbiAoVVBsdWdEYXRhICpkYXRhLCBVUGx1Z1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKyAgc3dpdGNoKHJlYXNvbikgeworICBjYXNlIFVQTFVHX1JFQVNPTl9RVUVSWToKKyAgICB1cGx1Z19zZXRQbHVnTmFtZShkYXRhLCAiRGF0ZSBQcm92aWRlciBQbHVnaW4iKTsKKyAgICB1cGx1Z19zZXRQbHVnTGV2ZWwoZGF0YSwgVVBMVUdfTEVWRUxfSElHSCk7CisgICAgYnJlYWs7CisgIGNhc2UgVVBMVUdfUkVBU09OX0xPQUQ6CisgICAgZGF0ZV9wcm92aWRlcl9yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgY2FzZSBVUExVR19SRUFTT05fVU5MT0FEOgorICAgIGRhdGVfcHJvdmlkZXJfdW5yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsgLyogbm90IGhhbmRsZWQgKi8KKyAgfQorICByZXR1cm4gVVBMVUdfVE9LRU47Cit9CisjZWxzZQorCisvKiAKKyAgIE5vdGU6IHRoaXMgSUNVIHZlcnNpb24gbXVzdCBleHBsaWNpdGx5IGNhbGwgJ2RhdGVfcHJvdmlkZXJfcGx1Z2luJworKi8KKworI2VuZGlmIC8qIHBsdWdpbiAqLworCisjZW5kaWYgLyogcHJvdmlkZXIgc2lkZSAodnMgdGFyZ2V0KSAqLwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2dsdXJlbi1ib3R0b20uaCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9nbHVyZW4tYm90dG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiZmI2OAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9nbHVyZW4tYm90dG9tLmgKQEAgLTAsMCArMSwxMiBAQAorCisjZW5kaWYKKworLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9nbHVyZW4tdG9wLmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZ2x1cmVuLXRvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjhiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZ2x1cmVuLXRvcC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9HTFVSRU5fSAorI2RlZmluZSBfR0xVUkVOX0gKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9jb2xsX2JlLmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvaW5jbHVkZS9pY3VnbHVlL2NvbGxfYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGNjN2QzCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9jb2xsX2JlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgX0NPTExfQkUKKyNkZWZpbmUgX0NPTExfQkUKKworI2luY2x1ZGUgPGljdWdsdWUvaWN1Z2x1ZS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbGwuaD4gLyogZm9yIGRlZmluaXRpb25zICovCisKKyNpZiBkZWZpbmVkKFhQX0NQTFVTUExVUykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3ZvaWQgKiBHTFVFX1NZTSh1Y29sX29wZW4pIChjb25zdCBjaGFyICpsb2NhbGUpOwordm9pZCAqIEdMVUVfU1lNKHVjb2xfY2xvc2UpICh2b2lkICpjb2xsKTsKK3ZvaWQgKiBHTFVFX1NZTSgKKworCisjaWYgZGVmaW5lZChYUF9DUExVU1BMVVMpIAorfQorI2VuZGlmCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvY29sbF9mZS5oIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9jb2xsX2ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmMmY4NQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvY29sbF9mZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9DT0xMX0ZFCisjZGVmaW5lIF9DT0xMX0ZFCisKKyNpbmNsdWRlIDxpY3VnbHVlL2ljdWdsdWUuaD4KKyNpbmNsdWRlIDx1bmljb2RlL2NvbGwuaD4KKworI2lmIGRlZmluZWQoWFBfQ1BMVVNQTFVTKQorCitjbGFzcyBHTFVFX1NZTSggR2x1ZUZFQ29sbGF0b3IgKSA6IHB1YmxpYyBDb2xsYXRvciB7CisKK307CisKKyNlbmRpZiAvKiBYUF9DUExVU1BMVVMgKi8KKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9mZV92ZXJsaXN0LmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvaW5jbHVkZS9pY3VnbHVlL2ZlX3Zlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI3M2MzCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9mZV92ZXJsaXN0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8qKgorICogUHVycG9zZTogY3JlYXRlIGxvY2FsIG9yIHN0YXRpYyBmZV92ZXJsaXN0IHN1Y2ggYXM6CisgKiAKKyAqICAgY29uc3QgY2hhciAqZmVfdmVybGlzdFtdID0geyAiNF8yIiwgIjRfMl8zIiwgLi4uLCBOVUxMIH07IAorICovCisKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKworY29uc3QgY2hhciAqZmVfdmVybGlzdFtdID0geyAKKyNkZWZpbmUgR0xVRV9WRVIoeCkgICN4ICAsCisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorI3VuZGVmIEdMVUVfVkVSCisgICAgTlVMTAorfTsKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9pY3VnbHVlLmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvaW5jbHVkZS9pY3VnbHVlL2ljdWdsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ4NTYxCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9pY3VnbHVlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBfSUNVR0xVRV9ICisjZGVmaW5lIF9JQ1VHTFVFX0gKKworLyogR2V0IHV0eXBlcy5oIGZyb20gd2hhdGV2ZXIgSUNVIHdlIGFyZSB1bmRlciAqLworI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CisKKyNkZWZpbmUgR0xVRV9TWU1fVih4LCB2KSBnbHVlICMjIHggIyMgdgorCisvKioKKyAqIGhvdyB0byBwYXJzZSBhIHZlcnNpb24gc3RyaW5nLgorICogb2xkOiAgM182X1gsIDNfOF9YLCA0XzRfWCwgNF84X1gKKyAqIG5ldzogIDQ5X1gsIDUwX1gsIDUxX1gsIC4uLgorICoKKyAqIGV4YW1wbGUgdXNlOgorICogIGNoYXIgKnN0ciA9ICI1MF8wXzAiLCBzdHIxPSI0OV8xXzIiLHN0cjI9IjRfOF8xXzEiOworICogIGlmKElTX09MRF9WRVJTSU9OKHN0cikpIHsKKyAqICAgIG1haiA9IHN0cltPTERfVkVSU1RSX01BSl07CisgKiAgICBtaW4gPSBzdHJbT0xEX1ZFUlNUUl9NSU5dOworICogIH0gZWxzZSB7CisgKiAgICBtYWogPSBzdHJbTkVXX1ZFUlNUUl9NQUpdOworICogICAgbWluID0gc3RyW05FV19WRVJTVFJfTUlOXTsKKyAqICB9CisgKi8KKyNkZWZpbmUgSVNfT0xEX1ZFUlNUUih4KSAoKHhbMF08JzQnKSB8fCAoKHhbMF09PSc0JykgJiYgKHhbMl08JzknKSAmJiAoeFsyXT49JzAnKSkpCisjZGVmaW5lIE9MRF9WRVJTVFJfTUFKIDAgCisjZGVmaW5lIE9MRF9WRVJTVFJfTUlOIDIKKyNkZWZpbmUgTkVXX1ZFUlNUUl9NQUogMAorI2RlZmluZSBORVdfVkVSU1RSX01JTiAxCisKKy8qKgorICogY29weSB2ZXJzaW9uIGludG8gZHN0WzBdIGFuZCBkc3RbMV0KKyAqIGRvZXMgbm90IG1vZGlmeSBkc3QgcHRyCisgKi8KKyNkZWZpbmUgQ1BZX1ZFUlNUUihkc3QsdmVyKSBpZihJU19PTERfVkVSU1RSKHZlcikpIFwKKyAgICB7IFwKKyAgICAgIChkc3QpWzBdPXZlcltPTERfVkVSU1RSX01BSl07ICAgICAgICAgICAgICBcCisgICAgICAoZHN0KVsxXT12ZXJbT0xEX1ZFUlNUUl9NSU5dOyAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChkc3QpWzBdPXZlcltORVdfVkVSU1RSX01BSl07ICAgICAgIFwKKyAgICAgIChkc3QpWzFdPXZlcltORVdfVkVSU1RSX01JTl07ICAgICAgICAgICAgIFwKKyAgICB9CisKKy8qKgorICogY29tcGFyZSBhIHZlcnN0ciB0byBhIHN0cmluZworICogQHBhcmFtIHN0ciBhIDIgY2hhciBzdHJpbmcgc3VjaCBhcyAiNTAiLCAiNDQiLCAiNDkiCisgKiBAcGFyYW0gdmVyIGEgdmVyc3RyIHN1Y2ggYXMgIjUwXzBfMiIsICI0XzhfMV8xIiwgZXRjCisgKiBAcmV0dXJuIHRydWUgb3IgZmFsc2UKKyAqLworCisjZGVmaW5lIENNUF9WRVJTVFIoc3RyLHZlcikgXAorICAoIChJU19PTERfVkVSU1RSKHZlcikpID8gXAorICAgICAoIFwKKyAgICAgIChzdHIpWzBdPT12ZXJbT0xEX1ZFUlNUUl9NQUpdICYmICAgICAgICAgICAgICBcCisgICAgICAoc3RyKVsxXT09dmVyW09MRF9WRVJTVFJfTUlOXSBcCisgICAgICk6KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoc3RyKVswXT09dmVyW05FV19WRVJTVFJfTUFKXSYmICAgICAgIFwKKyAgICAgIChzdHIpWzFdPT12ZXJbTkVXX1ZFUlNUUl9NSU5dICAgICAgICAgICAgIFwKKyAgICAgKSBcCisgICApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL29pY3UuaCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9vaWN1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZmIwNgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9vaWN1LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgX09JQ1UKKyNkZWZpbmUgX09JQ1UKKworI2luY2x1ZGUgInVuaWNvZGUvdWNsZWFuLmgiCisvKioKKyAgIHVjbGVhbi5oCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK09JQ1VfdV9pbml0KFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2wuaCIKKy8qKgorIHVjb2wuaAorKi8KK1VfU1RBQkxFIFVDb2xsYXRvciogVV9FWFBPUlQyIAorT0lDVV91Y29sX29wZW4oY29uc3QgY2hhciAqbG9jLCBVRXJyb3JDb2RlJiBzdGF0dXMpOworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgorT0lDVV91Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZyhjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9jbG9zZShVQ29sbGF0b3IqKTsKKworVV9TVEFCTEUgVUNvbGxhdGlvblJlc3VsdCBPSUNVX3Vjb2xfc3RyY29sbAkoCWNvbnN0IFVDb2xsYXRvciAqIAljb2xsLAorY29uc3QgVUNoYXIgKiAJc291cmNlLAoraW50MzJfdCAJc291cmNlTGVuZ3RoLAorY29uc3QgVUNoYXIgKiAJdGFyZ2V0LAoraW50MzJfdCAJdGFyZ2V0TGVuZ3RoCSAKKyk7CisKK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAorT0lDVV91Y29sX3NldFN0cmVuZ3RoKGNvbnN0IFVDb2xsYXRvciAqLCBVQ29sbGF0aW9uU3RyZW5ndGggKTsKKworCisjaWZuZGVmIE9JQ1VfdWNvbF9nZXRBdmFpbGFibGUKKyNlcnJvciBPSUNVX3Vjb2xfZ2V0QXZhaWxhYmxlIG5vdCBmb3VuZCAtIHVyZW5hbWUgc3ltYm9sIG1pc21hdGNoPworI2VuZGlmCisKK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIgCitPSUNVX3Vjb2xfZ2V0QXZhaWxhYmxlKGludDMyX3QgaSk7CisKK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAorT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisKKworVV9TVEFCTEUgVUNvbGxhdGlvblN0cmVuZ3RoIFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9nZXRTdHJlbmd0aChVQ29sbGF0b3IgKmNvbCk7CisKK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAorT0lDVV91Y29sX2dldFNvcnRLZXkoY29uc3QgICAgVUNvbGxhdG9yICAgICpjb2xsLAorICAgICAgICBjb25zdCAgICBVQ2hhciAgICAgICAgKnNvdXJjZSwKKyAgICAgICAgaW50MzJfdCAgICAgICAgc291cmNlTGVuZ3RoLAorICAgICAgICB1aW50OF90ICAgICAgICAqcmVzdWx0LAorICAgICAgICBpbnQzMl90ICAgICAgICByZXN1bHRMZW5ndGgpOworCisKK1VfU1RBQkxFIFVDb2xsYXRvciogVV9FWFBPUlQyIAorT0lDVV91Y29sX3NhZmVDbG9uZShjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgKnN0YWNrQnVmZmVyLAorICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworI2luY2x1ZGUgInVuaWNvZGUvdWRhdC5oIgorVV9TVEFCTEUgVURhdGVGb3JtYXQqIFVfRVhQT1JUMiAKK09JQ1VfdWRhdF9vcGVuKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIgCitPSUNVX3VkYXRfZ2V0QXZhaWxhYmxlKGludDMyX3QgaSk7CisKK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAorT0lDVV91ZGF0X2NvdW50QXZhaWxhYmxlKCk7CisKKworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCitPSUNVX3VkYXRfY2xvc2UoVURhdGVGb3JtYXQqIGZvcm1hdCk7CisKK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAorT0lDVV91ZGF0X2Zvcm1hdCggICAgY29uc3QgICAgVURhdGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlICAgICAgICAgICBkYXRlVG9Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVGaWVsZFBvc2l0aW9uKiBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMpOworCisKKworLyoqCisgZW5kIHVjb2wuaAorKi8KKworI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgorCitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK09JQ1VfdWNhbF9vcGVuKGNvbnN0IFVDaGFyKiAgIHpvbmVJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICBsZW4sCisgICAgICAgICAgY29uc3QgY2hhciogICAgbG9jYWxlLAorICAgICAgICAgIFVDYWxlbmRhclR5cGUgIHR5cGUsCisgICAgICAgICAgVUVycm9yQ29kZSogICAgc3RhdHVzKTsKKworLyoqCisgKiBDbG9zZSBhIFVDYWxlbmRhci4KKyAqIE9uY2UgY2xvc2VkLCBhIFVDYWxlbmRhciBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gY2xvc2UuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCitPSUNVX3VjYWxfY2xvc2UoVUNhbGVuZGFyICpjYWwpOworCisKK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAorT0lDVV91Y2FsX2dldEF0dHJpYnV0ZShjb25zdCBVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0dHJpYnV0ZSAgYXR0cik7CisKKworLy8gZGVmaW5lIHZlcnNpb24KKworI2VuZGlmCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2ljdS1jb25maWcuc2VkIGIvbXVsdGkvcHJvai9wcm92aWRlci9pY3UtY29uZmlnLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlmZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9pY3UtY29uZmlnLnNlZApAQCAtMCwwICsxLDQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgbXVuZ2UKK3MlXnNhbml0eSQlIyBzYW5pdHkgZGlzYWJsZWQuJQorCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2ljdTJzeW12ZXIuc2ggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2ljdTJzeW12ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2NhNDMxMQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvaWN1MnN5bXZlci5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUFJFNDQ9MAorCisjIG91dHB1dCA0XzAgaW5zdGVhZCBvZiA0MAoraWYgWyAiJDEiID09ICItLXByZTQ0c3ltIiBdOwordGhlbgorICAgIFBSRTQ0PTEKKyAgICBzaGlmdAorZmkKKworSU5WRVI9IjAuMCIKK2lmIFsgJCMgLWVxIDAgXTsKK3RoZW4KKyAgICByZWFkIElOVkVSCitlbGlmIFsgJCMgLWVxIDEgXTsKK3RoZW4KKyAgICBJTlZFUj0kMQorZWxzZQorICAgIGVjaG8gIiQwOiBlcnJvcjogcmVxdWlyZSBvbmUgb3IgemVybyBhcmd1bWVudHMuIElmIHplcm8sIHJlYWQgZnJvbSBzdGRpbiIgPiYyCisgICAgZXhpdCAxCitmaQorCitVTkQ9YGVjaG8gJHtJTlZFUn0gfCB0ciAnLicgJ18nYAorTUFKMD1gZWNobyAke1VORH0gfCBjdXQgLWRfIC1mMWAKK01JTjE9YGVjaG8gJHtVTkR9IHwgY3V0IC1kXyAtZjJgCitpZiBbICR7TUFKMH0gLWx0IDQ5IF07Cit0aGVuCisgICAgaWYgWyAke1BSRTQ0fSAtZXEgMCBdOworICAgIHRoZW4KKyAgICAgICAgIyBwcmUgNTA6ICBwYXN0ZSB0b2dldGhlciAiNCIgYW5kICI4IiB0byBnZXQgNDgKKyAgICAgICAgZWNobyAtbiAiJHtNQUowfSR7TUlOMX0iCisgICAgZWxzZQorICAgICAgICAjIHByZSA1MDogNF84CisgICAgICAgIGVjaG8gLW4gIiR7TUFKMH1fJHtNSU4xfSIKKyAgICBmaQorZWxzZQorICAgICMgcG9zdCA1MDogIGp1c3QgdXNlIHRoZSBmaXJzdCAjCisgICAgZWNobyAtbiAiJHtNQUowfSIKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9tYWtlZ2x1cmVuLnNoIGIvbXVsdGkvcHJvai9wcm92aWRlci9tYWtlZ2x1cmVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiM2RlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL21ha2VnbHVyZW4uc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisjICRACitPVVQ9JDEKK3NoaWZ0CisjICQqCitWRVI9JDEKK3NoaWZ0CisKK1RJTlk9YC4vaWN1MnN5bXZlci5zaCAkVkVSYAorT0xEU1lNPWAuL2ljdTJzeW12ZXIuc2ggLS1wcmU0NHN5bSAkVkVSYAorCitlY2hvICIkMDogQnVpbGRpbmcgJHtPVVR9IGZvciAke1RJTll9IC0tLS0tLS0gIiA+JjIKK2VjaG8gIm9sZHN5bSA9ICR7T0xEU1lNfSIKKyNzZXQgLXggCitVUkVOQU1FPSR7U1JDfS8ke1ZFUn0vJHtTT1VSQ0V9L2NvbW1vbi91bmljb2RlL3VyZW5hbWUuaAorKAorICAgIGNhdCAke0dMVUV9L2dsdXJlbi10b3AuaAorICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBmcm9tICR7VVJFTkFNRX0gYnkgJHswfSAqLyIKKyAgICBlY2hvICIjZGVmaW5lIEdMVVJFTl9WRVIiICR7VElOWX0KKyAgICBlY2hvICIjZGVmaW5lIEdMVVJFTl9USU5ZIiAke1RJTll9CisgICAgZWNobworICAgIGVjaG8gJy8qIG9sZCBzdHlsZSAoPDQuNCkqLycKKyAgICBncmVwICJeI2RlZmluZS4qJHtPTERTWU19JCIgJHtVUkVOQU1FfSAgIHwgZmdyZXAgLXYgJyonIHwgc2VkIC1lICJzQF4jZGVmaW5lIFwoW14gXSpcKSBcKFteIF0qXClAI2RlZmluZSBPSUNVX1wxIFwyQCIKKyAgICBlY2hvICcvKiBuZXcgc3R5bGUgKDQuNCspICovJworICAgIGZncmVwICIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKCIgJHtVUkVOQU1FfSB8IHNlZCAtZSAic0BeI2RlZmluZSBcKFteIF0qXCkgLipAI2RlZmluZSBPSUNVX1wxIFwxXyR7VElOWX1AIgorICAgIGNhdCAke0dMVUV9L2dsdXJlbi1ib3R0b20uaAorKSB8CisgICAgY2F0ID4gJHtPVVR9CisjICAgIHRlZSAke09VVH0KKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9yZWFkbWUudHh0IGIvbXVsdGkvcHJvai9wcm92aWRlci9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlN2QzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL3JlYWRtZS50eHQKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9jYXQKKyMgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworIyBJQ1UgUHJvdmlkZXIgRmVhdHVyZS4gLSAkSWQkCisKKyogTm90ZSwgYXMgb2YgSUNVNDkgdGhpcyBpcyBhIHRlY2hub2xvZ3kgcHJldmlldy4KKworQlVJTERJTkc6CisKKzFhLiBEb3dubG9hZCB0aGUgSUNVIHNvdXJjZSAoLnRneikgeW91IHdpc2ggdG8gVEFSR0VUIChpLmUuIGxpbmsgeW91cgorYXBwbGljYXRpb24gYWdhaW5zdCkuICBUaGlzIG11c3QgYmUgdGhlIElDVTQ5IGJyYW5jaAoraHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2ljdS9icmFuY2hlcy9zcmwvdWNvbDgxNTcgYXQKK3RoaXMgd3JpdGluZy4KKworMWIuIERvd25sb2FkIG9uZSBvciBtb3JlIElDVXMgKC50Z3opIHlvdSB3aXNoIHRvIGhhdmUgQVZBSUxBQkxFICh2aWEKK3RoZSBwcm92aWRlciBpbnRlcmZhY2UpLiAgQXMgb2YgdGhpcyB3cml0aW5nLCA0OSwgNC44LjEuMSwgNC42LngsIDQuNC54LCA0LjIuMC4xLCAzLjguMSwgMy42LCAzLjQuMSwgYW5kIDMuMi4xIGhhdmUgYmVlbiB0ZXN0ZWQuCisKKyAgIE5vdGUgdGhhdCB0aGUgTUFKT1IrTUlOT1IgdmVyc2lvbiBudW1iZXJzIG11c3Qgbm90IGNvbmZsaWN0IGJldHdlZW4gdGhlIFRBUkdFVCAgYW5kIEFWQUlMQUJMRSBJQ1VzLiBPbmx5IG9uZSBJQ1Ugb2YgZWFjaCBtYWpvcittaW5vciBpcyBhbGxvd2VkLiAKKyAgIFNvLCBvbmx5IG9uZSA0LjQuWCwgb25lIDMuOC5YLCBldGMuICBUaGlzIGlzIGR1ZSB0byBJQ1UgYmluYXJ5IGNvbXBhdGliaWxpdHkgcnVsZXMuCisKKworMWMuIENvcHkgdGhlIElDVXMgKG5hbWVkIGFzIHRoZXkgd2VyZSBkb3dubG9hZGVkKSBpbnRvIHRoZSAuLi8uLi9wYWNrYWdlcy8gZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoaXMgcmVhZG1lLgorCisyYS4gQ29weSB0aGUgZmlsZSAiTWFrZWZpbGUubG9jYWwtc2FtcGxlIiBpbnRvIGEgbmV3IGZpbGUgIk1ha2VmaWxlLmxvY2FsIi4KKworMmIuIEVkaXQgdGhlIE1ha2VmaWxlLmxvY2FsIHRvIG1vZGlmeSB0aGUgUFJPVklERVJfVEFSR0VUIGFuZAorUFJPVklERVJfQVZBSUxBQkxFIHNldHRpbmdzLgorCisgICBOb3RlIHRoYXQgaWYgeW91IGhhdmUgYSBzcGVjaWFsIGluc3RhbGxhdGlvbiBvZiB0aGUgY3VycmVudCBJQ1UKKyAgIChJQ1UgNDkpIHRoYXQgeW91IHdhbnQgdG8gYmUgdGhlIHRhcmdldCwgeW91IGNhbiBzZXQgUExVR0xJQl9JTlNUCisgICB0byB0aGUgaW5zdGFsbGVkIElDVSBwYXRoLiBZb3UgbXVzdCBzdGlsbCBzZXQgUFJPVklERVJfVEFSR0VULgorCiszLiBDaGVjayB0aGUgbWFrZWZpbGUgc2V0dGluZ3MgYnkgcnVubmluZyAnbWFrZSBpbmZvJywgeW91IHNob3VsZCBzZWUgb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworICAgSUNVIFByb3ZpZGVyIEJ1aWxkCisgVGFyZ2V0dGluZyBQcm92aWRlciBhZ2FpbnN0IElDVSA0OSAoNDksIG1ham9yIDQ5KQorICBBdmFpbGFibGUgcGx1Z2luczogMy44LjEgNC4yLjAuMSAgKDNfOF8xIDRfMl8wXzEpCisgICBBdmFpbGFibGUga2V5d29yZHM6CisgICAgICAuLi5AcHJvdmlkZXI9aWN1MzgKKyAgICAgIC4uLkBwcm92aWRlcj1pY3U0MgorICAgUGx1Z2luIGxpYnJhcnkgd2lsbCBiZSBsaWJpY3Vwcm92LjQ5LnNvCisKKyAgIEF2YWlsYWJsZSBJQ1UgdGFyYmFsbHM6IGljdTRjLTNfOF8xLXNyYy50Z3ogaWN1NGMtNF8yXzBfMS1zcmMudGd6IGljdTRjLTRfNF8yLXNyYy50Z3ogCisgICBBdmFpbGFibGUgSUNVIHZlcnNpb25zOiAzLjguMSA0LjIuMC4xIDQuNC4yIAorCisKKyBUaGUgbGFzdCB0d28gbGluZXMgc2hvdyB3aGljaCBJQ1UgLnRneiBmaWxlcyBhcmUgYXZhaWxhYmxlLiBJZiBhIHZlcnNpb24gaXMgbm90IGxpc3RlZCwgbWFrZSBzdXJlIHRoZSBmaWxlbmFtZSBpcyBhcyBhYm92ZS4KKworNC4gTm93LCB5b3UgYXJlIHJlYWR5IHRvIGJ1aWxkIGFuZCB0ZXN0LgorCisoTm90ZTogeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlcyBDQywgQ1hYLCBDWFhGTEFHUywgYW5kIENGTEFHUyB0byBzZXQKK3RoZSBjb21waWxlciBvcHRpb25zLiApCisKKyAgICAgbWFrZSBjaGVjaworCisgICBUaGlzIHdpbGwgdGFrZSBxdWl0ZSBhIHdoaWxlIGFzIGl0IGhhcyB0byBidWlsZCBOIGNvcGllcyBvZiBJQ1UuCisKKyAgIFdoZW4gZG9uZSwgaXQgc2hvdWxkIHNob3cgYSBsaXN0IG9mIGNvbGxhdGlvbiBrZXlzLCBhbmQgaW5kaWNhdGUgdGhhdCB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzIGJldHdlZW4gSUNVIDMuOCwgNC40LCA0LjIuICAgWW91IG1heSBuZWVkIHRvIG1vZGlmeSBjb2xkaWZmLmNwcCBpZiB5b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IHNldCBvZiBJQ1UgdmVyc2lvbnMuCisKKzUuIFlvdSBjYW4gdGVzdCBpbiBhbiAnaW5zdGFsbGVkJyBJQ1UgKG5vdCB0aGUgc3lzdGVtIGluc3RhbGwpIHdpdGggdGhpcyBjb21tYW5kOgorCisgICAgICBtYWtlIGluc3RhbGwtY2hlY2sKKworREVQTE9ZSU5HOgorCis2LiAgVG8gaW5zdGFsbCB0aGUgcGx1Z2luIGluIHlvdXIgb3duIElDVSwgY29weSAgb3V0L2ljdXBsdWdpbnM0NC50eHQgaW50byB5b3VyIGxpYi9pY3UsICBhbmQgb3V0L2xpYi9saWJpY3Vwcm92LjQ0LnNvIGludG8geW91ciBsaWIvIGRpcmVjdG9yaWVzIHdoZXJlIElDVSBpcyBpbnN0YWxsZWQuIAorCisgTm90ZSB0aGF0IHJ1bm5pbmcgJ2ljdWluZm8nIHdpbGwgdGVsbCB5b3Ugd2hlcmUgdGhlIHBsdWdpbiBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGxvY2F0ZWQsIGFuZCAnaWN1aW5mbyAtTCcgd2lsbCBkZWJ1ZyBhbnkgbG9hZCBpc3N1ZXMuCisKK1VTSU5HOgorCitDb2xsYXRvcnMgb3BlbmVkIHdpdGggYW4gaWQgc3VjaCBhcyB0aGF0IHNob3duIGluICdtYWtlIGluZm8nLCBzdWNoIGFzICAnZW5fVVNAcHJvdmlkZXI9aWN1MzgnIHdpbGwgbG9hZCwgZm9yIGV4YW1wbGUsIGFuIElDVSAzLjggY29sbGF0b3IuCisKK0RhdGUgRm9ybWF0cyBvcGVuZWQgKHVkYXRfb3Blbikgd2lsbCBhbHNvIGxvYWQgYSBkaWZmZXJlbnQgZGF0ZQorZm9ybWF0LCBidXQgb25seSB0aHJvdWdoICd1ZGF0X29wZW4nLgorCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RIRU9SWSAoSU5URVJOQUwgVVNFIE9OTFkhKQorCitGb3IgZGlzY3Vzc2lvbjogIGFzc3VtZSBUQVJHRVQgNTAuMC4yIGFuZCBQUk9WSURFUiA0LjAuMQorCitpLiBHRU5FUkFMCisKKyBUaGUgImZyb250IGVuZCIgZm9yIGVhY2ggbW9kdWxlIChkYXRlLCBjb2xsYXRvciwgLi4pICBpcyBidWlsdCBvbmNlIGZvciB0aGUgdGFyZ2V0IHZlcnNpb24sIGFuZCB0aGUgImJhY2sgZW5kIiBnbHVlIGlzIGJ1aWx0IG9uY2UgZm9yIGVhY2ggcHJvdmlkZXIgdmVyc2lvbi4gIChUT0RPOiBmaXggd29yZGluZyBoZXJlLikKKworIFRoZSBvaWN1LmggaGVhZGVyLCBjb21iaW5lZCB3aXRoIHRoZSBnZW5lcmF0ZWQgZ2x1cmVuLmgsIHByb3ZpZGVzIGEgInJlbmFtZWQiIHN5bWJvbCBzdWNoIGFzIChsaXRlcmFsbHkpIE9JQ1VfdWNvbF9zdHJjb2xsIHdoaWNoIGlzICNkZWZpbmVkICB0byBzb21lIHNwZWNpZmljIHZlcnNpb24sIHN1Y2ggYXMgdWNvbF9zdHJjb2xsXzRfMC4gIFNvLCB5b3UgY2FuIGNhbGwgdGhlIE9JQ1VfIHZlcnNpb24gbWVhbmluZyAiT2xkIElDVSIuIFRodXMsIHlvdSBoYXZlIHRoZSBJQ1UgNC4wIGZ1bmN0aW9uIGRlZmluZWQgYXMgYW4gZXh0ZXJuLCBieSBpdHMgZXhwbGljaXQgbmFtZSwgd2l0aGluIHRoZSBJQ1UgNTAgc3BhY2UuIAorCisgVGhlIGljdWdsdWUvZ2x2ZXIuaCBoZWFkZXIgZmlsZSBjb250YWlucyBtdWx0aXBsZSBjYWxscyB0bywgZm9yIGV4YW1wbGUsIEdMVUVfVkVSKDRfMF8xKSAgR0xVRV9WRVIoNDlfMV8yKSAuLi4gICAKKyBBIG1vZHVsZSBjYW4gcmVkZWZpbmUgR0xVRV9WRVIgIGluIG9yZGVyIHRvIGRvIHNvbWUgImVhY2gtdmVyc2lvbiIgcHJvY2Vzcy4gIFRodXMsIGdsdmVyLmggY2FuIGJlICNpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcy4uCisKKyBHZW5lcmFsbHksIGEgbG9jYWxlIHN1Y2ggYXMgZW5fVVNAc3A9aWN1NDAgIHdpbGwgcmVmZXIgdG8gYW4gSUNVIDQuMCAgcHJvdmlkZXIuCisKKyBUaGVyZSBhcmUgbG90cyBvZiB2ZXJzaW9uLXNwZWNpZmljICNpZmRlZnMgdXNlZCB0byBkZWFsIHdpdGggdGhlIHZhZ2FyaWVzIG9mIGEgZGVjYWRlIG9mIElDVSBjaGFuZ2VzLgorCitpaS4gQ09MTEFUT1JTCisKKyBGb3IgZWFjaCBiYWNrIGVuZCwgdGhlcmUncyBhbiBpY3VfNTA6OkNvbGxhdG9yIGNsYXNzIG5hbWVkLCBzYXksIGdsdWVDb2xsYXRvcjRfMF8xIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIHRoZSBUQVJHRVQgc3BhY2UuIEhvd2V2ZXIsIGVhY2ggZnVuY3Rpb24gb2YgdGhpcyBjbGFzcywgc3VjaCBhcyAiY29tcGFyZSIsIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcsIGZvciBleGFtcGxlLCAgT0lDVV91Y29sX3N0cmNvbGwuICBBcyBub3RlZCBhYm92ZSwgdGhpcyBpcyBkaXJlY3RseSBjYWxsaW5nIHVjb2xfc3RyY29sbF80XzAuIFRoaXMgaXMgd2hlcmUgdGhlIGNyb3NzLXZlcnNpb24gY2FsbHMgaGFwcGVuLiAgU3VjaCBnbHVlIGNvZGUgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgbm90IHRvLCBmb3IgZXhhbXBsZSwgIGNhbGwgdWNvbF9vcGVuXzRfMCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIHVjb2xfY2xvc2VfNTAgISAKKworIFRoZSBGRSBidWlsZHMgYSBDb2xsYXRvckZhY3Rvcnkgc3ViY2xhc3MsIFZlcnNpb25Db2xsYXRvckZhY3RvcnkuICBJdCByZWdpc3RlcnMgYSBjb2xsYXRvciBmb3IgZXZlcnkgbG9jYWxlaWQgaXQgY2FuIHN1cHBvcnQuIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGVhY2ggZ2x1ZUNvbGxhdG9yKiBzdWJjbGFzcydzIHN0YXRpYyA6OmNvdW50QXZhaWxhYmxlIGFuZCBhcHBlbmRBdmFpbGFibGUgZnVuY3Rpb25zIGRpcmVjdGx5LiAKKworIFRoZSBwbHVnaW4gc2ltcGx5IHJlZ2lzdGVycyBhbmQgdW5yZWdpc3RlcnMgdGhlIFZDRi4gU3VjaCBjb2xsYXRvcnMgYXJlIGF2YWlsYWJsZSB0byBib3RoIEMrKyBhbmQgQyBBUEksIGluY2x1ZGluZyB0aGUgc2hvcnRzdHJpbmcgaW50ZXJmYWNlLCB1c2luZyB0aGUgX1BJQ1UjIyBzaG9ydCBzdHJpbmcgdGFnLgorCitpaWkuIERBVEUgRk9STUFUVEVSUworCisgRGF0ZSBmb3JtYXR0ZXJzIHdvcmsgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gY29sbGF0b3JzLiAgRGF0ZUZvcm1hdCBzdWJjbGFzc2VzIGFyZSByZWdpc3RlcmVkIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBPSUNVX3VkYXRfKiBmdW5jdGlvbnMuIEEgIkRhdGVGb3JtYXRPcGVuZXIiIChmYWN0b3J5IGVxdWl2YWxlbnQpIGlzIHJlZ2lzdGVyZWQgdG8gYWxsb3cgdWRhdF9vcGVuIHRvIHByb2Nlc3MgY29ycmVjdGx5LiBDKysgZGF0ZSBmb3JtYXQgcmVnaXN0cmF0aW9uIGlzIG5vdCBhZGRyZXNzZWQgYXMgb2YgdGhpcyB3cml0aW5nLgorCisKZGlmZiAtLWdpdCBhL211bHRpL3JlYWRtZS50eHQgYi9tdWx0aS9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2I3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9jYXQKKyMgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKworCitOT1RFOgorTk9URTogRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSAnUHJvdmlkZXInIGZlYXR1cmUsIHNlZSBwcm9qL3Byb3ZpZGVyL3JlYWRtZS50eHQKK05PVEU6CisKKworCisgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcGllY2VzIG9mIHRoZSAnTXVsdGlJY3UnIGZlYXR1cmUsIHdoaWNoIGNvbnRhaW5zCitzY3JpcHRzIGZvciBidWlsZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBJQ1UgYXQgdGhlIHNhbWUgdGltZSwgYW5kIHJ1bm5pbmcKK3ZhcmlvdXMgcGllY2VzIG9mIGNvZGUgYWdhaW5zdCBpdC4KKworIE5vdGUsIGlmIHlvdSBjb3B5IG9uZSBvZiB0aGVzZSBwcm9qZWN0cyBvdXRzaWRlIHRoZSBtdWx0aS8gZGlyZWN0b3J5LAoreW91IG11c3QgZW5zdXJlIHRoYXQgdGhlICdNVUxUSUlDVV9ST09UJyB2YXJpYWJsZSBpbiBidWlsZCBzY3JpcHRzIHBvaW50cwordG8gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkgaGVyZSwgJ211bHRpLycuCisKKyBtdWx0aS8gICAgICAgICAgICAgICggWW91IGFyZSBIZXJlICkKKyBtdWx0aS9wYWNrYWdlcy8gICAgIC50Z3ogYW5kIC5qYXIgZmlsZXMgZm9yIEMgYW5kIEogcmVzcGVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIHRoZSByZWFkbWUgaW4gdGhhdCBkaXJlY3RvcnkpCisgbXVsdGkvYy8gICAgICAgICAgICBTY3JpcHRzIGZvciBidWlsZGluZyBhZ2FpbnN0IElDVTRDCisgbXVsdGkvYy9wYXRjaC8gICAgICAgICBQYXRjaGVzIGZvciBidWlsZGluZyBvbGQgSUNVIHZlcnNpb25zCisgCisgbXVsdGkvY29tbW9uLyAgICAgICBDb21tb24gbWFrZWZpbGVzCisKKyBtdWx0aS9qLyAgICAgICAgICAgIFNjcmlwdHMgZm9yIGJ1aWxkaW5nIGFnYWluc3QgSUNVNEoKKworIG11bHRpL3RtcC8gICAgICAgICAgVGVtcG9yYXJ5IGRpcmVjdG9yeSwgY29udGFpbnMgaW50ZXJtZWRpYXRlIGJ1aWxkcworIG11bHRpL3RtcC9zcmMvICAgICAgICAgVW5wYWNrZWQgYW5kIHBhdGNoZWQgc291cmNlCisgbXVsdGkvdG1wL2J1aWxkLyAgICAgICBCdWlsdCBJQ1VzCisgbXVsdGkvdG1wL2luc3QvICAgICAgICBJbnN0YWxsZWQgSUNVcworCisgbXVsdGkvcHJvai8gICAgICAgICBDb250YWlucyB2YXJpb3VzIHByb2plY3RzIHdoaWNoIG1ha2UgdXNlIG9mIG11bHRpLWljdS4KKyAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBpbmRpdmlkdWFsIHJlYWRtZXMgdW5kZXIgZWFjaCBwcm9qZWN0LikKKyBtdWx0aS9wcm9qL2NoZWxsby8gIEMgImhlbGxvIHdvcmxkIiBhZ2FpbnN0IG11bHRpcGxlIElDVXMKKyBtdWx0aS9wcm9qL2poZWxsby8gIEogImhlbGxvIHdvcmxkIiBhZ2FpbnN0IG11bHRpcGxlIElDVXMKKworLS0KK0hPVyBUTyBVU0UKKworMS4gQ29weSBzb21lIElDVSBzb3VyY2UgZmlsZXMgaW50byBtdWx0aS9wYWNrYWdlcy8KKworMi4gaW4gIm11bHRpL2MiICBydW4gIm1ha2UgaWljdXMiIC0gdGhpcyB3aWxsIHRha2UgYSB3aGlsZS4KKworMy5UbyB2ZXJpZnkgdGhlIElDVSBidWlsZCwgaW4gIm11bHRpL3Byb2ovY2hlbGxvIiwgIHJ1biAibWFrZSBjaGVjayIuCisKKyAgIFlvdSBzaG91bGQgc2VlIG91dHB1dCBsaWtlIHRoaXM6CisKKyAgICAgICBvdXQvM184XzEudHh0OiAgSUNVIDMuOC4xCisgICAgICAgb3V0LzRfMl8wXzEudHh0OiAgSUNVIDQuMgorICAgICAgIG91dC80XzRfMS50eHQ6ICBJQ1UgNC40LjEKKworNC4gVGhlICdQcm92aWRlcicgcHJvamVjdCBpcyBtb3JlIGNvbXBsZXguIFRvIHNlZSBpdHMgaW5mb3JtYXRpb24sIHNlZQordGhlIHJlYWRtZSBpbiB0aGF0IGRpcmVjdG9yeS4gCmRpZmYgLS1naXQgYS9yZWxlYXNlL2MvYWxsTG9jYWxlVGVzdC5zaCBiL3JlbGVhc2UvYy9hbGxMb2NhbGVUZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzYTA3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2MvYWxsTG9jYWxlVGVzdC5zaApAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSUJNIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKK2VjaG8gIlRlc3RpbmcgJDEgaW4gYWxsIGxvY2FsZXMiCitvdXRmaWxlPSQxLWxvY2FsZS50eHQKK2VjaG8gIiIgPiAkb3V0ZmlsZQorZm9yIGxvYyBpbiBgbG9jYWxlIC1hYDsgZG8KK2VjaG8gTENfQUxMPSRsb2MgPj4gJG91dGZpbGUKK0xDX0FMTD0kbG9jIG1ha2UgY2hlY2sgJDIgPj4gJG91dGZpbGUgMj4mMQorZG9uZQorCitlY2hvICJEb25lIHRlc3RpbmcgJDEgaW4gYWxsIGxvY2FsZXMiCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9hbGxUaW1lem9uZVRlc3Quc2ggYi9yZWxlYXNlL2MvYWxsVGltZXpvbmVUZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyMzE0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2MvYWxsVGltZXpvbmVUZXN0LnNoCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IElCTSBBbGwgUmlnaHRzIFJlc2VydmVkCisjCitlY2hvICJUZXN0aW5nICQxIGluIGFsbCB0aW1lem9uZXMiCitvdXRmaWxlPSQxLXRpbWV6b25lLnR4dAorZWNobyAiIiA+ICRvdXRmaWxlCitmb3IgdGltZXpvbmUgaW4gYGxvY2F0ZSAvdXNyL3NoYXJlL3pvbmVpbmZvL3xmZ3JlcCAtdiAvcmlnaHQvfGZncmVwIC12IC9wb3NpeC9gOyBkbwordGltZXpvbmU9JHt0aW1lem9uZSMvdXNyL3NoYXJlL3pvbmVpbmZvL30KK2VjaG8gVFo9JHRpbWV6b25lID4+ICRvdXRmaWxlCitUWj0kdGltZXpvbmUgbWFrZSBjaGVjayAkMiA+PiAkb3V0ZmlsZSAyPiYxCitkb25lCisKK2VjaG8gIkRvbmUgdGVzdGluZyAkMSBpbiBhbGwgdGltZXpvbmVzIgorCmRpZmYgLS1naXQgYS9yZWxlYXNlL2MvYm9tZml4LnB5IGIvcmVsZWFzZS9jL2JvbWZpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNkNzlhCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL2JvbWZpeC5weQpAQCAtMCwwICsxLDg4IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgUnVuIHRoaXMgbGlrZSBzbzoKKyMgIGNkIC9wYXRoL3RvL0lDVQorIyAgcHl0aG9uIC9wYXRoL3RvL3RoaXNzY3JpcHQvYm9tZml4LnB5CisjCisjIGl0IHdpbGwgZml4dXAgYW55IGZpbGVzIHRoYXQgaGF2ZSBhIG1pbWUtdHlwZSBvZiAidXRmLTgiIGJ1dCBubyBCT00uCisKK2ltcG9ydCBvcworaW1wb3J0IHN2bi5jb3JlLCBzdm4uY2xpZW50LCBzdm4ud2MKK2ltcG9ydCBjb2RlY3MKKworCitwcmludCAiRml4aW5nIGJvbSBpbiAuXG4iCisKK2N0eCA9IHN2bi5jbGllbnQuc3ZuX2NsaWVudF9jdHhfdCgpCisKK3RyZWUgPSBvcy53YWxrKCIuIikKKworbm90cz0wCitub3R1dGY4PTAKK25vcHJvcHM9MAordXRmOD0wCitmaXhlZD0wCit0ZmlsZXM9MAorYm9tPWNvZGVjcy5CT01fVVRGOAorCisKK2ZvciBlbnQgaW4gdHJlZToKKyAgICAocGF0aCxkaXJzLGZpbGVzKSA9IGVudAorICAgIGlmKHBhdGguZmluZCgiLy5zdm4iKSAhPSAtMSk6CisgICAgICAgIGNvbnRpbnVlCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIHRmaWxlcz10ZmlsZXMrMQorICAgICAgICByZXZpc2lvbiA9IHN2bi5jb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgICAgIGZwID0gb3MucGF0aC5hYnNwYXRoKHBhdGggKyAiLyIgKyBmaWxlKQorICAgICAgICAjcHJpbnQgInRlc3RpbmcgIiArIGZwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb3BzID0gc3ZuLmNsaWVudC5wcm9wZ2V0KCJzdm46bWltZS10eXBlIiwgZnAsIHJldmlzaW9uLCAwLCBjdHgpCisgICAgICAgICAgICBpZiAobm90IHByb3BzIG9yIG5vdCBwcm9wc1tmcF0pOiAKKyAgICAgICAgICAgICAgICBub3Byb3BzID0gbm9wcm9wcyArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgCisgICAgICAgICAgICB0eXBlID0gcHJvcHNbZnBdCisKKyAgICAgICAgICAgIGlmIChub3QgdHlwZSA9PSAidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04Iik6CisgICAgICAgICAgICAgICAgbm90dXRmOCA9IG5vdHV0ZjggKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBmcCBpcyB1dGYtOAorICAgICAgICAgICAgdXRmOD11dGY4KzEKKworICAgICAgICAgICAgZiA9IG9wZW4oZnAsICdyYicpCisgICAgICAgICAgICBieXRlcz1mLnJlYWQoMykKKyAgICAgICAgICAgIGlmIG5vdCBieXRlczoKKyAgICAgICAgICAgICAgICBwcmludCBmcCArICI6IGNvdWxkIG5vdCByZWFkIDMgYnl0ZXMiCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgKGJ5dGVzID09IGJvbSk6CisgICAgICAgICAgICAgICAgI3ByaW50IGZwICsgIjogT0siCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9zLnJlbmFtZShmcCxmcCsiLnRtcCIpCisgICAgICAgICAgICBvPW9wZW4oZnAsJ3diJykKKyAgICAgICAgICAgIG8ud3JpdGUoYm9tKQorICAgICAgICAgICAgd2hpbGUoMSk6CisgICAgICAgICAgICAgICAgYnl0ZXMgPSBmLnJlYWQoMjA0OCkKKyAgICAgICAgICAgICAgICBpZiBieXRlczoKKyAgICAgICAgICAgICAgICAgICAgby53cml0ZShieXRlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgby5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmcCsiLnRtcCIpCisgICAgICAgICAgICBmaXhlZD1maXhlZCsxCisgICAgICAgICAgICAKKworICAgICAgICAgICAgcHJpbnQgZnAKKyAgICAgICAgICAgIAorICAgICAgICBleGNlcHQgc3ZuLmNvcmUuU3VidmVyc2lvbkV4Y2VwdGlvbjoKKyAgICAgICAgICAgIG5vdHMgPSBub3RzICsgMQorICAgICAgICAgICAgI3ByaW50ICJOb3QgdW5kZXIgdmM6ICIgKyBmcAorCisKK3ByaW50ICIlZCBmaWxlcywgJWQgbm90IHVuZGVyIHN2biwgJWQgd2l0aCBubyBwcm9wcywgJWQgbm90IHV0Zjg6ICVkIHV0ZjgsICVkIGZpeGVkXG4iICUgKHRmaWxlcyxub3RzLG5vcHJvcHMsbm90dXRmOCx1dGY4LGZpeGVkKQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL2Vudmlyb25tZW50VGVzdC5zaCBiL3JlbGVhc2UvYy9lbnZpcm9ubWVudFRlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU0MjA2YwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvYy9lbnZpcm9ubWVudFRlc3Quc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IElCTSBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFRoaXMgdGVzdCBzY3JpcHQgZW51bWVyYXRlcyBhbGwgbG9jYWxlcyBhbmQgYWxsIHRpbWV6b25lcyBpbnN0YWxsZWQgb24gYQorIyBtYWNoaW5lICh1c3VhbGx5IExpbnV4KSwgYW5kIHJ1bnMgdGhlIGV4aXN0aW5nIElDVTRDIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0CisjIHRoZSB0ZXN0cyBwYXNzLiBOb3QgZXZlcnlvbmUgaXMgdXNpbmcgYW5kIHRlc3RpbmcgSUNVNEMgaW4gdGhlIGVuX1VTIGxvY2FsZQorIyB3aXRoIHRoZSBQYWNpZmljIHRpbWV6b25lLgordG9wX2ljdV9kaXI9Li4vLi4vLi4vaWN1CityZWxlYXNlX3Rvb2xzX2Rpcj0uLi8uLi8uLi8uLi90b29scy9yZWxlYXNlL2MKK2NkICR0b3BfaWN1X2Rpci9zb3VyY2UvdGVzdC9pbnRsdGVzdAorJHJlbGVhc2VfdG9vbHNfZGlyL2FsbExvY2FsZVRlc3Quc2ggaW50bHRlc3QgJgorJHJlbGVhc2VfdG9vbHNfZGlyL2FsbFRpbWV6b25lVGVzdC5zaCBpbnRsdGVzdCAmCitjZCAuLi9pb3Rlc3QKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxMb2NhbGVUZXN0LnNoIGlvdGVzdCBJT1RFU1RfT1BUUz1pb3Rlc3QtYy1sb2MudHh0ICYKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxUaW1lem9uZVRlc3Quc2ggaW90ZXN0IElPVEVTVF9PUFRTPWlvdGVzdC1jLXR6LnR4dCAmCitjZCAuLi9jaW50bHRzdAorJHJlbGVhc2VfdG9vbHNfZGlyL2FsbExvY2FsZVRlc3Quc2ggY2ludGx0c3QgJgorJHJlbGVhc2VfdG9vbHNfZGlyL2FsbFRpbWV6b25lVGVzdC5zaCBjaW50bHRzdCAmCisKK2VjaG8gIkFsbCB0ZXN0cyBoYXZlIGJlZW4gc3Bhd25lZC4iCitlY2hvICJQbGVhc2Ugd2FpdCB3aGlsZSB0aGUgdGVzdHMgcnVuLiBUaGlzIG1heSB0YWtlIGEgd2hpbGUuIgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL29zLW1hcHBpbmcvTWFrZWZpbGUgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIyMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw3MCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyAgRklMRSBOQU1FIDogTWFrZWZpbGUKKyMKKyMgICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorIyAgIDAzLzAyLzIwMDYgIGdyaG90ZW4gICAgIENyZWF0aW9uLgorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyMjIExpc3Qgb2YgcGhvbnkgdGFyZ2V0cworLlBIT05ZIDogYWxsIGFsbC1sb2NhbCBpbnN0YWxsIGluc3RhbGwtbG9jYWwgY2xlYW4gY2xlYW4tbG9jYWwJXAorZGlzdGNsZWFuIGRpc3RjbGVhbi1sb2NhbCBpbnN0YWxsLWxpYnJhcnkgaW5zdGFsbC1oZWFkZXJzIGRpc3QJXAorZGlzdC1sb2NhbCBjaGVjayBjaGVjay1sb2NhbAorCisjIyBDbGVhciBzdWZmaXggbGlzdAorLlNVRkZJWEVTIDoKKworIyMgTGlzdCBvZiBzdGFuZGFyZCB0YXJnZXRzCithbGw6IGFsbC1sb2NhbAoraW5zdGFsbDogaW5zdGFsbC1sb2NhbAorY2xlYW46IGNsZWFuLWxvY2FsCitkaXN0Y2xlYW4gOiBkaXN0Y2xlYW4tbG9jYWwKK2Rpc3Q6IGRpc3QtbG9jYWwKK2NoZWNrOiBhbGwgY2hlY2stbG9jYWwKKworQUxMX1RBUkdFVFMgPSBkaXNwbGF5TG9jYWxlQ29udiB0ZXN0VGltZXpvbmUKKyNJQ1VfQkFTRSA9IC9ob21lL2J1aWxkL0J1aWxkX0lDVV9IUDExaUFDQworI0lDVV9CQVNFID0gL2hvbWUvYnVpbGQvQnVpbGRfSUNVX1NvbGFyaXM5Q0MKK0lDVV9CQVNFID0gL2hvbWUvYnVpbGQvQnVpbGRfSUNVX0xpbnV4UkhFTDQuMgorI0lDVV9CQVNFID0gL2hvbWUvYnVpbGQvQnVpbGRfSUNVX01hY09TWAorI0lDVV9CQVNFID0gL2hvbWUvYnVpbGQvQnVpbGRfSUNVX0FJWDUuMlZBNgorCithbGwtbG9jYWw6ICQoQUxMX1RBUkdFVFMpCisKK2Rpc3BsYXlMb2NhbGVDb252OiBkaXNwbGF5TG9jYWxlQ29udi5jCisJI2FDQyArREQ2NCAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjIC1saWN1ZGF0YSAtbyAkQCAkPAorCSNDQyAteHRhcmdldD11bHRyYSAteGFyY2g9djkgLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YyAtbGljdWRhdGEgLW8gJEAgJDwKKwlnY2MgLUkgJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJI2djYyAtSSAkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YyAtbGljdWRhdGEgLW8gJEAgJDwKKwkjeGxjIC1xNjQgLUkgJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMzNSAtbGljdWRhdGEzNSAtbyAkQCAkPAorCit0ZXN0VGltZXpvbmU6IHRlc3RUaW1lem9uZS5jCisJI2FDQyArREQ2NCAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvaTE4bi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YyAtbGljdWRhdGEgLW8gJEAgJDwKKwkjQ0MgLXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC1JJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1JJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9pMThuLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjIC1saWN1ZGF0YSAtbyAkQCAkPAorCWdjYyAtSSAkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2kxOG4vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJI2djYyAtSSAkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2kxOG4vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJI3hsYyAtcTY0IC1JICQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvaTE4bi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YzM1IC1saWN1ZGF0YTM1IC1vICRAICQ8CisKKworaW5zdGFsbC1sb2NhbDogaW5zdGFsbC1oZWFkZXJzIGluc3RhbGwtbGlicmFyeQorCitpbnN0YWxsLWxpYnJhcnk6IGFsbC1sb2NhbAorCitpbnN0YWxsLWhlYWRlcnM6CisKK2Rpc3QtbG9jYWw6CisKK2NsZWFuLWxvY2FsOgorIwl0ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCAkKFJNVikgJChDTEVBTkZJTEVTKQorCXJtICQoT0JKRUNUUykgJChBTExfVEFSR0VUUykgJChTT19WRVJTSU9OX0RBVEEpCisKK2Rpc3RjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwKKworY2hlY2stbG9jYWw6CisKKwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL29zLW1hcHBpbmcvZGlzcGxheUxvY2FsZUNvbnYuYyBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL2Rpc3BsYXlMb2NhbGVDb252LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4MDUyNgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL2Rpc3BsYXlMb2NhbGVDb252LmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIEZJTEUgTkFNRSA6IHRlc3RUaW1lem9uZS5jCisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8wMi8yMDA2ICBncmhvdGVuICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKyNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y252LmgiCisjaW5jbHVkZSAidW5pY29kZS91bG9jLmgiCisjaW5jbHVkZSAidW5pY29kZS91cmVzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGNvbnN0IGFyZ3ZbXSkgeworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCisgICAgdXJlc19jbG9zZSh1cmVzX29wZW4oTlVMTCwgTlVMTCwgJnN0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gVV9aRVJPX0VSUk9SKSB7CisgICAgICAgIHByaW50ZigidWxvY19nZXREZWZhdWx0ID0gJXNcbiIsIHVsb2NfZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgcHJpbnRmKCJMb2NhbGUgYXZhaWxhYmxlIGluIElDVSA9ICVzXG4iLCBzdGF0dXMgPT0gVV9aRVJPX0VSUk9SID8gIlRSVUUiIDogIkZBTFNFIik7CisgICAgfQorICAgIGlmIChzdHJjbXAodWNudl9nZXREZWZhdWx0TmFtZSgpLCAiVVMtQVNDSUkiKSA9PSAwKSB7CisgICAgICAgIHByaW50ZigidXBydl9nZXREZWZhdWx0Q29kZXBhZ2UgPSAlc1xuIiwgdXBydl9nZXREZWZhdWx0Q29kZXBhZ2UoKSk7CisgICAgICAgIHByaW50ZigidWNudl9nZXREZWZhdWx0TmFtZSA9ICVzXG4iLCB1Y252X2dldERlZmF1bHROYW1lKCkpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3JlYWRtZS50eHQgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYmI2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworCitUaGVzZSB0ZXN0cyBhbGxvdyB5b3UgdG8gc2VlIGhvdyB0aW1lem9uZXMsIGxvY2FsZXMsIGNoYXJzZXRzIGFuZCBvdGhlciBzaW1pbGFyIHN0dWZmIGFyZSBtYXBwZWQgZnJvbSB0aGUgT1MgdmFsdWVzIHRvIElDVSBzcGVjaWZpYyB2YWx1ZXMuCisKK1NvbWUgdHdlYWtpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIGdldCB0aGVzZSB0b29scyB0byB3b3JrLgorCitJZiB0aGUgY2hhcnNldCBtYXBzIHRvIFVTLUFTQ0lJLCBpdCBtYXkgYmUgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBhbGlhcyBvciBtYXBwaW5nIHRhYmxlIGRvIG5vdCBleGlzdCBpbiBJQ1UuCitJZiB0aGUgbG9jYWxlIGRvZXNuJ3QgZXhpc3QsIHRoZSB0ZXN0IHdpbGwgc3RhdGUgdGhhdCB0aGUgbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuCitJZiB0aGUgdGltZXpvbmUgZG9lc24ndCBtYXRjaCwgaXQgd2lsbCBiZSBsaXN0ZWQgYXMgYSBkaWZmZXJlbmNlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3Rlc3RMb2NhbGVzLnNoIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvdGVzdExvY2FsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE1ZTA5OAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3Rlc3RMb2NhbGVzLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitmb3IgbG9jIGluIGBsb2NhbGUgLWFgOyBkbyBlY2hvIDsgZWNobyBMQ19BTEw9JGxvYyA7IExDX0FMTD0kbG9jIC4vZGlzcGxheUxvY2FsZUNvbnYgOyBkb25lCmRpZmYgLS1naXQgYS9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmUuYyBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3Rlc3RUaW1lem9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NjdjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmUuYwpAQCAtMCwwICsxLDM1IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgRklMRSBOQU1FIDogdGVzdFRpbWV6b25lLmMKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDAzLzAyLzIwMDYgIGdyaG90ZW4vbW93IENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSAidW5pY29kZS9wdXRpbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogY29uc3QgYXJndltdKSB7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgY2hhciBzeXNUaW1lU3RyWzI1Nl07CisgICAgc3RydWN0IHRtIHN1bW1lclRpbWVUTTsKKyAgICBzdHJ1Y3QgdG0gd2ludGVyVGltZVRNOworCisgICAgbWVtc2V0KHN5c1RpbWVTdHIsIDAsIHNpemVvZihzeXNUaW1lU3RyKSk7CisgICAgbWVtc2V0KCZzdW1tZXJUaW1lVE0sIDAsIHNpemVvZihzdW1tZXJUaW1lVE0pKTsKKyAgICBtZW1zZXQoJndpbnRlclRpbWVUTSwgMCwgc2l6ZW9mKHdpbnRlclRpbWVUTSkpOworCisgICAgc3RycHRpbWUoIjIwMDYtMDYtMDEgMTI6MDAiLCAiJVktJW0tJWQgJUg6JU0iLCAmc3VtbWVyVGltZVRNKTsKKyAgICBzdHJmdGltZShzeXNUaW1lU3RyLCBzaXplb2Yoc3lzVGltZVN0ciktMSwgIiVZLSVtLSVkICVIOiVNIiwgJnN1bW1lclRpbWVUTSk7CisgICAgcHV0cyhzeXNUaW1lU3RyKTsKK30KZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3Rlc3RUaW1lem9uZXMuc2ggYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0OTViNTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmVzLnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordGltZXpvbmVzPWBsb2NhdGUgem9uZWluZm8gfCBmZ3JlcCAtdiBldm9sdXRpb24tZGF0YS1zZXJ2ZXJgCitmb3IgdHpvbmUgaW4gJHRpbWV6b25lcworZG8gCisgICAgaWYgWyAtZiAkdHpvbmUgXTsgdGhlbgorICAgICAgICB0em5hbWU9JHt0em9uZSMvdXNyL3NoYXJlL3pvbmVpbmZvL30KKyAgICAgICAgSUNVVGltZT1gTERfTElCUkFSWV9QQVRIPS4uL2Rldi1pY3UvaWN1L3NvdXJjZS9saWIvIFRaPSR0em5hbWUgLi9jaGVja1RpbWV6b25lYAorICAgICAgICBzeXN0ZW1Ib3VyPWBUWj0kdHpuYW1lIGRhdGUgKyVJYAorICAgICAgICAjIE9TIFggZG9lcyBub3QgYWxsb3cgJS1JIHNvIHRoaXMgdWdseSBtZXNzIG5lZWRzIHRvIG9jY3VyCisgICAgICAgIGlmIFsgIiR7c3lzdGVtSG91cjowOjF9IiA9PSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgc3lzdGVtSG91cj0ke3N5c3RlbUhvdXI6MToxfQorICAgICAgICBmaQorICAgICAgICBzeXN0ZW1UaW1lU2hvcnQ9YFRaPSR0em5hbWUgZGF0ZSArJWJcICVkLFwgJVlgCisgICAgICAgIHN5c3RlbVRpbWVTaG9ydD0iJHtzeXN0ZW1UaW1lU2hvcnR9ICR7c3lzdGVtSG91cn0iCisgICAgICAgIHN5c3RlbVRpbWVBTVBNPWBUWj0kdHpuYW1lIGRhdGUgKyVwYAorICAgICAgICBpbmRleDE9YGV4cHIgIiRzeXN0ZW1UaW1lU2hvcnQiIDogJy4qJ2AKKyAgICAgICAgaW5kZXgyPWBleHByICIkSUNVVGltZSIgOiAnLionYC0yCisgICAgICAgIElDVVRpbWVTaG9ydD0ke0lDVVRpbWU6MDoke2luZGV4MX19CisgICAgICAgIElDVUFNUE09JHtJQ1VUaW1lOiR7aW5kZXgyfToyfQorICAgICAgICBzeXN0ZW1UaW1lPWBUWj0kdHpuYW1lIGRhdGUgKyViXCAlZCxcICVZXCAlcmAKKyAgICAgICAgaWYgWyAiJHN5c3RlbVRpbWVTaG9ydCIgPT0gIiRJQ1VUaW1lU2hvcnQiIF0gJiYgWyAiJHN5c3RlbVRpbWVBTVBNIiA9PSAiJElDVUFNUE0iIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIiRvcHQxIiAhPSAiLWJhZCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gVFo9JHR6bmFtZQorICAgICAgICAgICAgICAgIGVjaG8gU3lzdGVtOiAkc3lzdGVtVGltZQorICAgICAgICAgICAgICAgIGVjaG8gSUNVOiAkSUNVVGltZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGlmIFsgIiRvcHQxIiA9PSAiLWFsbCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gLS1UWj0kdHpuYW1lCisgICAgICAgICAgICAgICAgZWNobyAtLVN5c3RlbTogJHN5c3RlbVRpbWUKKyAgICAgICAgICAgICAgICBlY2hvIC0tSUNVOiAkSUNVVGltZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVjaG8gVFo9JHR6bmFtZQorICAgICAgICAgICAgICAgIGVjaG8gU3lzdGVtOiAkc3lzdGVtVGltZQorICAgICAgICAgICAgICAgIGVjaG8gSUNVOiAkSUNVVGltZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorZG9uZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL3Vjb25maWctc2ltcGxlVGVzdC5jcHAgYi9yZWxlYXNlL2MvdWNvbmZpZy1zaW1wbGVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y1NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL3Vjb25maWctc2ltcGxlVGVzdC5jcHAKQEAgLTAsMCArMSwxMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBDb3B5cmlnaHQgKGMpIDIwMTQgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisjaW5jbHVkZSA8dW5pY29kZS9wdXRpbC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNsZWFuLmg+CisKK2ludCBtYWluKCkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgdV9pbml0KCZzdGF0dXMpOworICBwdXRzKHVfZXJyb3JOYW1lKHN0YXR1cykpOworICB1X2NsZWFudXAoKTsKKyAgcmV0dXJuIFVfRkFJTFVSRShzdGF0dXMpPzE6MDsKK30KZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy91Y29uZmlndGVzdC5zaCBiL3JlbGVhc2UvYy91Y29uZmlndGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzY5YzdmCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL3Vjb25maWd0ZXN0LnNoCkBAIC0wLDAgKzEsNDMxIEBACisjIS9iaW4vc2gKKyMgRXhoYXVzdChpdmUsIGluZykgIChNZWFuLCBNdWx0aSkgIChUZXN0LCBUcm91YmxlKQorIyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBJQk0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisjIEJ1aWxkcyBJQ1UgYSB3aG9sZSBsb3R0YSB0aW1lcyBhbmQgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucworIyBTZXQgdGhlIG9wdGlvbnMgYmVsb3cgYW5kIGV4ZWN1dGUgdGhpcyBzY3JpcHQgd2l0aCB0aGUgc2hlbGwuCisKKyMgVGhpcyBzY3JpcHQgaXMgY2hlY2tlZCBpbnRvIHRvb2xzL3RydW5rL3JlbGVhc2UvYy4gSXQgYXNzdW1lcyB0aGF0IHRoZQorIyBpY3UgZGlyZWN0b3J5IGlzIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSB0b29scyAgZGlyZWN0b3J5LiBJZiB0aGlzCisjIGlzIG5vdCB0aGUgY2FzZSwgdXNlIHRoZSB1Y29uZmlndGVzdC5sb2NhbCBmaWxlIHRvIHNldCB0aGUKKyMgU1JDX0RJUiB2YXJpYWJsZSB0byBwb2ludCBhdCB0aGUgSUNVIHNvdXJjZSBkaXJlY3RvcnkuIAorIyBPciwgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiBtYWtlIGEgc3ltbGluayB0b29scy9pY3UgLT4geW91cl9pY3VfZGlyCisjIFlvdSBjYW4gYWxzbyB1c2UgdGhlIHVjb25maWd0ZXN0LmxvY2FsIGZpbGUgdG8gb3ZlcnJpZGUgdGhlIEJVSUxEX0RJUgorIyBhbmQgSUNVUExBVEZPUk0gdmFyaWFibGVzLgorCisjIEl0IGNhbiBiZSBoYW5keSB0byBydW4gJ3RhaWwgLUYgdWNvbmZpZ3Rlc3Qvc3RhdHMnIGluIGFub3RoZXIgd2luZG93IHRvIHNlZSB3aGVyZSB0aGluZ3MgYXJlLgorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tIEZpbmQgZnVsbCBwYXRoIG5hbWVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSk9QVD0tajIKKworIyBjaGVjayBmb3IgdWNvbmZpZ3Rlc3QubG9jYWwKK2lmIFsgLWYgLi91Y29uZmlndGVzdC5sb2NhbCBdCit0aGVuCisgICAgLiAuL3Vjb25maWd0ZXN0LmxvY2FsCitmaQorCisjIGxvY2F0aW9uIG9mIHRoaXMgc2NyaXB0CitTPSQocHdkKQorCisjIEJ1aWxkIHJvb3QgLSB0b29scy9yZWxlYXNlL2MvdWNvbmZpZ3Rlc3QKK0JVSUxEX0RJUj0ke0JVSUxEX0RJUjotJHtTfS91Y29uZmlndGVzdH0KKworaWYgWyAhIC1kICR7QlVJTERfRElSfSBdOwordGhlbgorICAgIG1rZGlyIC1wICR7QlVJTERfRElSfSB8fCBleGl0IDEKK2ZpCisKK0ZBSUxTPSR7QlVJTERfRElSfS9mYWlscworU1RBVFM9JHtCVUlMRF9ESVJ9L3N0YXRzCisKKz4ke0ZBSUxTfQorPiR7U1RBVFN9CitlY2hvID4+ICR7U1RBVFN9CitlY2hvID4+ICR7U1RBVFN9CisKKyMgdGhlIHJ1bkNvbmZpZ3VyZUlDVSBwbGF0Zm9ybSBuYW1lCitJQ1VQTEFURk9STT0ke0lDVVBMQVRGT1JNOi1MaW51eH0KKworIyBHbG9iYWwgQ29uZmlnIG9wdGlvbnMgdG8gdXNlCisjZXhwb3J0IENPUFRTPSIgLS13aXRoLWRhdGEtcGFja2FnaW5nPWFyY2hpdmUiCitleHBvcnQgQ09QVFM9CisKKyMgR2xvYmFsIHRlc3Rpbmcgb3B0aW9ucyB0byB1c2UKK2V4cG9ydCBJTlRMVEVTVE9QVFM9LXcgCitleHBvcnQgQ0lOVExURVNUX09QVFM9LXcKKworCisjIC0tLSBQcm9iYWJseSB3aWxsIG5vdCBuZWVkIHRvIG1vZGlmeSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyAtLS0KKworIyBJQ1UgZGlyZWN0b3J5IGlzICRTLy4uLy4uLy4uL2ljdQorSUNVPSQoZGlybmFtZSAkKGRpcm5hbWUgJChkaXJuYW1lICR7U30pKSkvaWN1CisKKyMgU291cmNlIGRpcmVjdG9yeQorU1JDX0RJUj0ke1NSQ19ESVI6LSR7SUNVfS9zb3VyY2V9CisKKyMgLS0tLS0tLS0tLS0tIEVuZCBvZiBjb25maWcgdmFyaWFibGVzCitVQ09ORklHX0g9JFNSQ19ESVIvY29tbW9uL3VuaWNvZGUvdWNvbmZpZy5oCitVQ09ORklHX0xPQ0FMX0g9dWNvbmZpZ19sb2NhbC5oCitVQ09ORklHX1VTRV9MT0NBTD1VQ09ORklHX1VTRV9MT0NBTAorIyBQcmVwYXJlIHVjb25maWcuaAoraWYgZ3JlcCAtcSAke1VDT05GSUdfTE9DQUxfSH0gICRVQ09ORklHX0ggOwordGhlbgorICAgIGVjaG8gIiMgJFVDT05GSUdfSCBhbHJlYWR5IGNvbnRhaW5zIG91ciBwYXRjaCwgbm8gY2hhbmdlIgorZWxzZQorICAgIG12ICRVQ09ORklHX0ggJHtVQ09ORklHX0h9Lm9yaWcKKyAgICBjYXQgPiAkVUNPTkZJR19IICA8PEVPRgorI2lmIGRlZmluZWQoJHtVQ09ORklHX1VTRV9MT0NBTH0pCisjaW5jbHVkZSAke1VDT05GSUdfTE9DQUxfSH0iCisjZW5kaWYKKy8qIGZvciB1Y29uZmlndGVzdC5zaCAtIHlvdSBtYXkgUkVNT1ZFIGFib3ZlIHRoaXMgbGluZSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK0VPRgorY2F0ICR7VUNPTkZJR19IfS5vcmlnID4+ICR7VUNPTkZJR19IfQorICAgIGVjaG8gIiMgJFVDT05GSUdfSCB1cGRhdGVkIgorZmkKKworCisjIFN0YXJ0LCAgc2V0IGEgZGVmYXVsdCBuYW1lIHRvIHN0YXJ0IHdpdGggaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZworCitleHBvcnQgTkFNRT1mb28KK21rZGlyIC1wICR7QlVJTERfRElSfSAke0JVSUxEX0RJUn0vdGltZXMgMj4vZGV2L251bGwKKworIyBCYW5uZXIgZnVuY3Rpb24gLSBwcmludCBhIHNlcGFyYXRvciB0byBzcGxpdCB0aGUgb3V0cHV0CitiYW4oKQoreworICAgIGVjaG8KKyAgICBlY2hvCisgICAgZWNobyAiIy0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0kTkFNRS0tLS0tLS0tLS0tLS0gLSMiCisgICAgZWNobworICAgIGVjaG8gIkNQUEZMQUdTID0gJENQUEZMQUdTIgorICAgIGVjaG8gIlVDT05GSUdTID0gJFVDT05GSUdTIgorICAgIGVjaG8KKyAgICBlY2hvICIgYnVpbGQgdG8gJHtCVUlMRF9ESVJ9LyR7TkFNRX0gYW5kIGluc3RhbGwgaW4gJHtCVUlMRF9ESVJ9L0kke05BTUV9ICIKKyAgICBlY2hvCisKKyAgICBlY2hvICIke05BTUV9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj4gJHtTVEFUU30KK30KKworIyBDbGVhbiB1cCB0aGUgb2xkIHRyZWUgYmVmb3JlIGJ1aWxkaW5nIGFnYWluCitjbGVhbigpCit7CisgICAgc3RhdHMgY2xlYW4KKyAgICBlY2hvIGNsZWFuaW5nICR7QlVJTERfRElSfS8ke05BTUV9IGFuZCAke0JVSUxEX0RJUn0vSSR7TkFNRX0KKyAgICBybSAtcmYgJHtCVUlMRF9ESVJ9L0kke05BTUV9ICR7QlVJTERfRElSfS8ke05BTUV9CisgICAgbWtkaXIgLXAgJHtCVUlMRF9ESVJ9LyR7TkFNRX0KK30KKworIyBSdW4gY29uZmlndXJlIHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgKG91dCBvZiBzb3VyY2UgYnVpbGQpCitjb25maWcoKQoreworICAgIHN0YXRzIGNvbmZpZworICAgIG1rZGlyIC1wICR7QlVJTERfRElSfS8ke05BTUV9IDI+L2Rldi9udWxsCisgICAgY2QgJHtCVUlMRF9ESVJ9LyR7TkFNRX0KKyAgICBta2RpciBlbXRpbmMgMj4vZGV2L251bGwKKworICAgICMgbXljb25maWcuaAorICAgIGNhdCA+IGVtdGluYy8ke1VDT05GSUdfTE9DQUxfSH0gPDxFT0YKKy8qIE5BTUU9JHtOQU1FfSAgICAgICAgICAgICovCisvKiBVQ09ORklHUz0ke1VDT05GSUdTfSAgICAqLworLyogQ1BQRkxBR1M9JHtDUFBGTEFHU30gICAgKi8KKyNpZm5kZWYgX01ZQ09ORklHX0gKKyNkZWZpbmUgX01ZQ09ORklHX0gKKworRU9GCisgICAgZm9yIHdoYXQgaW4gYGVjaG8gJFVDT05GSUdTYDsKKyAgICBkbworICAgICAgICBlY2hvICIjZGVmaW5lIFVDT05GSUdfJHt3aGF0fSAxIiA+PiBlbXRpbmMvJHtVQ09ORklHX0xPQ0FMX0h9CisgICAgZG9uZQorICAgIGNhdCA+PiBlbXRpbmMvJHtVQ09ORklHX0xPQ0FMX0h9IDw8RU9GCisjZW5kaWYKK0VPRgorICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtRCR7VUNPTkZJR19VU0VfTE9DQUx9IC1JJHtCVUlMRF9ESVJ9LyR7TkFNRX0vZW10aW5jIgorICAgIGVjaG8gIkNQUEZMQUdTPVwiJENQUEZMQUdTXCIgQ29uZmlndXJlICR7SUNVUExBVEZPUk19ICR7Q09ORklHX09QVFN9ICRDT1BUUyAtLXNyY2Rpcj0kU1JDX0RJUiIKKyAgICAkU1JDX0RJUi9ydW5Db25maWd1cmVJQ1UgJHtJQ1VQTEFURk9STX0gJENPTkZJR19PUFRTICRDT1BUUyAtLXByZWZpeD0ke0JVSUxEX0RJUn0vSSR7TkFNRX0gLS1zcmNkaXI9JFNSQ19ESVIgMj4mMSA+ICR7QlVJTERfRElSfS8ke05BTUV9L2NvbmZpZy5vdXQKKyAgICBDT05GSUdfT1BUUz0KK30KKworc3RhdHMoKQoreworICAgIFNUQVRVUz0iJHtOQU1FfTogJHsxfSAJImBkYXRlYAorICAgIGVjaG8gJHtTVEFUVVN9ID4+ICR7U1RBVFN9CisgICAgZWNobyAiG1sxbSoqKiAke05BTUV9ICoqKioqKioqKiAkezF9ICoqKioqKioqKioqKiogG1ttIgorfQorCitmYWlsKCkKK3sKKyAgICBGQUlMVVJFPSJlcnJvcjogJHtCVUlMRF9ESVJ9LyR7TkFNRX06ICR7MX0gImBkYXRlYAorICAgIGVjaG8gJHtGQUlMVVJFfSA+PiAke0ZBSUxTfQorICAgIGVjaG8gJHtGQUlMVVJFfSA+PiAke1NUQVRTfQorICAgIGVjaG8gIhtbN20ke0ZBSUxVUkV9G1ttIgorfQorCitURVNUQ1BQPXVjb25maWctc2ltcGxlVGVzdC5jcHAKK1RFU1RDUFBQQVRIPSR7U30vJHtURVNUQ1BQfQorCitpZiBbICEgLWYgJHtURVNUQ1BQUEFUSH0gXTsKK3RoZW4KKyAgICBlY2hvIGVycm9yIGNhbm5vdCBsb2FkIHNpbXBsZSB0ZXN0ICR7VEVTVENQUFBBVEh9CisgICAgZXhpdCAxCitmaQorCisKKyMgRG8gYW4gYWN0dWFsIGJ1aWxkCitibGQoKQoreworIyMqIyMgIFN0cmVhbSBmaWx0ZXIgdG8gcHV0ICdOQU1FOiAnIGluIGZyb250IG9mCisjIyojIyAgZXZlcnkgbGluZToKKyMjKiMjICAgICAgLiAuIC4gICAyPiYxIHwgdGVlIC1hIC4vYmxkLmxvZyB8IHNlZCAtZSAicy9eLyR7TkFNRX06IC8iCisgICAgY2QgJHtCVUlMRF9ESVJ9LyR7TkFNRX0KKyAgICBzdGF0cyAibWFrZSAtayAke0pPUFR9IGFsbCAkezF9IgorICAgIC91c3IvYmluL3RpbWUgLW8gJHtCVUlMRF9ESVJ9L3RpbWVzLyR7TkFNRX0uYWxsICAgICBtYWtlIC1rICR7Sk9QVH0gYWxsICR7MX0gICAgREVQUz0gICAgICAgICAgICAgICAgICB8fCBmYWlsIG1ha2UKKyAgICBzdGF0cyBpbnN0YWxsCisgICAgL3Vzci9iaW4vdGltZSAtbyAke0JVSUxEX0RJUn0vdGltZXMvJHtOQU1FfS5pbnN0YWxsIG1ha2UgLWsgaW5zdGFsbCAkezF9ICAgICAgICBERVBTPSAgICAgICAgICBJTlNUQUxMX0RBVEE9J2xuIC1zdmYgJyAgfHwgZmFpbCBpbnN0YWxsCisgICAgL3Vzci9iaW4vdGltZSAtbyAke0JVSUxEX0RJUn0vdGltZXMvJHtOQU1FfS5pbCAgICAgIG1ha2UgLWsgaW5zdGFsbC1sb2NhbCAkezF9ICBERVBTPSAgICAgICAgICB8fCBmYWlsIGluc3RhbGwtbG9jYWwKKyAgICBzdGF0cyB0ZXN0cworICAgIC91c3IvYmluL3RpbWUgLW8gJHtCVUlMRF9ESVJ9L3RpbWVzLyR7TkFNRX0udHN0ICAgICBtYWtlIC1rICR7Sk9QVH0gdGVzdHMgJHsxfSAgREVQUz0gfHwgZmFpbCB0ZXN0cworICAgIGlmIFsgLWYgJHtCVUlMRF9ESVJ9LyR7TkFNRX0vdGVzdC9pbnRsdGVzdC9pbnRsdGVzdCBdOworICAgIHRoZW4KKyAgICAgICAgc3RhdHMgY2hlY2sKKyAgICAgICAgIyB1c2UgcGFyYWxsZWwgY2hlY2sgKHBjaGVjaykKKyAgICAgICAgL3Vzci9iaW4vdGltZSAtbyAke0JVSUxEX0RJUn0vdGltZXMvJHtOQU1FfS5jaGsgICAgIG1ha2UgLWsgJHtKT1BUfSBwY2hlY2sgJHsxfSBJTlRMVEVTVF9PUFRTPS13IENJTlRMVFNUX09QVFM9LXcgREVQUz0gfHwgZmFpbCBjaGVjaworICAgIGVsc2UKKyAgICAgICAgc3RhdHMgY2hlY2swCisgICAgZmkKKyAgICBzdGF0cyBoZHJ0c3QKKyAgICBQQVRIPSR7QlVJTERfRElSfS9JJHtOQU1FfS9iaW46JFBBVEggbWFrZSAtayAtQyAke0JVSUxEX0RJUn0vJHtOQU1FfS90ZXN0L2hkcnRzdC8gIERFUFM9IGNoZWNrICAgIHx8IGZhaWwgaGRydHN0CisgICAgc3RhdHMgaXJ1bgorICAgIGNwICR7VEVTVENQUFBBVEh9ICR7VEVTVENQUH0KKyAgICAvdXNyL2Jpbi90aW1lIC1vICR7QlVJTERfRElSfS90aW1lcy8ke05BTUV9LmlydW4gJHtTfS8uLi8uLi9zY3JpcHRzL2ljdXJ1biAtaSAke0JVSUxEX0RJUn0vSSR7TkFNRX0gJHtURVNUQ1BQfSB8fCBmYWlsIGlydW4KK30KKworCisjIERvIGEgY29tcGxldGUgY3ljbGUgZm9yIGEgcnVuCisjIGFyZzogb3B0cyB0byBidWlsZAorZG9pdCgpCit7CitiYW4gOyBjbGVhbiA7IGNvbmZpZyA7IGJsZCAkezF9Cit9CisKKyMgU2V0IHVwIHRoZSB2YXJpYWJsZXMgZm9yIGNvbnZlbmllbmNlCitOT19DT0w9Ik5PX0NPTExBVElPTiIKK05PX0JSSz0iTk9fQlJFQUtfSVRFUkFUSU9OIgorTk9fRk1UPSJOT19GT1JNQVRUSU5HIgorTk9fVUNNPSJOT19MRUdBQ1lfQ09OVkVSU0lPTiIKK05PX0NOVj0iTk9fQ09OVkVSU0lPTiIKK05PX0ZJTz0iTk9fRklMRV9JTyIKK05PX1hMVD0iTk9fVFJBTlNMSVRFUkFUSU9OIgorTk9fUkdYPSJOT19SRUdVTEFSX0VYUFJFU1NJT05TIgorSlNfQ09MPSJPTkxZX0NPTExBVElPTiIKK05PX05STT0iTk9fTk9STUFMSVpBVElPTiIKK05PX0lETj0iTk9fSUROQSIKK05PX1NWQz0iTk9fU0VSVklDRSIKK05PX01TVD0iJE5PX0NPTCAkTk9fQlJLICROT19GTVQgJE5PX1VDTSAkTk9fRklPICROT19SR1ggJE5PX1hMVCAkTk9fTlJNICROT19JRE4gJE5PX1NWQyIKK05PX0FMTD0iJE5PX01TVCAkTk9fU1ZDIgorCisjIE5vdywgY29tZSB0aGUgYWN0dWFsIHRlc3QgcnVucworIyBFYWNoIG9uZSBzZXRzIGEgTkFNRSwgYW5kIENQUEZMQUdTIG9yIG90aGVyIGZsYWdzLCBhbmQgY2FsbHMgZG9pdAorCitkb19ERUZBVUxUKCkKK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgREVGQVVMVAorZXhwb3J0IE5BTUU9REVGQVVMVAorZXhwb3J0IFVDT05GSUdTPSIiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKworfQorIyB0aGVzZSBhcmUgbm93IHZhbGlkOgorVVNFX1BSRUJVSUxUX0RBVEE9IklDVURBVEFfU09VUkNFX0FSQ0hJVkU9YGVjaG8gJHtCVUlMRF9ESVJ9L0RFRkFVTFQvZGF0YS9vdXQvdG1wLyouZGF0YCIKKyMgdXNlIGNyb3NzIGJ1aWxkCitDUk9TU19CVUlMRD0iLS13aXRoLWNyb3NzLWJ1aWxkPSR7QlVJTERfRElSfS9ERUZBVUxUIC0tZGlzYWJsZS10b29scyAtLWRpc2FibGUtZXh0cmFzIC0tZGlzYWJsZS1zYW1wbGVzIgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkb19OT19NU1QoKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19NU1QKK2V4cG9ydCBOQU1FPU5PX01TVAorZXhwb3J0IFVDT05GSUdTPSIkTk9fTVNUIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0ICR7VVNFX1BSRUJVSUxUX0RBVEF9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit9CisKK2RvX05PX1JHWCgpCit7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX1JHWAorZXhwb3J0IE5BTUU9Tk9fUkdYCitleHBvcnQgVUNPTkZJR1M9IiROT19SR1giCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK30KKworZG9fTk9fQ09MKCkKK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fQ09MCitleHBvcnQgTkFNRT1OT19DT0wKK2V4cG9ydCBVQ09ORklHUz0iJE5PX0NPTCIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfQorCitkb19OT19CUksoKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19CUksKK2V4cG9ydCBOQU1FPU5PX0JSSworZXhwb3J0IFVDT05GSUdTPSIkTk9fQlJLIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit9CisKK2RvX05PX0ZNVCgpCit7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX0ZNVAorZXhwb3J0IE5BTUU9Tk9fRk1UCitleHBvcnQgVUNPTkZJR1M9IiROT19GTVQiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK30KKworZG9fTk9fVUNNKCkKK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fVUNNCitleHBvcnQgTkFNRT1OT19VQ00KK2V4cG9ydCBVQ09ORklHUz0iJE5PX1VDTSIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfQorCitkb19OT19GSU8oKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19GSU8KK2V4cG9ydCBOQU1FPU5PX0ZJTworZXhwb3J0IFVDT05GSUdTPSIkTk9fRklPIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0ICR7VVNFX1BSRUJVSUxUX0RBVEF9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit9Citkb19OT19DTlYoKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19GSU8KK2V4cG9ydCBOQU1FPU5PX0NOVgorZXhwb3J0IFVDT05GSUdTPSIkTk9fQ05WIgorZXhwb3J0IENQUEZMQUdTPSIiCitDT05GSUdfT1BUUz0iJHtDUk9TU19CVUlMRH0gLS1kaXNhYmxlLXRlc3RzIgorZG9pdCAke1VTRV9QUkVCVUlMVF9EQVRBfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfQorCitkb19OT19YTFQoKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19YTFQKK2V4cG9ydCBOQU1FPU5PX1hMVAorZXhwb3J0IFVDT05GSUdTPSIkTk9fWExUIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit9CisKK2RvX05PX0lETigpCit7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX0lETgorZXhwb3J0IE5BTUU9Tk9fSUROCitleHBvcnQgVUNPTkZJR1M9IiROT19JRE4iCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK30KKworZG9fTk9fTlJNKCkKK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fTlJNCitleHBvcnQgTkFNRT1OT19OUk0KK2V4cG9ydCBVQ09ORklHUz0iJE5PX05STSIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfQorCitkb19OT19TVkMoKQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19TVkMKK2V4cG9ydCBOQU1FPU5PX1NWQworZXhwb3J0IFVDT05GSUdTPSIkTk9fU1ZDIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit9CisKK2RvX0pTX0NPTCgpCit7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEpTX0NPTAorZXhwb3J0IE5BTUU9SlNfQ09MCitleHBvcnQgVUNPTkZJR1M9IiRKU19DT0wiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK30KKworZG9fTk9fQUxMKCkKK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fQUxMCitleHBvcnQgTkFNRT1OT19BTEwKK2V4cG9ydCBVQ09ORklHUz0iJE5PX0FMTCIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdCAke1VTRV9QUkVCVUlMVF9EQVRBfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfQorCisjIG5vdyBydW4gdGhlbQorCisjIEFsd2F5cyBuZWVkZWQgLSBhcyB0aGUgaG9zdAorZG9fREVGQVVMVAorZG9fTk9fTVNUCitkb19OT19SR1gKK2RvX05PX0NPTAorZG9fTk9fQlJLCitkb19OT19GTVQKK2RvX05PX1VDTQorZG9fTk9fRklPCitkb19OT19YTFQKK2RvX05PX0NOVgorZG9fTk9fSUROCitkb19OT19OUk0KK2RvX05PX1NWQworZG9fSlNfQ09MCitkb19OT19BTEwKKworTkFNRT1kb25lCitiYW4KK2VjaG8gIkFsbCBidWlsZHMgZmluaXNoZWQhIFRpbWVzIGFyZSBpbiAke0JVSUxEX0RJUn0vdGltZXMiCitlY2hvICJUaGVyZSB3ZXJlIGVycm9ycyBpZiB0aGUgZm9sbG93aW5nIGdyZXAgZmluZHMgYW55dGhpbmcuIgorZWNobyAiZ3JlcCBzdGF0dXMgJHtCVUlMRF9ESVJ9L3RpbWVzLyoiCitncmVwIHN0YXR1cyAke0JVSUxEX0RJUn0vdGltZXMvKgorCitpZiBbIC1zICR7RkFJTFN9IF07Cit0aGVuCisgICAgZWNobyAiRmFpbHVyZXM6ICIKKyAgICBjYXQgJHtGQUlMU30KK2ZpCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS8uY2xhc3NwYXRoIGIvcmVsZWFzZS9qYXZhLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NThjNAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyMgQ29weXJpZ2h0IChDKSAyMDA5IElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCistLT4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iY2xhc3NlcyIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvLnByb2plY3QgYi9yZWxlYXNlL2phdmEvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3ZmRjZQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS8ucHJvamVjdApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorIyBDb3B5cmlnaHQgKEMpIDIwMDkgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tPgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT50b29sc2o8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL01ha2VmaWxlIGIvcmVsZWFzZS9qYXZhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2FiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworIworIworIworI1VzYWdlOgorIyBtYWtlIE9MRF9JQ1U9L3hzcmwvRS80MDFtNDAgIE5FV19JQ1U9L3hzcmwvRS9pY3U0Y3Q0MgorIworIyB5b3UgY2FuIHB1dCB0aGUgT0xEX0lDVT14eCBhbmQgTkVXX0lDVT15eSBpbiBzZXBhcmF0ZSBsaW5lcyBpbiBNYWtlZmlsZS5sb2NhbAorIworCitBTlQ9YW50CitBTlRfVEFSR0VUPWFwaXJlcG9ydAorRE9YWUdFTj1kb3h5Z2VuCisKKy1pbmNsdWRlIE1ha2VmaWxlLmxvY2FsCisKK1RBUkdFVD1BUElDaGFuZ2VSZXBvcnQuaHRtbAorCitOT1RTRVQ9CisKK2lmZXEgKCQoT0xEX0lDVSksKQorTk9UU0VUOj0iJChOT1RTRVQpIE9MRF9JQ1UiCitlbmRpZgorCitpZmVxICgkKE5FV19JQ1UpLCkKK05PVFNFVDo9IiQoTk9UU0VUKSBORVdfSUNVIgorZW5kaWYKKworaWZlcSAoJChORVdfSUNVX0JVSUxEKSwpCitORVdfSUNVX0JVSUxEOj0kKE5FV19JQ1UpL3NvdXJjZQorZW5kaWYKKworaWZlcSAoJChPTERfSUNVX0JVSUxEKSwpCitPTERfSUNVX0JVSUxEOj0kKE9MRF9JQ1UpL3NvdXJjZQorZW5kaWYKKworYWxsOiAkKFRBUkdFVCkgJChMT0NBTF9UQVJHRVQpCisKKyMgYXV0byAiYnVpbGQiIHRoZSAib2xkIiBpY3UgaW50byBPTERfSUNVX0JVSUxECit0bXAtb2xkOiAkKE9MRF9JQ1UpL3NvdXJjZS9jb25maWd1cmUKKwlta2RpciAtcCAkKE9MRF9JQ1VfQlVJTEQpLworCSggY2QgJChPTERfSUNVX0JVSUxEKS8gJiYgJChPTERfSUNVKS9zb3VyY2UvY29uZmlndXJlICkKKworIyBhdXRvICJidWlsZCIgdGhlICJvbGQiIGljdSBpbnRvIE9MRF9JQ1VfQlVJTEQKK3RtcC1uZXc6ICQoTkVXX0lDVSkvc291cmNlL2NvbmZpZ3VyZQorCW1rZGlyIC1wICQoTkVXX0lDVV9CVUlMRCkvCisJKCBjZCAkKE5FV19JQ1VfQlVJTEQpLyAmJiAkKE5FV19JQ1UpL3NvdXJjZS9jb25maWd1cmUgKQorCitpbnBsYWNlLW9sZDogJChPTERfSUNVKS9zb3VyY2UvY29uZmlndXJlCisJbWtkaXIgLXAgJChPTERfSUNVX0JVSUxEKS8KKwkoIGNkICQoT0xEX0lDVV9CVUlMRCkvICYmIC4vY29uZmlndXJlICkKKworIyBhdXRvICJidWlsZCIgdGhlICJvbGQiIGljdSBpbnRvIE9MRF9JQ1VfQlVJTEQKK2lucGxhY2UtbmV3OiAkKE5FV19JQ1UpL3NvdXJjZS9jb25maWd1cmUKKwlta2RpciAtcCAkKE5FV19JQ1VfQlVJTEQpLworCSggY2QgJChORVdfSUNVX0JVSUxEKS8gJiYgLi9jb25maWd1cmUgKQorCisKK2lmbmVxICgkKE5PVFNFVCksKQorY2hlY2stdmFyczoKKwlAZWNobyAiRXJyb3I6IHBsZWFzZSBzZXQgJChOT1RTRVQpIGluIE1ha2VmaWxlLmxvY2FsIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorCWZhbHNlCitlbHNlCitjaGVjay12YXJzOgorZW5kaWYKKworLlBIT05ZOiBjaGVjay12YXJzIGNsYXNzZXMgY2xlYW4tZG9jcyB0bXAtb2xkCisKKy5QUkVDSU9VUzogJChUQVJHRVQpICQoT0xEX0lDVV9CVUlMRCkvJChET1hZRklMRSkgJChORVdfSUNVX0JVSUxEKS8kKERPWFlGSUxFKQorCisjIyMjIyMjCitET1hZRklMRT1Eb3h5ZmlsZQorWE1MPWRvYy94bWwKK1VWRVJTSU9OSD0kKFhNTCkvdXZlcnNpb25fOGgueG1sCisKK2NsZWFuLWRvY3M6IHwgY2hlY2stdmFycworCS1ybSAtcmYgIiQoT0xEX0lDVV9CVUlMRCkvJChYTUwpIiAiJChORVdfSUNVX0JVSUxEKS8kKFhNTCkiCisKKyQoVEFSR0VUKTogY2hlY2stdmFycyAkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSAkKE5FV19JQ1VfQlVJTEQpLyQoWE1MKQorCWVjaG8gIlJlbWVtYmVyIHRvIHJ1biB0aGUgbm9uLWFzY2lpIGZpbGUgZGV0ZWN0b3IgaWYgeW91IGdldCBlcnJvcnMuIgorCSQoQU5UKSAtRG9sZGRpcj0iJChPTERfSUNVX0JVSUxEKS8kKFhNTCkiIC1EbmV3ZGlyPSIkKE5FV19JQ1VfQlVJTEQpLyQoWE1MKSIgJChBTlRfVEFSR0VUKQorCWVjaG8gIklmIHlvdSBnZXQgbm8tY2hhbmdlcywgc2VlIHRoZSByZWFkbWUtIG1heSBuZWVkIHRvIGFkZCB4YWxhbi94ZXJjZXMgamFycy4iCisKKyMgY2hlY2stdmFycyAkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSAkKE5FV19JQ1VfQlVJTEQpLyQoWE1MKQorQVBJQ2hhbmdlUmVwb3J0LnhtbDoKKwllY2hvICJSZW1lbWJlciB0byBydW4gdGhlIG5vbi1hc2NpaSBmaWxlIGRldGVjdG9yIGlmIHlvdSBnZXQgZXJyb3JzLiIKKwkkKEFOVCkgLURvbGRkaXI9IiQoT0xEX0lDVV9CVUlMRCkvJChYTUwpIiAtRG5ld2Rpcj0iJChORVdfSUNVX0JVSUxEKS8kKFhNTCkiICQoQU5UX1RBUkdFVClfeG1sCisKKyUvZG9jL3htbDoJJS9Eb3h5ZmlsZQorIyBkb24ndCBjYXJlIHdoYXQgR0VORVJBVEVfWE1MIGlzIHNldCB0byBwcmV2aW91c2x5IC0gc2V0IGl0IHRvIHllcy4KKwlAZWNobyBydW5uaW5nIGRveHlnZW4gLi4KKwkoIGNkICIkKi8iICYmICggKGNhdCAuL0RveHlmaWxlIHwgZ3JlcCAtdiAnXkdFTkVSQVRFXycpIDsgIGVjaG8gJ0dFTkVSQVRFX1hNTD1ZRVMnKSAgfCAkKERPWFlHRU4pIC0gICkKKwlAZWNobyBkb3h5Z2VuIGRvbmUgaW4gJCoKKworJS9Eb3h5ZmlsZToJJS9NYWtlZmlsZQorCUBlY2hvIGdlbmVyYXRpbmcgJEAKKwlAJChNQUtFKSAtQyAgIiQqLyIgRG94eWZpbGUgfHwgKCBlY2hvICJjb3VsZCBub3QgbWFrZSBEb3h5ZmlsZSBpbiAkKiAgLSB3YXMgZG94eWdlbiBhdmFpbGFibGU/IiA7IGZhbHNlICkKKworIyUvc291cmNlL01ha2VmaWxlOiAlL3NvdXJjZS9NYWtlZmlsZS5pbgorIwlAZWNobyAiJEAgZG9lcyBub3Qgc2VlbSB0byBleGlzdCAtIHdhcyBjb25maWd1cmUgcnVuPyIgOyBmYWxzZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL2J1aWxkLnhtbCBiL3JlbGVhc2UvamF2YS9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyNjM2YwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9idWlsZC54bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhLS0KKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwNi0yMDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFRoaXMgaXMgdGhlIGFudCBidWlsZCBmaWxlIGZvciBJQ1UgdG9vbHMuCisqLworLS0+Cis8cHJvamVjdCBuYW1lPSJyZWxlYXNlLXRvb2xzIiBkZWZhdWx0PSJ0b29scyIgYmFzZWRpcj0iLiIgPgorICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgICAgIDx0c3RhbXAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLmRpciIgdmFsdWU9InNyYyIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGliLmRpciIgdmFsdWU9ImxpYiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iY2xhc3NlcyIvPgorICAgICAgICA8cHJvcGVydHkgZmlsZT0iYXBpLXJlcG9ydC5wcm9wZXJ0aWVzIiAvPgorCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJqYXZhIGhvbWU6ICR7amF2YS5ob21lfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJqYXZhIHZlcnNpb246ICR7amF2YS52ZXJzaW9ufSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJqYXZhIHZlbmRvcjogJHtqYXZhLnZtLnZlbmRvcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iYW50IGphdmEgdmVyc2lvbjogJHthbnQuamF2YS52ZXJzaW9ufSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2FudC52ZXJzaW9ufSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2Jhc2VkaXJ9Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InRvb2xzIiAgZGVwZW5kcz0iaW5pdCIgZGVzY3JpcHRpb249ImNvbXBpbGUgcmVsZWFzZSB0b29scyI+CisgICAgICAgIDxqYXZhYyBpbmNsdWRlYW50cnVudGltZT0iZmFsc2UiIGluY2x1ZGVzPSIqKi8qLmphdmEiCisgICAgICAgICAgICBzcmNkaXI9IiR7c3JjLmRpcn0iCisgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmRpcn0iCisgICAgICAgICAgICBzb3VyY2U9IjEuNSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIgZGVwcmVjYXRpb249Im9mZiIKKyAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdCIgZGVzY3JpcHRpb249InJlbW92ZSBhbGwgYnVpbGQgdGFyZ2V0cyI+CisgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRpcn0iLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iYXBpcmVwb3J0IiBkZXBlbmRzPSJ0b29scyI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLmlibS5pY3UuZGV2LnRvb2xzLmRvY3MuU3RhYmxlQVBJIiBmb3JrPSJ5ZXMiIGZhaWxvbmVycm9yPSJ0cnVlIj4KKworPCEtLQorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItREVMRVRFTUUtbmV3dmVyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIjQuNiIvPgorLS0+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1vbGRkaXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtvbGRkaXJ9Ii8+CisKKzwhLS0KKwkhISBPbmx5IG5lZWQgdGhlc2UgaWYgeW91IG11c3Qgb3ZlcnJpZGUuIFJlbW92ZSB0aGUgREVMRVRFTUUKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLURFTEVURU1FLW5ld3ZlciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke25ld3Zlcn0iLz4KKy0tPgorCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tbmV3ZGlyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7bmV3ZGlyfSIvPgorCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tY3BweHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuYy54c2x0Ii8+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1jeHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdCIvPgorCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tcmVwb3J0eHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5SZXBvcnQueHNsdCIvPgorCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tcmVzdWx0ZmlsZSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L0FQSUNoYW5nZVJlcG9ydC5odG1sIi8+CisKKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmRpcn0iLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtsaWIuZGlyfS94YWxhbi5qYXIiLz4KKwkJPGZpbGVzZXQgZGlyPSIke2xpYi5kaXJ9Ii8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2xpYi5kaXJ9L3hlcmNlc0ltcGwuamFyIi8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9Ii4iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJhcGlyZXBvcnRfeG1sIiBkZXBlbmRzPSJ0b29scyI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLmlibS5pY3UuZGV2LnRvb2xzLmRvY3MuU3RhYmxlQVBJIiBmb3JrPSJ5ZXMiIGZhaWxvbmVycm9yPSJ0cnVlIj4KKworPCEtLQorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItREVMRVRFTUUtbmV3dmVyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIjQuNC4xIi8+CisKKy0tPgorCis8IS0tCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi1ERUxFVEVNRS1uZXd2ZXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiNC42Ii8+CistLT4KKworICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLW9sZGRpciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke29sZGRpcn0iLz4KKworPCEtLQorCSEhIE9ubHkgbmVlZCB0aGVzZSBpZiB5b3UgbXVzdCBvdmVycmlkZS4gUmVtb3ZlIHRoZSBERUxFVEVNRQorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItREVMRVRFTUUtbmV3dmVyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7bmV3dmVyfSIvPgorLS0+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1uZXdkaXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtuZXdkaXJ9Ii8+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1jcHB4c2x0Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7YmFzZWRpcn0vc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDcHBGdW5jX3htbC54c2x0Ii8+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1jeHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmNfeG1sLnhzbHQiLz4KKworICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLXJlcG9ydHhzbHQiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtiYXNlZGlyfS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VucmVwb3J0X3htbC54c2x0Ii8+CisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1yZXN1bHRmaWxlIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7YmFzZWRpcn0vQVBJQ2hhbmdlUmVwb3J0LnhtbCIvPgorCisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5kaXJ9Ii8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7amF2YS5jbGFzcy5wYXRofS8iLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7bGliLmRpcn0veGFsYW4uamFyIi8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2xpYi5kaXJ9L3hlcmNlc0ltcGwuamFyIi8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9Ii4iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvaWN1NGMuY3NzIGIvcmVsZWFzZS9qYXZhL2ljdTRjLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU4NjA1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL2ljdTRjLmNzcwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqIERlZmF1bHQgQ1NTIHN0eWxlIHNoZWV0IGZvciB0aGUgSUNVNEMgT3BlbiBTb3VyY2UgcmVhZG1lCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyogR2xvYmFsIHN0eWxlcyAqLworCitib2R5LHAsbGksb2wsdWwsdGgsdGQgeworCWZvbnQtc2l6ZTogMTBwdDsKKwlmb250LWZhbWlseTogIkFyaWFsIiwgIkhlbHZldGljYSIsIHNhbnMtc2VyaWY7Cit9CisKK2JvZHkgeworCW1hcmdpbjogMWVtOworfQorCitib2R5LmRyYWZ0IHsKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2RyYWZ0YmcucG5nKTsKK30KKworLm1haW5ib2R5IHsKKwlwYWRkaW5nOiAxZW07Cit9CisKKy8qCisgKiBDdXN0b21pemUgdGhlIGhlYWRlcnMgdG8gaGF2ZSBsZXNzIHNwYWNlIGFyb3VuZCB0aGVtIHRoYW4gdXN1YWwKKyAqLworCitoMSB7CisJbWFyZ2luLWJvdHRvbTogLjVlbTsKKwltYXJnaW4tdG9wOiAuNWVtOworCXBhZGRpbmctYm90dG9tOiAuNWVtOworCXBhZGRpbmctdG9wOiAuNWVtOworCWZvbnQtd2VpZ2h0OiA3MDA7CisJZm9udC1zaXplOiAyMHB0OworCWZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOworCWJvcmRlci13aWR0aDogMnB4OworCWJvcmRlci1zdHlsZTogc29saWQ7CisJdGV4dC1hbGlnbjogY2VudGVyOworCXdpZHRoOiAxMDAlOworCWZvbnQtc2l6ZTogMjAwJTsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworaDIgeworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjMjJkOworCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzIyZDsKKwltYXJnaW4tYm90dG9tOiAwLjVlbTsKKwlwYWRkaW5nLWxlZnQ6IDRweDsKKwltYXJnaW4tdG9wOiAxMnB0OworCWZvbnQtd2VpZ2h0OiA3MDA7CisJZm9udC1zaXplOiAyZW07CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CisJYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKwlwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzOworfQorCitoMiBhIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6IGJsYWNrOworfQorCitoMiBhOmhvdmVyIHsKKwljb2xvcjogYmx1ZTsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworaDMgeworCWJvcmRlci10b3A6IDFweCBzb2xpZCBncmF5OworCWNvbG9yOiAjMWUxYzQ2OworCW1hcmdpbi1ib3R0b206IDBwdDsKKwltYXJnaW4tdG9wOiAxMnB0OworCXBhZGRpbmctbGVmdDogMDsKKwltYXJnaW4tbGVmdDogMWVtOworCW1hcmdpbi10b3A6IDAuMmVtOworCXBhZGRpbmctYm90dG9tOiAwLjRlbTsKKwlmb250LXNpemU6IDEuNWVtOworCWZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOworfQorCitoMyBhIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6IGJsYWNrOworfQorCitoMyBhOmhvdmVyIHsKKwljb2xvcjogYmx1ZTsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworaDQgeworCW1hcmdpbi1sZWZ0OiAxLjVlbTsKKwltYXJnaW4tYm90dG9tOiAwcHQ7CisJbWFyZ2luLXRvcDogMTJwdDsKKwlmb250LXNpemU6IDEuMGVtOworCWZvbnQtd2VpZ2h0OiBib2xkZXI7CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7Cit9CisKK2g0IGEgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogYmxhY2s7Cit9CisKK2g0IGE6aG92ZXIgeworCWNvbG9yOiBibHVlOworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitoNSwgaDYgeworCW1hcmdpbi1sZWZ0OiAxLjhlbTsKKwltYXJnaW4tYm90dG9tOiAwcHQ7CisJbWFyZ2luLXRvcDogMTJwdDsKKwlwYWRkaW5nLWxlZnQ6IDAuNzVlbTsKKwlmb250LXNpemU6IHgtc21hbGw7CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7Cit9CisKK3AscHJlLHRhYmxlLHVsLG9sLGRsIHsKKwltYXJnaW4tbGVmdDogMmVtOworfQorCisvKgorICogTmF2aWdhdGlvbiBzaWRlYmFyIG9uIHRoZSBsZWZ0IGhhbmQgb2YgbW9zdCBwYWdlcworICovCisKK3RkLnNpZGViYXIxIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjOTlDQ0ZGOworCWZvbnQtd2VpZ2h0OiA3MDA7CisJbWFyZ2luLXRvcDogMHB4OworCW1hcmdpbi1ib3R0b206IDBweDsKKwlwYWRkaW5nLXRvcDogMWVtOworCXBhZGRpbmctbGVmdDogMC4yZW07CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKwordGQuc2lkZWJhcjIgeworCWJhY2tncm91bmQtY29sb3I6ICM5OUNDRkY7CisJbWFyZ2luLXRvcDogMHB4OworCW1hcmdpbi1ib3R0b206IDBweDsKKwltYXJnaW4tbGVmdDogMHB4OworCXBhZGRpbmctdG9wOiAxcHg7CisJcGFkZGluZy1ib3R0b206IDFweDsKKwlwYWRkaW5nLWxlZnQ6IDFweDsKKwlwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwlkaXNwbGF5OiBibG9jazsKK30KKwordGQuc2lkZWJhcjI6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisJcGFkZGluZy10b3A6IDFweDsKKwlwYWRkaW5nLWJvdHRvbTogMXB4OworCXBhZGRpbmctbGVmdDogMXB4OworCXBhZGRpbmctcmlnaHQ6IDAuNWVtOworfQorCithLnNpZGViYXIyIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJZGlzcGxheTogYmxvY2s7CisJd2lkdGg6IDEwMCU7Cit9CisKK2Euc2lkZWJhcjI6bGluayB7CisJY29sb3I6ICMwMDAwOTk7CisJZGlzcGxheTogYmxvY2s7Cit9CisKK2Euc2lkZWJhcjI6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisJZGlzcGxheTogYmxvY2s7Cit9CisKKy51bmRlcmxpbmVob3Zlcjpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyogVGhpcyBpcyB0aGUgZmFkZWQgaGVhZGVyIGF0IHRoZSB0b3AgKi8KKwordGQuZmFkZWR0b3AgeworCWJhY2tncm91bmQtY29sb3I6ICMwMDY2OTk7CisJYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHA6Ly93d3cuaWN1LXByb2plY3Qub3JnL2ltYWdlcy9ncjEwMC5naWYpOworfQorCisvKiBSZWxhdGVkIHNpdGUgb24gdGhlIGxlZnQgKi8KKworcC5yZWxhdGVkc2l0ZSB7CisJY29sb3I6IFdoaXRlOworCWZvbnQtd2VpZ2h0OiA3MDA7CisJZm9udC1zaXplOiAxMHB0OworCW1hcmdpbi10b3A6IDFlbTsKKwltYXJnaW4tYm90dG9tOiAwOworCXBhZGRpbmctbGVmdDogMC4yZW07CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKworLyogUmVsYXRlZCBzaXRlIG9uIHRoZSBsZWZ0ICovCisKK3Auc2lkZWJhcjMgeworCW1hcmdpbi10b3A6IDAuNzVlbTsKKwltYXJnaW4tYm90dG9tOiAwOworCXBhZGRpbmctbGVmdDogMC44ZW07Cit9CisKK2Euc2lkZWJhcjMgeworCWZvbnQtc2l6ZTogMC45ZW07CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCithLnNpZGViYXIzOmxpbmsgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogV2hpdGU7Cit9CisKK2Euc2lkZWJhcjM6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKiBGQVEgKi8KKworbGkuZmFxX2NvbnRlbnRzIHsKKwlmb250LXdlaWdodDogNTAwOworfQorCitwLmZhcV9xIHsKKwlmb250LXdlaWdodDogNzAwOworCW1hcmdpbi1ib3R0b206IDBweDsKK30KKworcC5mYXFfYSB7CisJbWFyZ2luLXRvcDogMHB4OworfQorCisvKiBOZXdzIGl0ZW1zICovCisKK3RhYmxlLm5ld3NJdGVtIHsKKwlwYWRkaW5nLWxlZnQ6IDFlbTsKKwlwYWRkaW5nLXJpZ2h0OiAxZW07CisJYm9yZGVyLXdpZHRoOiBtZWRpdW07Cit9CisKK3RoLm5ld3NJdGVtIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjNjY2NjY2OworCWNvbG9yOiBXaGl0ZTsKK30KKwordGQubmV3c0l0ZW0geworCWJhY2tncm91bmQtY29sb3I6ICNDQ0NDQ0M7Cit9CisKK3RkLnJlbGVhc2UtbGluZSx0aC5yZWxlYXNlLWxpbmUgeworCXBhZGRpbmctbGVmdDogMC41ZW07CisJcGFkZGluZy1yaWdodDogMC41ZW07CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwlib3JkZXI6IDFweDsKK30KKworLm5vdGUgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKKwlmb250LXNpemU6IHNtYWxsOworCW1hcmdpbi1sZWZ0OiAxZW07Cit9CisKK3NhbXAgeworCW1hcmdpbi1sZWZ0OiAxZW07CisJbWFyZ2luLXJpZ2h0OiAyZW07CisJYm9yZGVyLXN0eWxlOiBncm9vdmU7CisJcGFkZGluZzogMWVtOworCWRpc3BsYXk6IGJsb2NrOworCWJhY2tncm91bmQtY29sb3I6ICNFRUVFRUUKK30KKwordGFibGUucnRhYmxlIGNhcHRpb24geworCW1hcmdpbi1sZWZ0OiAycHg7CisJbWFyZ2luLXJpZ2h0OiAycHg7CisJcGFkZGluZzogM3B4OworCWZvbnQtd2VpZ2h0OiBib2xkOworCWJhY2tncm91bmQtY29sb3I6ICNkZWUyZmY7CisJdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUucnRhYmxlIHRyIHRoIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmZmOworCXRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlLnJ0YWJsZSB0ciB0ZCB7CisJYmFja2dyb3VuZC1jb2xvcjogI2MwYzBmZDsKKwlwYWRkaW5nOiAzcHg7Cit9CisKK3RhYmxlLnJ0YWJsZSB0ci5icm9rZW4gdGQgeworCWJhY2tncm91bmQtY29sb3I6ICNmYmI7CisJYm9yZGVyOiAxcHggZGFzaGVkIGdyYXk7CisJcGFkZGluZzogM3B4OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS5ydGFibGUgdHIucmFyZWx5IHRkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWZlOWMyOworCXBhZGRpbmc6IDNweDsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy8qICBBUElDaGFuZ2VSZXBvcnQgc3BlY2lmaWMgdGhpbmdzICovCisKKy5yb3cwIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworLnJvdzEgeworCWJhY2tncm91bmQtY29sb3I6ICNkZmQ7Cit9CisKKy52ZXJjaGFuZ2UgeworCWNvbG9yOiByZWQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJZm9udC1zaXplOiBsYXJnZTsKK30KKworLnN0YWJjaGFuZ2UgeworCWNvbG9yOiByZWQ7CisJZm9udC1zaXplOiBsYXJnZTsKK30KKworLmJpZ3dhcm4geworCWNvbG9yOiByZWQ7CisJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisJZm9udC1zaXplOiB4LWxhcmdlOworCW1hcmdpbjogMC41IGVtOworfQorCit0YWJsZS5nZW5UYWJsZSB7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwlib3JkZXI6IDFweCBzb2xpZCBibGFjazsKK30KKworLyogJ2V2ZXJ5dGhpbmcgaW5jIHZlcnNpb24gKi8KKwordGFibGUuZ2VudGFibGUgdGQgeworCWJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisJcGFkZGluZzogMC4yNWVtOworCWZvbnQtc2l6ZTogc21hbGw7Cit9CisKKy8qIG5vdCB2ZXJzaW9uICovCisKK3RhYmxlLmdlblRhYmxlIHRkLmZpbGUsCit0YWJsZS5nZW5UYWJsZSB0ZC5wcm90byB7CisJYm9yZGVyOiBub25lOworCWZvbnQtc2l6ZTogbWVkaXVtOworfQorCit0YWJsZS5nZW5UYWJsZSB0ZC5maWxlIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYub3RoZXIgLnJvdzAgeworCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCitkaXYub3RoZXIgLnJvdzEgeworCWJhY2tncm91bmQtY29sb3I6ICNkZGY7Cit9CisKK3RhYmxlLmRvY1RhYmxlIHsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCWJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQorCisvKiAnZXZlcnl0aGluZyBpbmMgdmVyc2lvbiAqLworCit0YWJsZS5kb2NUYWJsZSB0ZCwKK3RhYmxlLmRvY1RhYmxlIHRoIHsKKwlib3JkZXI6IDFweCBzb2xpZCBncmF5OworCXBhZGRpbmc6IDAuMjVlbTsKKwlmb250LXNpemU6IHNtYWxsOworfQorCisvKiBub3QgdmVyc2lvbiAqLworCit0YWJsZS5kb2NUYWJsZSB0ZC5maWxlLAordGFibGUuZG9jVGFibGUgdGQucHJvdG8geworCWJvcmRlcjogbm9uZTsKKwlmb250LXNpemU6IG1lZGl1bTsKK30KKwordGFibGUuZG9jVGFibGUgdGQuZmlsZSB7CisJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworYWJiciB7CisJYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjMEIwOworfQorCitoMi5UT0MgeworCXBhZ2UtYnJlYWstYmVmb3JlOiBhdXRvOworfQorCitib2R5LnJlYWRtZSB7CisJCit9CisKK2NhcHRpb24geworCWZvbnQtd2VpZ2h0OiBib2xkOworCXRleHQtYWxpZ246IGxlZnQKK30KKworZGl2LmluZGVudCB7CisJbWFyZ2luLWxlZnQ6IDJlbQorfQorCit1bC5UT0MgeworCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKKwlwYWRkaW5nLWxlZnQ6IDFlbTsKKwlmb250LXNpemU6IGxhcmdlcjsKK30KKwordWwuVE9DIGxpIGEgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit1bC5UT0MgbGkgdWwgbGkgYSB7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CisJZm9udC1zaXplOiBzbWFsbDsKK30KKwordWwuVE9DIGxpIHVsIHsKKwltYXJnaW4tbGVmdDogMDsKKwlwYWRkaW5nLWxlZnQ6IDJlbTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKK30KKworcHJlLnNhbXAsc2FtcCB7CisJbWFyZ2luLWxlZnQ6IDFlbTsKKwlib3JkZXItc3R5bGU6IGdyb292ZTsKKwlwYWRkaW5nOiAxZW07CisJZGlzcGxheTogYmxvY2s7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRQorfQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL2xpYi9MSUNFTlNFLnR4dCBiL3JlbGVhc2UvamF2YS9saWIvTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkYjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9saWIvTElDRU5TRS50eHQKQEAgLTAsMCArMSw2ODYgQEAKK++7vyMgdGhpcyBmaXJzdCBsaW5lIENvcHlyaWdodCAoQykgMjAxMyBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZA0KKw0KKzw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PA0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8NCisNCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04NCisNCisgICAxLiBEZWZpbml0aW9ucy4NCisNCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLA0KKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50Lg0KKw0KKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5DQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLg0KKw0KKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwNCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uDQorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwNCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUNCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcg0KKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQ0KKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuDQorDQorICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQ0KKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuDQorDQorICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsDQorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbg0KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuDQorDQorICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwNCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0DQorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLA0KKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4NCisNCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcg0KKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGENCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsNCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLg0KKw0KKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QNCisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlDQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucw0KKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzDQorICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluDQorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLA0KKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuDQorDQorICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcNCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zDQorICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5DQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcg0KKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZg0KKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIg0KKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQNCisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bw0KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsDQorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUNCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQNCisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQ0KKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIg0KKw0KKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5DQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kDQorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuDQorDQorICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLA0KKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlDQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsDQorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlDQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4NCisNCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsDQorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUNCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwNCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywNCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQ0KKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyDQorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQ0KKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91DQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGENCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrDQorICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QNCisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzDQorICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlDQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLg0KKw0KKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlDQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0DQorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UNCisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisNCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcg0KKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZA0KKw0KKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMNCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kDQorDQorICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzDQorICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQNCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywNCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZg0KKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kDQorDQorICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzDQorICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QNCisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkDQorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdA0KKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUNCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQNCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcg0KKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwNCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZA0KKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMNCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZA0KKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbg0KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQ0KKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQNCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkDQorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4NCisNCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQNCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zDQorICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcg0KKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLA0KKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aA0KKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuDQorDQorICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLA0KKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaw0KKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuDQorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQ0KKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkDQorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLg0KKw0KKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUNCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsDQorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlDQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuDQorDQorICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yDQorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaA0KKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcg0KKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zDQorICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQ0KKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQ0KKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQ0KKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4NCisNCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwNCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwNCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQ0KKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlDQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLA0KKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQ0KKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUNCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsDQorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwNCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yDQorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLg0KKw0KKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcNCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLA0KKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksDQorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMNCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQ0KKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmDQorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LA0KKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQ0KKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24NCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4NCisNCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCisNCitUaGUgbGljZW5zZSBhYm92ZSBhcHBsaWVzIHRvIHRoaXMgQXBhY2hlIFhhbGFuIHJlbGVhc2Ugb2Y6DQorICBYYWxhbi1KYXZhIDIgLSBYU0xUIFByb2Nlc3Nvcg0KKyAgWGFsYW4tSmF2YSAyIC0gU2VyaWFsaXplcg0KKyAgDQorVGhlIGxpY2Vuc2UgYWJvdmUgYWxzbyBhcHBsaWVzIHRvIHRoZSBqYXIgZmlsZXMNCit4YWxhbi5qYXIgYW5kIHhzbHRjLmphciAtIFhhbGFuLUphdmEgMiAtIFhTTFQgUHJvY2Vzc29yIGZyb20gDQorU291cmNlOiBodHRwOi8veGFsYW4uYXBhY2hlLm9yZy8NCisgIA0KK1RoZSBsaWNlbnNlIGFib3ZlIGFsc28gYXBwbGllcyB0byB0aGUgamFyIGZpbGUNCitzZXJpYWxpemVyLmphciAtIFhhbGFuLUphdmEgMiAtIFNlcmlhbGl6ZXINCitTb3VyY2U6ICBodHRwOi8veGFsYW4uYXBhY2hlLm9yZy8NCitVc2VkIGJ5OiBYYWxhbi1KYXZhIDIgYW5kIFhlcmNlcy1KYXZhIDINCisNCitUaGUgbGljZW5zZSBhYm92ZSBhbHNvIGFwcGxpZXMgdG8gdGhlIGphciBmaWxlDQoreGVyY2VzSW1wbC5qYXIgLSBYZXJjZXMtSmF2YSAyIFhNTCBQYXJzZXIuDQorU291cmNlOgkgIGh0dHA6Ly94ZXJjZXMuYXBhY2hlLm9yZy8NCitVc2VkIGJ5OiAgWGFsYW4tSmF2YSAyDQorDQorVGhlIGxpY2Vuc2UgYWJvdmUgYWxzbyBhcHBsaWVzIHRvIHRoZSBqYXIgZmlsZQ0KK3htbC1hcGlzLmphciAtIFhlcmNlcy1KYXZhIDIgWE1MIFBhcnNlci4NCitTb3VyY2U6ICAgaHR0cDovL3hlcmNlcy5hcGFjaGUub3JnLw0KK1VzZWQgYnk6ICBYYWxhbi1KYXZhIDIgYW5kIHJlbGVhc2UgY29weSBvZiBYZXJjZXMtSmF2YSAyDQorDQorDQorDQorDQorDQorDQorDQorDQorVGhlIGZvbGxvd2luZyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGluY2x1ZGVkIGZpbGVzOg0KKyAgdG9vbHMvYW50Lmphcg0KKyAgdG9vbHMvYW50UnVuDQorICB0b29scy9hbnRSdW4uYmF0DQorU291cmNlOgkgaHR0cDovL2FudC5hcGFjaGUub3JnLw0KK1VzZWQgQnk6IFhhbGFuJ3MgYnVpbGQgcHJvY2VzczogamF2YS9idWlsZC54bWwgYW5kIHRlc3QvYnVpbGQueG1sDQorDQorPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8DQorLyoNCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICogICAgICAgICAgICAgICAgICAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQ0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiANCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqIA0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYS0NCisgKiB0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICogDQorICogMS4gUmVkaXN0cmlidXRpb25zIG9mICBzb3VyY2UgY29kZSBtdXN0ICByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAgbm90aWNlLA0KKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKiANCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0DQorICogICAgaW5jbHVkZSAgdGhlIGZvbGxvd2luZyAgYWNrbm93bGVkZ21lbnQ6ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzICBzb2Z0d2FyZQ0KKyAqICAgIGRldmVsb3BlZCAgYnkgdGhlICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiINCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyAgYWNrbm93bGVkZ21lbnQgbWF5ICBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgIGlmDQorICogICAgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4NCisgKiANCisgKiA0LiBUaGUgbmFtZXMgIkFudCIgYW5kICAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iICBtdXN0IG5vdCBiZSB1c2VkIHRvDQorICogICAgZW5kb3JzZSAgb3IgcHJvbW90ZSAgcHJvZHVjdHMgZGVyaXZlZCAgZnJvbSB0aGlzICBzb2Z0d2FyZSB3aXRob3V0ICBwcmlvcg0KKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QNCisgKiAgICBhcGFjaGVAYXBhY2hlLm9yZy4NCisgKiANCisgKiA1LiBQcm9kdWN0cyAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCAgYmUgY2FsbGVkICJBcGFjaGUiLCBub3IgbWF5DQorICogICAgIkFwYWNoZSIgYXBwZWFyICBpbiB0aGVpciBuYW1lLCAgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gIG9mIHRoZQ0KKyAqICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqIA0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywNCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EDQorICogRklUTkVTUyAgRk9SIEEgUEFSVElDVUxBUiAgUFVSUE9TRSBBUkUgIERJU0NMQUlNRUQuICBJTiBOTyAgRVZFTlQgU0hBTEwgIFRIRQ0KKyAqIEFQQUNIRSBTT0ZUV0FSRSAgRk9VTkRBVElPTiAgT1IgSVRTIENPTlRSSUJVVE9SUyAgQkUgTElBQkxFIEZPUiAgQU5ZIERJUkVDVCwNCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCAgREFNQUdFUyAoSU5DTFUtDQorICogRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCAgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUw0KKyAqIE9GIFVTRSwgREFUQSwgT1IgIFBST0ZJVFM7IE9SIEJVU0lORVNTICBJTlRFUlJVUFRJT04pICBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgIFRIRU9SWSBPRiBMSUFCSUxJVFksICBXSEVUSEVSICBJTiBDT05UUkFDVCwgIFNUUklDVCBMSUFCSUxJVFksICBPUiBUT1JUDQorICogKElOQ0xVRElORyAgTkVHTElHRU5DRSBPUiAgT1RIRVJXSVNFKSBBUklTSU5HIElOICBBTlkgV0FZIE9VVCBPRiBUSEUgIFVTRSBPRg0KKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICogDQorICogVGhpcyBzb2Z0d2FyZSAgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSAgYnkgbWFueSBpbmRpdmlkdWFscw0KKyAqIG9uIGJlaGFsZiBvZiB0aGUgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUgIGluZm9ybWF0aW9uICBvbiB0aGUgDQorICogQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+Lg0KKyAqDQorICovDQorPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+DQorDQorDQorDQorDQorDQorDQorDQorDQorVGhlIGZvbGxvd2luZyBsaWNlbnNlLCBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEsDQorYXBwbGllcyB0byB0aGUgaW5jbHVkZWQgQkNFTC5qYXIgZnJvbSBBcGFjaGUgSmFrYXJ0YQ0KKyhCeXRlIENvZGUgRW5naW5lZXJpbmcgTGlicmFyeSkuDQorU291cmNlOiAgaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9iY2VsDQorVXNlZCBCeTogWFNMVEMgY29tcG9uZW50IG9mIHhtbC14YWxhbi9qYXZhDQorDQorVGhlIGZvbGxvd2luZyBsaWNlbnNlLCBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEsIA0KK2Fsc28gYXBwbGllcyB0byB0aGUgaW5jbHVkZWQgcmVnZXhwLmphciwNCitqYWthcnRhLXJlZ2V4cC0xLjIuamFyIGZyb20gQXBhY2hlIEpha2FydGEuDQorU291cmNlOiAgaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9yZWdleHANCitVc2VkIEJ5OiBCQ0VMLmphciB3aGljaCBpcyB1c2VkIGJ5IFhTTFRDIGNvbXBvbmVudCBvZiB4bWwteGFsYW4vamF2YQ0KKw0KKzw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PA0KKy8qDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cw0KKyAqIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKg0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4NCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogICAgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sDQorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoNCisgKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUNCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiINCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsDQorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4NCisgKg0KKyAqIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBhbmQgDQorICogICAgIkFwYWNoZSBCQ0VMIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyANCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIA0KKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuDQorICoNCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwNCisgKiAgICAiQXBhY2hlIEJDRUwiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IA0KKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEDQorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMNCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1INCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YNCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUDQorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQorICogU1VDSCBEQU1BR0UuDQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKg0KKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55DQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlDQorICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlDQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+Lg0KKyAqLw0KKz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KK1RoZSBmb2xsb3dpbmcgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBET00gZG9jdW1lbnRhdGlvbg0KK2ZvciB0aGUgb3JnLnczYy5kb20uKiBwYWNrYWdlczoNCisNCis8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwNCitXM0PCriBET0NVTUVOVCBMSUNFTlNFDQoraHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1kb2N1bWVudHMtMjAwMjEyMzENCitQdWJsaWMgZG9jdW1lbnRzIG9uIHRoZSBXM0Mgc2l0ZSBhcmUgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIA0KK3VuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyBkb2N1bWVudCwgDQorb3IgdGhlIFczQyBkb2N1bWVudCBmcm9tIHdoaWNoIHRoaXMgc3RhdGVtZW50IGlzIGxpbmtlZCwgeW91ICh0aGUgbGljZW5zZWUpIA0KK2FncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyANCit0ZXJtcyBhbmQgY29uZGl0aW9uczoNCisNCitQZXJtaXNzaW9uIHRvIGNvcHksIGFuZCBkaXN0cmlidXRlIHRoZSBjb250ZW50cyBvZiB0aGlzIGRvY3VtZW50LCBvciB0aGUgDQorVzNDIGRvY3VtZW50IGZyb20gd2hpY2ggdGhpcyBzdGF0ZW1lbnQgaXMgbGlua2VkLCBpbiBhbnkgbWVkaXVtIGZvciBhbnkgDQorcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSANCit0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIGRvY3VtZW50LCBvciBwb3J0aW9ucyB0aGVyZW9mLCB0aGF0IHlvdSB1c2U6DQorDQorMS4gQSBsaW5rIG9yIFVSTCB0byB0aGUgb3JpZ2luYWwgVzNDIGRvY3VtZW50LiANCisyLiBUaGUgcHJlLWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIG9yaWdpbmFsIGF1dGhvciwgb3IgaWYgaXQgDQorICAgZG9lc24ndCBleGlzdCwgYSBub3RpY2UgKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIGJ1dCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24NCisgICAgaXMgcGVybWl0dGVkKSBvZiB0aGUgZm9ybTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2YtZG9jdW1lbnRdIFdvcmxkIFdpZGUgV2ViDQorICAgIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaA0KKyAgICBDb25zb3J0aXVtIGZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCBSaWdodHMgDQorICAgIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LWRvY3VtZW50cy0yMDAyMTIzMSIgDQorMy4gSWYgaXQgZXhpc3RzLCB0aGUgU1RBVFVTIG9mIHRoZSBXM0MgZG9jdW1lbnQuIA0KKw0KK1doZW4gc3BhY2UgcGVybWl0cywgaW5jbHVzaW9uIG9mIHRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0Ugc2hvdWxkIGJlIHByb3ZpZGVkLiANCitXZSByZXF1ZXN0IHRoYXQgYXV0aG9yc2hpcCBhdHRyaWJ1dGlvbiBiZSBwcm92aWRlZCBpbiBhbnkgc29mdHdhcmUsIGRvY3VtZW50cywgDQorb3Igb3RoZXIgaXRlbXMgb3IgcHJvZHVjdHMgdGhhdCB5b3UgY3JlYXRlIHB1cnN1YW50IHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCitjb250ZW50cyBvZiB0aGlzIGRvY3VtZW50LCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLg0KKw0KK05vIHJpZ2h0IHRvIGNyZWF0ZSBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmVzIG9mIFczQyBkb2N1bWVudHMgaXMgZ3JhbnRlZCBwdXJzdWFudA0KK3RvIHRoaXMgbGljZW5zZS4gSG93ZXZlciwgaWYgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgKGRvY3VtZW50ZWQgaW4gdGhlIENvcHlyaWdodCBGQVEpDQorYXJlIHNhdGlzZmllZCwgdGhlIHJpZ2h0IHRvIGNyZWF0ZSBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmVzIGlzIHNvbWV0aW1lcyBncmFudGVkDQorYnkgdGhlIFczQyB0byBpbmRpdmlkdWFscyBjb21wbHlpbmcgd2l0aCB0aG9zZSByZXF1aXJlbWVudHMuDQorDQorVEhJUyBET0NVTUVOVCBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMNCitPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GDQorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OLUlORlJJTkdFTUVOVCwgT1IgVElUTEU7DQorVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIERPQ1VNRU5UIEFSRSBTVUlUQUJMRSBGT1IgQU5ZIFBVUlBPU0U7IE5PUiBUSEFUIFRIRQ0KK0lNUExFTUVOVEFUSU9OIE9GIFNVQ0ggQ09OVEVOVFMgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsDQorQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuDQorDQorQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUg0KK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBET0NVTUVOVCBPUiBUSEUgUEVSRk9STUFOQ0UNCitPUiBJTVBMRU1FTlRBVElPTiBPRiBUSEUgQ09OVEVOVFMgVEhFUkVPRi4NCisNCitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcNCitvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGlzIGRvY3VtZW50IG9yIGl0cyBjb250ZW50cyB3aXRob3V0IHNwZWNpZmljLA0KK3dyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgZG9jdW1lbnQgd2lsbCBhdCBhbGwNCit0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4NCisNCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0MncyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBEZWNlbWJlciAzMSAyMDAyLg0KK1RoaXMgdmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSBzdWNoIHRoYXQgdGhpcyBsaWNlbnNlDQorY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCBtb3ZlcyBpbmZvcm1hdGlvbg0KK29uIHN0eWxlIHNoZWV0cywgRFREcywgYW5kIHNjaGVtYXMgdG8gdGhlIENvcHlyaWdodCBGQVEsIHJlZmxlY3RzIHRoYXQgRVJDSU0NCitpcyBub3cgYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcyBzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uDQorb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIFNlZSB0aGUgb2xkZXINCitmb3JtdWxhdGlvbiBmb3IgdGhlIHBvbGljeSBwcmlvciB0byB0aGlzIGRhdGUuIFBsZWFzZSBzZWUgb3VyIENvcHlyaWdodCBGQVEgZm9yDQorY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB1c2luZyBtYXRlcmlhbHMgZnJvbSBvdXIgc2l0ZSwgc3VjaCBhcyB0aGUgdHJhbnNsYXRpbmcNCitvciBhbm5vdGF0aW5nIHNwZWNpZmljYXRpb25zLiBPdGhlciBxdWVzdGlvbnMgYWJvdXQgdGhpcyBub3RpY2UgY2FuIGJlIGRpcmVjdGVkDQordG8gc2l0ZS1wb2xpY3lAdzMub3JnLg0KKw0KKw0KK0pvc2VwaCBSZWFnbGUgPG1haWx0bzpzaXRlLXBvbGljeUB3My5vcmcgDQorTGFzdCByZXZpc2VkIGJ5IFJlYWdsZSAkRGF0ZTogMjAwNS0wNy0xOSAxMjozMzowOSAtMDQwMCAoVHVlLCAxOSBKdWwgMjAwNSkgJA0KKz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KK1RoZSBmb2xsb3dpbmcgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBET00gc29mdHdhcmUsDQorZm9yIHRoZSBvcmcudzNjLmRvbS4qIHBhY2thZ2VzIGluIGphciBmaWxlIHhtbC1hcGlzLmphcjoNCisNCis8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwNCitXM0PCriBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UNCitodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxDQorVGhpcyB3b3JrIChhbmQgaW5jbHVkZWQgc29mdHdhcmUsIGRvY3VtZW50YXRpb24gc3VjaCBhcyBSRUFETUVzLA0KK29yIG90aGVyIHJlbGF0ZWQgaXRlbXMpIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycw0KK3VuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzDQord29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwNCitjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLg0KKw0KK1Blcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMNCitkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kDQord2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZQ0KK3RoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gb3INCitwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczoNCisNCisxLiBUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlDQorICAgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuIA0KKzIuIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLA0KKyAgIG9yIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCB0aGUgVzNDIFNvZnR3YXJlIFNob3J0IE5vdGljZQ0KKyAgIHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHdpdGhpbg0KKyAgIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZS4gDQorMy4gTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzLCBpbmNsdWRpbmcgdGhlDQorICAgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbg0KKyAgIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZC4pIA0KKyAgIA0KK1RISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTDQorTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUDQorTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSDQorUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UNCitBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuDQorDQorQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUg0KK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLg0KKw0KK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZw0KK29yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yDQorcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24NCit3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4NCisNCisNCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCisNCitUaGlzIGZvcm11bGF0aW9uIG9mIFczQydzIG5vdGljZSBhbmQgbGljZW5zZSBiZWNhbWUgYWN0aXZlIG9uIERlY2VtYmVyIDMxIDIwMDIuDQorVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuDQorYmUgdXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciB0aGFuIHRob3NlIG93bmVkIGJ5IHRoZSBXM0MsIHJlZmxlY3RzIHRoYXQgRVJDSU0NCitpcyBub3cgYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcyBzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uDQorb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIE90aGVyd2lzZSwgdGhpcw0KK3ZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIGlzIHdyaXR0ZW4gc28gYXMgdG8gcHJlc2VydmUNCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3MgYXNzZXNzbWVudCBvZiBHUEwgY29tcGF0aWJpbGl0eSBhbmQgT1NJJ3MNCitjZXJ0aWZpY2F0aW9uIHVuZGVyIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uLiBQbGVhc2Ugc2VlIG91ciBDb3B5cmlnaHQgRkFRDQorZm9yIGNvbW1vbiBxdWVzdGlvbnMgYWJvdXQgdXNpbmcgbWF0ZXJpYWxzIGZyb20gb3VyIHNpdGUsIGluY2x1ZGluZyBzcGVjaWZpYw0KK3Rlcm1zIGFuZCBjb25kaXRpb25zIGZvciBwYWNrYWdlcyBsaWtlIGxpYnd3dywgQW1heWEsIGFuZCBKaWdzYXcuIE90aGVyDQorcXVlc3Rpb25zIGFib3V0IHRoaXMgbm90aWNlIGNhbiBiZSBkaXJlY3RlZCB0byBzaXRlLXBvbGljeUB3My5vcmcuDQorIA0KKw0KK0pvc2VwaCBSZWFnbGUgPG1haWx0bzpzaXRlLXBvbGljeUB3My5vcmcgDQorTGFzdCByZXZpc2VkIGJ5IFJlYWdsZSAkRGF0ZTogMjAwNS0wNy0xOSAxMjozMzowOSAtMDQwMCAoVHVlLCAxOSBKdWwgMjAwNSkgJA0KKz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KK1RoZSBmb2xsb3dpbmcgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBTQVggc29mdHdhcmUsDQorZm9yIHRoZSBvcmcueG1sLnNheC4qIHBhY2thZ2VzIGluIGphciBmaWxlIHhtbC1hcGlzLmphcjoNCisNCis8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwNCitUaGlzIG1vZHVsZSwgYm90aCBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaXMgaW4gdGhlIFB1YmxpYyBEb21haW4sDQorYW5kIGNvbWVzIHdpdGggTk8gV0FSUkFOVFkuIFNlZSBodHRwOi8vd3d3LnNheHByb2plY3Qub3JnIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiANCis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCisNCisNCisNCisNCisNCisNCisNCisNCitUaGUgZm9sbG93aW5nIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgamFyIGZpbGUgDQoramF2YV9jdXAuamFyIC0gTEFMUiBQYXJzZXIgR2VuZXJhdG9yIGZvciBKYXZhKFRNKS4NCitTb3VyY2U6ICBodHRwOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvfmFwcGVsL21vZGVybi9qYXZhL0NVUA0KK1VzZWQgQnk6IFhTTFRDIGNvbXBvbmVudCBvZiB4bWwteGFsYW4vamF2YQ0KKw0KKzw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PA0KK0NVUCBQYXJzZXIgR2VuZXJhdG9yIENvcHlyaWdodCBOb3RpY2UsIExpY2Vuc2UsIGFuZCBEaXNjbGFpbWVyDQorDQorQ29weXJpZ2h0IDE5OTYtMTk5OSBieSBTY290dCBIdWRzb24sIEZyYW5rIEZsYW5uZXJ5LCBDLiBTY290dCBBbmFuaWFuIA0KKw0KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyANCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIA0KK3RoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aA0KK3RoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIA0KK2FwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgYXV0aG9ycyANCitvciB0aGVpciBlbXBsb3llcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgDQordG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIA0KKw0KK1RoZSBhdXRob3JzIGFuZCB0aGVpciBlbXBsb3llcnMgZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgdG8gDQordGhpcyBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IA0KK2FuZCBmaXRuZXNzLiBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9ycyBvciB0aGVpciBlbXBsb3llcnMgYmUgbGlhYmxlIA0KK2ZvciBhbnkgc3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGFueSBkYW1hZ2VzIA0KK3doYXRzb2V2ZXIgcmVzdWx0aW5nIGZyb20gbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgd2hldGhlciBpbiBhbiBhY3Rpb24gDQorb2YgY29udHJhY3QsIG5lZ2xpZ2VuY2Ugb3Igb3RoZXIgdG9ydGlvdXMgYWN0aW9uLCBhcmlzaW5nIG91dCBvZiBvciANCitpbiBjb25uZWN0aW9uIHdpdGggdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZiB0aGlzIHNvZnR3YXJlLiANCis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCisNCisNCisNCisNCisNCisNCisNCisNCitUaGUgZm9sbG93aW5nIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgamFyIGZpbGUgcnVudGltZS5qYXIgLSBDb21wb25lbnQNCitvZiBKYXZhQ3VwOiBMQUxSIFBhcnNlciBHZW5lcmF0b3IgZm9yIEphdmEoVE0pLg0KK1NvdXJjZTogIGh0dHA6Ly93d3cuY3MucHJpbmNldG9uLmVkdS9+YXBwZWwvbW9kZXJuL2phdmEvQ1VQDQorVXNlZCBCeTogWFNMVEMgY29tcG9uZW50IG9mIHhtbC14YWxhbi9qYXZhDQorDQorPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8DQorQ1VQIFBhcnNlciBHZW5lcmF0b3IgQ29weXJpZ2h0IE5vdGljZSwgTGljZW5zZSwgYW5kIERpc2NsYWltZXINCisocnVudGltZS5qYXIgY29tcG9uZW50KQ0KKw0KK0NvcHlyaWdodCAxOTk2LTE5OTkgYnkgU2NvdHQgSHVkc29uLCBGcmFuayBGbGFubmVyeSwgQy4gU2NvdHQgQW5hbmlhbiANCisNCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgDQorZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCANCit0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGgNCit0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciANCithcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgDQorb3IgdGhlaXIgZW1wbG95ZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIA0KK3RvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiANCisNCitUaGUgYXV0aG9ycyBhbmQgdGhlaXIgZW1wbG95ZXJzIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIHdpdGggcmVnYXJkIHRvIA0KK3RoaXMgc29mdHdhcmUsIGluY2x1ZGluZyBhbGwgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSANCithbmQgZml0bmVzcy4gSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvcnMgb3IgdGhlaXIgZW1wbG95ZXJzIGJlIGxpYWJsZSANCitmb3IgYW55IHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBhbnkgZGFtYWdlcyANCit3aGF0c29ldmVyIHJlc3VsdGluZyBmcm9tIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIHdoZXRoZXIgaW4gYW4gYWN0aW9uIA0KK29mIGNvbnRyYWN0LCBuZWdsaWdlbmNlIG9yIG90aGVyIHRvcnRpb3VzIGFjdGlvbiwgYXJpc2luZyBvdXQgb2Ygb3IgDQoraW4gY29ubmVjdGlvbiB3aXRoIHRoZSB1c2Ugb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZS4gDQorPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+DQorDQorDQorDQorDQorDQorDQorDQorDQorVGhlIGZvbGxvd2luZyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIEpMRVggamFyIGZpbGUgDQorSkxleC5qYXIgLSBBIExleGljYWwgQW5hbHl6ZXIgR2VuZXJhdG9yIGZvciBKYXZhKFRNKS4NCitTb3VyY2U6ICBodHRwOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvfmFwcGVsL21vZGVybi9qYXZhL0pMZXgNCitVc2VkIEJ5OiBYU0xUQyBjb21wb25lbnQgb2YgeG1sLXhhbGFuL2phdmENCisNCis8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwNCitKTEVYIENPUFlSSUdIVCBOT1RJQ0UsIExJQ0VOU0UgQU5EIERJU0NMQUlNRVIuDQorDQorQ29weXJpZ2h0IDE5OTYtMjAwMCBieSBFbGxpb3QgSm9lbCBCZXJrIGFuZCBDLiBTY290dCBBbmFuaWFuIA0KKw0KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyANCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIA0KK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIA0KK3RoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhbmQgDQord2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgDQorbmFtZSBvZiB0aGUgYXV0aG9ycyBvciB0aGVpciBlbXBsb3llcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgDQorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCANCit3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIA0KKw0KK1RoZSBhdXRob3JzIGFuZCB0aGVpciBlbXBsb3llcnMgZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgDQordG8gdGhpcyBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCANCitmaXRuZXNzLiBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9ycyBvciB0aGVpciBlbXBsb3llcnMgYmUgbGlhYmxlIGZvciBhbnkNCitzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciByZXN1bHRpbmcgDQorZnJvbSBsb3NzIG9mIHVzZSwgZGF0YSBvciBwcm9maXRzLCB3aGV0aGVyIGluIGFuIGFjdGlvbiBvZiBjb250cmFjdCwgDQorbmVnbGlnZW5jZSBvciBvdGhlciB0b3J0aW91cyBhY3Rpb24sIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24NCit3aXRoIHRoZSB1c2Ugb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZS4gDQorDQorSmF2YSBpcyBhIHRyYWRlbWFyayBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIFJlZmVyZW5jZXMgdG8gdGhlIEphdmEgDQorcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW4gcmVsYXRpb24gdG8gSkxleCBhcmUgbm90IG1lYW50IHRvIGltcGx5IHRoYXQgDQorU3VuIGVuZG9yc2VzIHRoaXMgcHJvZHVjdC4gDQorPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+DQorDQorDQorDQorDQorDQorDQorDQorDQorVGhlIGZvbGxvd2luZyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGphciBmaWxlIA0KK3N0eWxlYm9vay0xLjAtYjNfeGFsYW4tMi5qYXIgLSBUb29sIGZvciBnZW5lcmF0aW5nIFhhbGFuIGRvY3VtZW50YXRpb24uIA0KK0ludGVncmF0ZWQgd2l0aCBYYWxhbi1KYXZhIDIgYW5kIFhlcmNlcyAyLg0KK1NvdXJjZTogIGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMveG1sL3N0eWxlYm9vay8NCitVc2VkIGJ5OiBYYWxhbi1KYXZhIDIsIFhhbGFuLUMrKw0KKw0KKzw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PA0KKy8qDQorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQ0KKyAqDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyANCisgKiByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyAqIGFyZSBtZXQ6DQorICoNCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gDQorICoNCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiAgICBkaXN0cmlidXRpb24uDQorICoNCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwNCisgKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgDQorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlDQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iDQorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLA0KKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuDQorICoNCisgKiA0LiBUaGUgbmFtZXMgIlhhbGFuIiwgIlhlcmNlcyIsIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QNCisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMNCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gDQorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuDQorICoNCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwNCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4NCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQNCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUw0KKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUg0KKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRg0KKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQNCisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQNCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCisgKiBTVUNIIERBTUFHRS4NCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkNCisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMNCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbA0KKyAqIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuLCBodHRwOi8vd3d3LmFwYWNoZS5vcmcuICBGb3IgbW9yZQ0KKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQ0KKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4NCisgKi8NCis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvbGliL1JFQURNRS5UWFQgYi9yZWxlYXNlL2phdmEvbGliL1JFQURNRS5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1MDA3YQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9saWIvUkVBRE1FLlRYVApAQCAtMCwwICsxLDYgQEAKK0NvcHlyaWdodCAoQykgMjAxMyBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworeGFsYW4gYW5kIHhlcmNlcyBqYXJzIGFyZSBOT1QgcmVkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIElDVS4KKworTm90ZTogaWYgeW91IGhhdmUgdHJvdWJsZSAoaS5lLiBubyBvdXRwdXQpIHRyeSBkb3dubG9hZGluZyB4YWxhbi5qYXIgYW5kIHhlcmNlc0ltcGwuamFyIGludG8gdGhpcyBkaXJlY3RvcnkgZnJvbSBodHRwOi8veGFsYW4uYXBhY2hlLm9yZy94YWxhbi1qL2Rvd25sb2Fkcy5odG1sI2xhdGVzdC1yZWxlYXNlCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9saWIvc2VyaWFsaXplci5qYXIgYi9yZWxlYXNlL2phdmEvbGliL3NlcmlhbGl6ZXIuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTA3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvbGliL3NlcmlhbGl6ZXIuamFyCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmFkNGY3N2Y4OTg1MDMyMzY3ZjFiY2Q4ZGIzOThlZTNiNDIxZTM5ZDAzMjc0NDQ1YzliODRjZTc2NGJiY2Q2NTgKK3NpemUgMjc4MjgxCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvbGliL3hhbGFuLmphciBiL3JlbGVhc2UvamF2YS9saWIveGFsYW4uamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzQ2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvbGliL3hhbGFuLmphcgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo0NTA4YTU0MWM4Y2IxM2Y0Yjk4YzZkOTg3YjcyMGRlZDM2YWZmMmQ3ZTBiN2IzMDhjYzM5MDMyYWExMTM3ZWNmCitzaXplIDE3NjA4ODcKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9saWIveGVyY2VzSW1wbC5qYXIgYi9yZWxlYXNlL2phdmEvbGliL3hlcmNlc0ltcGwuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YmExZTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvbGliL3hlcmNlc0ltcGwuamFyCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjljNTUwNTFkOTQ3M2YxYThkMjdiMDBlZWViMTM5ZmQ4OTk4M2NkOTNhOGI4ZGExODdhYmFkNTNlYWE4NGMzZDQKK3NpemUgMTIyMzg3NwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL3JlYWRtZS50eHQgYi9yZWxlYXNlL2phdmEvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTVjNDAyCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3JlYWRtZS50eHQKQEAgLTAsMCArMSwzMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitBUEkgQ2hhbmdlIFJlcG9ydDoKKworQSB0b29sIHRvIGdlbmVyYXRlIGEgcmVwb3J0IG9mIEFQSSBzdGF0dXMgY2hhbmdlcyBiZXR3ZWVuIHR3byBJQ1U0QyByZWxlYXNlcy4KKyhJQ1U0SiBoYXMgYSBidWlsdGluIGNoYW5nZSByZXBvcnQgZ2VuZXJhdG9yKQorCitSZXF1aXJlbWVudHM6CisgIC0gRXZlcnl0aGluZyBuZWVkZWQgdG8gYnVpbGQgSUNVNEMgZnJvbSBhIGNvbW1hbmQgbGluZSAoVU5JWCkgZW52aXJvbm1lbnQKKyAgLSBEb3h5Z2VuIChmb3IgZ2VuZXJhdGluZyBkb2NzKS4KKyAgICAgRG94eWdlbiAxLjcuNS4xIGlzIHJlY29tbWVuZGVkIGZvciBJQ1UgQVBJIGRvY3MsIAorICAgICBidXQgYW4gb2xkZXIgRG94eWdlbiBtYXkgd29yayBmb3IgdGhlIEFQSSBDaGFuZ2UgUmVwb3J0LgorICAtIEphdmEgSkRLIDEuNSsKKyAgLSBBcGFjaGUgQW50CisgIC0gTm90ZTogaWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIG51bGwgb3V0cHV0LCBwdXQgeGFsYW4uamFyIGFuZCB4ZXJjZXNJbXBsLmphciBmcm9tIDxodHRwOi8veGFsYW4uYXBhY2hlLm9yZy94YWxhbi1qL2Rvd25sb2Fkcy5odG1sI2xhdGVzdC1yZWxlYXNlPiBpbnRvIC4vbGliLworCitUbyB1c2UgdGhlIHV0aWxpdHk6CisgMS4gUHV0IGJvdGggb2xkIGFuZCBuZXcgSUNVIHNvdXJjZSB0cmVlcyBvbiB5b3VyIHN5c3RlbQorIDIuIFJ1biAiY29uZmlndXJlIiBpbiBib3RoIG9sZCBhbmQgbmV3ICh5b3UgY2FuIHVzZSBhbnkgbWl4dHVyZSBvZiBpbi1zb3VyY2UgYW5kIG91dC1vZi1zb3VyY2UgYnVpbGRzKS4gRG94eWdlbiBtdXN0IGJlIGZvdW5kIGR1cmluZyB0aGUgY29uZmlndXJlIHBoYXNlLCBidXQgeW91IGRvIG5vdCBuZWVkIHRvIGJ1aWxkIHRoZSBzdGFuZGFyZCBBUEkgZG9jcy4KKyAzLiBjcmVhdGUgYSBNYWtlZmlsZS5sb2NhbCBpbiB0aGlzIHJlYWRtZSdzIGRpcmVjdG9yeSAodG9vbHMvcmVsZWFzZS9qYXZhLykgCisgICAgICAgICAgICB3aXRoIGp1c3QgdGhlc2UgdHdvIGxpbmVzOgorCQkJT0xEX0lDVT0veHNybC9FL2ljdS0xLjAKKwkJCU5FV19JQ1U9L3hzcmwvRS9pY3UtNi44CisJICAgKCB3aGVyZSB0aGVzZSBhcmUgdGhlIHBhdGhzIHRvIHRoZSBwYXJlbnQgb2YgJ3NvdXJjZScsIGV0YykgICAgIAorICAgICAgICAgICBJZiB5b3VyIElDVSBpcyBhbiBvdXQtb2Ytc291cmNlLWJ1aWxkLCBhZGQgdGhlc2UgdHdvIGxpbmVzCisgICAgICAgICAgIGluZGljYXRpbmcgdGhlIGJ1aWxkIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgT0xEX0lDVV9CVUlMRD0veHNybC9FL2ljdS1idWlsZC1tNDgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FV19JQ1VfQlVJTEQ9L3hzcmwvRS9pY3UtYnVpbGQKKyA0LiBmcm9tIHRoaXMgZGlyZWN0b3J5LCAodG9vbHMvcmVsZWFzZS9qYXZhLykgcnVuIE1ha2UgdG8gYnVpbGQgZG9jczoKKyAgICAgICAgICAgIG1ha2UKKyA1LiBUaGlzIHdpbGwgY3JlYXRlIGFuICdBUElDaGFuZ2VSZXBvcnQuaHRtbCcgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gTG9vayBpdCBvdmVyLCBhbmQgdGhlbiBjaGVjayBpdCBpbiB0byAke05FV19JQ1V9L0FQSUNoYW5nZVJlcG9ydC5odG1sIChwYXJlbnQgb2YgaWN1L3NvdXJjZSkuCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL1N0YWJsZUFQSS5qYXZhIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9TdGFibGVBUEkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGNmMzAzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9TdGFibGVBUEkuamF2YQpAQCAtMCwwICsxLDEwNzEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENyZWF0ZWQgb24gMjAwNi03LTI0ID8KKyAqIE1vdmVkIGZyb20gSmF2YSAxLjQgdG8gMS41PyBBUEkgYnkgc3JsIDIwMDktMDEtMTYKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbHMuZG9jczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0OworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01SZXN1bHQ7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7CitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoOworaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aENvbnN0YW50czsKK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEZhY3Rvcnk7CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworCisvKioKKyBBIHV0aWxpdHkgdG8gcmVwb3J0IHRoZSBzdGF0dXMgY2hhbmdlIGJldHdlZW4gdHdvIElDVSByZWxlYXNlcworCitUbyB1c2UgdGhlIHV0aWxpdHkKKzEuIEdlbmVyYXRlIHRoZSBYTUwgZmlsZXMKKyAgICAocHV0IHRoZSB0d28gSUNVIHJlbGVhc2VzIG9uIHlvdXIgbWFjaGluZSBeX14gKQorICAgIChnZW5lcmF0ZSAnRG94eWdlbicgZmlsZSBvbiBXaW5kb3dzIHBsYXRmb3JtIHdpdGggQ3lnd2luJ3MgaGVscCkKKyAgICBFZGl0IHRoZSBnZW5lcmF0ZWQgJ0RveHlnZW4nIGZpbGUgdW5kZXIgSUNVNEMgc291cmNlIGRpcmVjdG9yeQorICAgIGEpIEdFTkVSQVRFX1hNTCAgICAgICAgICAgPSBZRVMKKyAgICBiKSBTeW5jIHRoZSBBTElBU0VTIGRlZmluaWF0aW9uCisgICAgICAgKEZvciBleGFtcGxlLCBjb3B5IHRoZSBBTElBU0VTIGRlZmluYXRpb24gZnJvbSBJQ1UgMy42CisgICAgICAgRG94eWdlbiBmaWxlIHRvIElDVSAzLjQgRG94eWdlbiBmaWxlLikKKyAgICBjKSBnZXJlbmF0ZSB0aGUgWE1MIGZpbGVzCisyLiBCdWlsZCB0aGUgdG9vbAorICAgIERvd25sb2FkIEFwYWNoZSBYZXJjZXMgSmF2YSBQYXJzZXIKKyAgICBCdWlsZCB0aGlzIGZpbGUgd2l0aCB0aGUgbGlicmFyeQorMy4gRWRpdCB0aGUgYXBpLXJlcG9ydC1jb25maWcueG1sIGZpbGUgJiBDaGFuZ2UgdGhlIGZpbGUgYWNjb3JkaW5nIHlvdXIgcmVhbCBjb25maWd1cmF0aW9uCis0LiBSdW4gdGhlIHRvb2wgdG8gZ2VuZXJhdGUgdGhlIHJlcG9ydC4KKworICogQGF1dGhvciBSYXltb25kIFlhbmcKKyAqLworcHVibGljIGNsYXNzIFN0YWJsZUFQSSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DX0ZPTERFUiA9ICJkb2NGb2xkZXIiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFWF9YTUwgPSAiaW5kZXgueG1sIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX1NQQUNFX1BSRUZJWCA9ICJJQ1UgIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTElaRVJfWFBBVEggPSAiaW5pdGlhbGl6ZXIiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1hQQVRIID0gIm5hbWUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVkVSU0lPTkEgPSAidXZlcm51bV84aC54bWwiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVkVSU0lPTkIgPSAidXZlcnNpb25fOGgueG1sIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVV9JQ1VfVkVSU0lPTiA9ICJVX0lDVV9WRVJTSU9OIjsKKyAgICAvKiBJQ1UgNC40KyAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJQ1VfVkVSU0lPTl9YUEFUSEEgPSAiL2RveHlnZW4vY29tcG91bmRkZWZbQGlkPSd1dmVybnVtXzhoJ11bQGtpbmQ9J2ZpbGUnXS9zZWN0aW9uZGVmW0BraW5kPSdkZWZpbmUnXSI7CisJLyogSUNVIDw0LjQgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX1ZFUlNJT05fWFBBVEhCID0gIi9kb3h5Z2VuL2NvbXBvdW5kZGVmW0BpZD0ndXZlcnNpb25fOGgnXVtAa2luZD0nZmlsZSddL3NlY3Rpb25kZWZbQGtpbmQ9J2RlZmluZSddIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSUNVX1ZFUlNJT05fWFBBVEggPSBJQ1VfVkVSU0lPTl9YUEFUSEE7CisKKwlwcml2YXRlIFN0cmluZyBsZWZ0VmVyOworICAgIHByaXZhdGUgRmlsZSBsZWZ0RGlyID0gbnVsbDsKKy8vICAgIHByaXZhdGUgU3RyaW5nIGxlZnRTdGF0dXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbGVmdE1pbGVzdG9uZSA9ICIiOworCisgICAgcHJpdmF0ZSBTdHJpbmcgcmlnaHRWZXI7CisgICAgcHJpdmF0ZSBGaWxlIHJpZ2h0RGlyID0gbnVsbDsKKy8vICAgIHByaXZhdGUgU3RyaW5nIHJpZ2h0U3RhdHVzOworICAgIHByaXZhdGUgU3RyaW5nIHJpZ2h0TWlsZXN0b25lID0gIiI7CisKKyAgICBwcml2YXRlIElucHV0U3RyZWFtIGR1bXBDcHBYc2x0U3RyZWFtID0gbnVsbDsKKwlwcml2YXRlIElucHV0U3RyZWFtIGR1bXBDWHNsdFN0cmVhbSA9IG51bGw7CisJcHJpdmF0ZSBJbnB1dFN0cmVhbSByZXBvcnRYc2xTdHJlYW0gPSBudWxsOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDWFNMVCA9ICJkdW1wQWxsQ0Z1bmMueHNsdCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENQUFhTTFQgPSAiZHVtcEFsbENwcEZ1bmMueHNsdCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJQVFhTTFQgPSAiZ2VuUmVwb3J0LnhzbHQiOworCisgICAgcHJpdmF0ZSBGaWxlIGR1bXBDcHBYc2x0OworICAgIHByaXZhdGUgRmlsZSBkdW1wQ1hzbHQ7CisgICAgcHJpdmF0ZSBGaWxlIHJlcG9ydFhzbDsKKyAgICBwcml2YXRlIEZpbGUgcmVzdWx0RmlsZTsKKworCisgICAgc3RhdGljIE1hcDxTdHJpbmcsU2V0PFN0cmluZz4+IHNpbXBsaWZpY2F0aW9ucyA9IG5ldyBUcmVlTWFwPFN0cmluZyxTZXQ8U3RyaW5nPj4oKTsKKworICAgIHN0YXRpYyB2b2lkIGFkZFNpbXBsaWZpY2F0aW9uKFN0cmluZyBwcm90b3R5cGUwLCBTdHJpbmcgcHJvdG90eXBlKSB7CisgICAgICAgIFNldDxTdHJpbmc+IHMgPSBzaW1wbGlmaWNhdGlvbnMuZ2V0KHByb3RvdHlwZSk7CisgICAgICAgIGlmKHM9PW51bGwpIHsKKyAgICAgICAgICAgIHMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KCk7CisgICAgICAgICAgICBzaW1wbGlmaWNhdGlvbnMucHV0KHByb3RvdHlwZSwgcyk7CisgICAgICAgIH0KKyAgICAgICAgcy5hZGQocHJvdG90eXBlMCk7CisgICAgfQorCisgICAgc3RhdGljIFNldDxTdHJpbmc+IGdldENoYW5nZWRTaW1wbGlmaWNhdGlvbnMoKSB7CisgICAgICAgIFNldDxTdHJpbmc+IG91dHB1dCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKyAgICAgICAgZm9yKE1hcC5FbnRyeTxTdHJpbmcsU2V0PFN0cmluZz4+IGUgOiBzaW1wbGlmaWNhdGlvbnMuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgaWYoZS5nZXRWYWx1ZSgpLnNpemUoKT4xKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChlLmdldEtleSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0cHV0OworICAgIH0KKworCisgICAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdEZvdW5kID0gIihtaXNzaW5nKSI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB7CisKKyAgICAgICAgU3RhYmxlQVBJIHQgPSBuZXcgU3RhYmxlQVBJKCk7CisgICAgICAgIHQucnVuKGFyZ3MpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICB0aGlzLnBhcnNlQXJncyhhcmdzKTsKKyAgICAgICAgU2V0PEpvaW5lZEZ1bmN0aW9uPiBmdWxsID0gbmV3IFRyZWVTZXQ8Sm9pbmVkRnVuY3Rpb24+KCk7CisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJSZWFkaW5nIEMrKy4uLiIpOworICAgICAgICBTZXQ8Sm9pbmVkRnVuY3Rpb24+IHNldENwcCA9IHRoaXMuZ2V0RnVsbExpc3QoZHVtcENwcFhzbHRTdHJlYW0sIENQUFhTTFQpOworICAgICAgICBmdWxsLmFkZEFsbChzZXRDcHApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlYWQgIitzZXRDcHAuc2l6ZSgpICsiIEMrKy4gIFJlYWRpbmcgQzoiKTsKKworICAgICAgICBTZXQ8Sm9pbmVkRnVuY3Rpb24+IHNldEMgPSB0aGlzLmdldEZ1bGxMaXN0KGR1bXBDWHNsdFN0cmVhbSwgQ1hTTFQpOworICAgICAgICBmdWxsLmFkZEFsbChzZXRDKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlYWQgIitzZXRDLnNpemUoKSArIiBDLiBTZXR0aW5nIG5vZGU6Iik7CisKKyAgICAgICAgTm9kZSBmdWxsTGlzdCA9IHRoaXMuc2V0VG9Ob2RlKGZ1bGwpOworLy8gICAgICAgIHQuZHVtcE5vZGUoZnVsbExpc3QsIiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm9kZSBzZXQuIFJlcG9ydGluZzoiKTsKKworICAgICAgICB0aGlzLnJlcG9ydFNlbGVjdGVkRnVuKGZ1bGxMaXN0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lLiBQbGVhc2UgY2hlY2sgIiArIHRoaXMucmVzdWx0RmlsZSk7CisKKyAgICAgICAgU2V0PFN0cmluZz4gY2hhbmdlZFNpbXAgPSBnZXRDaGFuZ2VkU2ltcGxpZmljYXRpb25zKCk7CisgICAgICAgIGlmKCFjaGFuZ2VkU2ltcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tIGNoYW5nZWQgc2ltcGxpZmljYXRpb25zIC0tLSIpOworICAgICAgICAgICAgZm9yKFN0cmluZyBrIDogY2hhbmdlZFNpbXApIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oayk7CisgICAgICAgICAgICAgICAgZm9yKFN0cmluZyBzIDogc2ltcGxpZmljYXRpb25zLmdldChrKSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0IitzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHByaXZhdGUgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncyl7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIGFyZyA9IGFyZ3NbaV07CisgICAgICAgICAgICBpZiAoYXJnID09IG51bGwgfHwgYXJnLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmcuZXF1YWxzKCItLWhlbHAiKSApIHsKKyAgICAgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZy5lcXVhbHMoIi0tb2xkdmVyIikgKSB7CisgICAgICAgICAgICAgICAgbGVmdFZlciA9IGFyZ3NbKytpXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1vbGRkaXIiKSApIHsKKyAgICAgICAgICAgICAgICBsZWZ0RGlyID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1uZXd2ZXIiKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0VmVyID0gYXJnc1srK2ldOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcuZXF1YWxzKCItLW5ld2RpciIpKSB7CisgICAgICAgICAgICAgICAgcmlnaHREaXIgPSBuZXcgRmlsZShhcmdzWysraV0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcuZXF1YWxzKCItLWN4c2x0IikgKSB7CisgICAgICAgICAgICAgICAgZHVtcENYc2x0ID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1jcHB4c2x0IikgKSB7CisgICAgICAgICAgICAgICAgZHVtcENwcFhzbHQgPSBuZXcgRmlsZShhcmdzWysraV0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcuZXF1YWxzKCItLXJlcG9ydHhzbHQiKSApIHsKKyAgICAgICAgICAgICAgICByZXBvcnRYc2wgPSBuZXcgRmlsZShhcmdzWysraV0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcuZXF1YWxzKCItLXJlc3VsdGZpbGUiKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdEZpbGUgPSBuZXcgRmlsZShhcmdzWysraV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd24gb3B0aW9uOiAiK2FyZyk7CisgICAgICAgICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkdW1wQ3BwWHNsdFN0cmVhbSA9IGxvYWRTdHJlYW0oQ1BQWFNMVCwgIi0tY3BweHNsdCIsIGR1bXBDcHBYc2x0KTsKKyAgICAgICAgZHVtcENYc2x0U3RyZWFtPSBsb2FkU3RyZWFtKENYU0xULCAiLS1jeHNsdCIsIGR1bXBDWHNsdCk7CisgICAgICAgIHJlcG9ydFhzbFN0cmVhbT0gbG9hZFN0cmVhbShSUFRYU0xULCAiLS1yZXBvcnR4c2x0IiwgcmVwb3J0WHNsKTsKKworICAgICAgICBsZWZ0VmVyID0gdHJpbUlDVShzZXRWZXIobGVmdFZlciwgIm9sZCIsIGxlZnREaXIpKTsKKyAgICAgICAgcmlnaHRWZXIgPSB0cmltSUNVKHNldFZlcihyaWdodFZlciwgIm5ldyIsIHJpZ2h0RGlyKSk7CisgICAgfQorCisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCXByaXZhdGUgSW5wdXRTdHJlYW0gbG9hZFN0cmVhbShTdHJpbmcgbmFtZSwgU3RyaW5nIGFyZ05hbWUsIEZpbGUgYXJnRmlsZSkgeworICAgIAlJbnB1dFN0cmVhbSBzdHJlYW0gPSBudWxsOworICAgIAlpZihhcmdGaWxlICE9IG51bGwpIHsKKyAgICAJCXRyeSB7CisJICAgIAkJc3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShhcmdGaWxlKTsKKwkgICAgCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCSAgICAJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvcjogQ291bGQgbm90IGxvYWQgIiArIGFyZ05hbWUgKyIgIiArIGFyZ0ZpbGUuZ2V0UGF0aCgpICsgIiAtICIgKyBpb2UudG9TdHJpbmcoKSwgaW9lKTsKKwkgICAgCX0KKyAgICAJfSBlbHNlIHsKKyAgICAgICAgCXN0cmVhbSA9IFN0YWJsZUFQSS5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKG5hbWUpOworICAgICAgICAJaWYoc3RyZWFtID09IG51bGwpIHsKKyAgICAgICAgCQl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiTm8gcmVzb3VyY2UgZm91bmQgZm9yICIgKyBTdGFibGVBUEkuY2xhc3MuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLyIrIG5hbWUgKyAiIC0gICB1c2UgIiArIGFyZ05hbWUpOworICAgICAgICAJfSBlbHNlIHsKKyAgICAgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCByZXNvdXJjZSAiICsgbmFtZSk7CisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cmVhbTsKKwl9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiB3YXJuU2V0ID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3YXJuKFN0cmluZyB3aGF0KSB7CisgICAgICAgIGlmKCF3YXJuU2V0LmNvbnRhaW5zKHdoYXQpKSB7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhcm5pbmc6ICIrd2hhdCk7CisgICAgICAgICAgICAgICBpZih3YXJuU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIChUaGVzZSB3YXJuaW5ncyBhcmUgb25seSBwcmludGVkIG9uZSB0aW1lIGVhY2guKSIpOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgd2FyblNldC5hZGQod2hhdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpZFdhcm5TdXBlclRyaW0gPSBmYWxzZTsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmltSUNVKFN0cmluZyB2ZXIpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIElDVV8gPSBJQ1VfU1BBQ0VfUFJFRklYOworICAgICAgICBmaW5hbCBTdHJpbmcgSUNVID0gIklDVSI7CisgICAgICAgIGlmKHZlciAhPSBudWxsKSB7IC8vIHRyaW0gZXZlcnl0aGluZyBiZWZvcmUgdGhlICdJQ1UuLi4nCisgICAgICAgICAgICB2ZXIgPSB2ZXIudHJpbSgpOworICAgICAgICAgICAgaW50IGljdWlkeCA9IHZlci5sYXN0SW5kZXhPZihJQ1VfKTsKKyAgICAgICAgICAgIGludCBpY3VpZHgxID0gdmVyLmxhc3RJbmRleE9mKElDVSk7CisgICAgICAgICAgICBpZihpY3VpZHg+PTApIHsKKyAgICAgICAgICAgICAgICB3YXJuKCJUcmltbWluZyB0ZXh0IGJlZm9yZSAnSUNVJzogIiArIHZlci5zdWJzdHJpbmcoMCxpY3VpZHgrSUNVXy5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIHZlciA9IHZlci5zdWJzdHJpbmcoaWN1aWR4K0lDVV8ubGVuZ3RoKCkpLnRyaW0oKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihpY3VpZHgxPj0wKSB7CisgICAgICAgICAgICAgICAgd2FybigiVHJpbW1pbmcgdGV4dCBiZWZvcmUgJ0lDVSAnOiAiICsgdmVyLnN1YnN0cmluZygwLGljdWlkeDErSUNVLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgdmVyID0gdmVyLnN1YnN0cmluZyhpY3VpZHgxK0lDVS5sZW5ndGgoKSkudHJpbSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhbHdheXMgdHJpbSBhbnl0aGluZyBhZnRlciBhIHZlcnNpb24gIworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBuOworICAgICAgICAgICAgICAgIGZvcihuPXZlci5sZW5ndGgoKS0xO24+MCAmJiAoKHZlci5jaGFyQXQobik9PScuJykgfHwgQ2hhcmFjdGVyLmlzRGlnaXQodmVyLmNoYXJBdChuKSkpIDtuLS0pCisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICBpZihuPjApIHsKKyAgICAgICAgICAgICAgICAgICAgd2FybigiVHJpbW1pbmcgZXh0cmFuZW91cyB0ZXh0IGFmdGVyIHZlcnNpb246ICciICsgdmVyLnN1YnN0cmluZyhuKzEsdmVyLmxlbmd0aCgpKSArICInIik7CisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5zdWJzdHJpbmcobisxKS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgIGlmKCFkaWRXYXJuU3VwZXJUcmltKSB7CisgICAgICAgICAgICAgICAgCWRpZFdhcm5TdXBlclRyaW0gPSB0cnVlOworICAgICAgICAgICAgICAgIAl3YXJuKCJQbGVhc2UgT05MWSB1c2U6ICAnQHdoYXRldmVyIElDVSBYLlkuWiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVyOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIHNldFZlcihTdHJpbmcgcHJldlZlciwgU3RyaW5nIHdoaWNoVmVyLCBGaWxlIGRpcikgeworCSAgICBTdHJpbmcgVVZFUlNJT04gPSBVVkVSU0lPTkE7CisgICAgCWlmKGRpcj09bnVsbCkgeworICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCItLSIrd2hpY2hWZXIrImRpciBub3Qgc2V0LiIpOworICAgIAkJcHJpbnRVc2FnZSgpOyAvKiBleGl0cyAqLworICAgIAl9IGVsc2UgaWYoIWRpci5leGlzdHMoKXx8IWRpci5pc0RpcmVjdG9yeSgpKSB7CisgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tIit3aGljaFZlcisiZGlyPSIrZGlyLmdldE5hbWUoKSsiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeS4iKTsKKyAgICAJCXByaW50VXNhZ2UoKTsgLyogZXhpdHMgKi8KKyAgICAJfQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgLy8gbG9va2luZyBmb3I6IDxuYW1lPlVfSUNVX1ZFUlNJT048L25hbWU+IGluIHV2ZXJzaW9uXzhoLnhtbDogICAgICAgIDxpbml0aWFsaXplcj4mcXVvdDszLjguMSZxdW90OzwvaW5pdGlhbGl6ZXI+CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBGaWxlIHZlckZpbGUgPSBuZXcgRmlsZShkaXIsIFVWRVJTSU9OKTsKKwkJICAgIGlmKCF2ZXJGaWxlLmV4aXN0cygpKSB7CisJCQkJVVZFUlNJT049VVZFUlNJT05COworCQkJCUlDVV9WRVJTSU9OX1hQQVRIPUlDVV9WRVJTSU9OX1hQQVRIQjsKKwkJCQl2ZXJGaWxlID0gbmV3IEZpbGUoZGlyLCBVVkVSU0lPTik7CisJCSAgICB9IGVsc2UgeworCQkJCUlDVV9WRVJTSU9OX1hQQVRIPUlDVV9WRVJTSU9OX1hQQVRIQTsKKwkJICAgIH0KKyAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IGdldERvY3VtZW50KHZlckZpbGUpOworICAgICAgICAgICAgRE9NU291cmNlIHV2ZXJudW1faCA9IG5ldyBET01Tb3VyY2UoZG9jKTsKKyAgICAgICAgICAgIFhQYXRoIHhwYXRoID0gWFBhdGhGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WFBhdGgoKTsKKworICAgICAgICAgICAgTm9kZSBkZWZpbmVzID0gKE5vZGUpeHBhdGguZXZhbHVhdGUoSUNVX1ZFUlNJT05fWFBBVEgsIHV2ZXJudW1faC5nZXROb2RlKCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOworCisJICAgIGlmKGRlZmluZXM9PW51bGwpIHsKKwkgICAgCVN5c3RlbS5lcnIucHJpbnRsbigiY2FuJ3QgbG9hZCBmcm9tICIrdmVyRmlsZS5nZXROYW1lKCkrIjoiK0lDVV9WRVJTSU9OX1hQQVRIKTsKKwkgICAgfQorCisgICAgICAgICAgICBOb2RlTGlzdCBuTGlzdCA9IGRlZmluZXMuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IHJlc3VsdD09bnVsbCYmIChpIDwgbkxpc3QuZ2V0TGVuZ3RoKCkpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2RlIGxuID0gbkxpc3QuaXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZighIm1lbWJlcmRlZiIuZXF1YWxzKGxuLmdldE5vZGVOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBOb2RlIG5hbWUgPSAoTm9kZSl4cGF0aC5ldmFsdWF0ZShOQU1FX1hQQVRILCBsbiwgWFBhdGhDb25zdGFudHMuTk9ERSk7CisgICAgICAgICAgICAgICAgaWYobmFtZT09bnVsbCkgY29udGludWU7CisKKyAgICAgICAgICAgICAgIC8vIFN5c3RlbS5lcnIucHJpbnRsbigiR290dGEgbm9kZTogIiArIG5hbWUpOworCisgICAgICAgICAgICAgICAgTm9kZSBuYW1lVmFsID0gbmFtZS5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYobmFtZVZhbD09bnVsbCkgbmFtZVZhbCA9IG5hbWU7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZVN0ciA9IG5hbWVWYWwuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYobmFtZVN0cj09bnVsbCkgY29udGludWU7CisKKyAgICAgICAgICAgICAgIC8vIFN5c3RlbS5lcnIucHJpbnRsbigiR290dGEgbmFtZTogIiArIG5hbWVTdHIpOworCisgICAgICAgICAgICAgICAgaWYobmFtZVN0ci50cmltKCkuZXF1YWxzKFVfSUNVX1ZFUlNJT04pKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgaW5pdGlhbGl6ZXIgPSAoTm9kZSl4cGF0aC5ldmFsdWF0ZShJTklUSUFMSVpFUl9YUEFUSCwgbG4sIFhQYXRoQ29uc3RhbnRzLk5PREUpOworICAgICAgICAgICAgICAgICAgICBpZihpbml0aWFsaXplcj09bnVsbCkgU3lzdGVtLmVyci5wcmludGxuKCJpbml0aWFsaXplciB3aXRoIG5vIHZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgaW5pdFZhbCA9IGluaXRpYWxpemVyLmdldEZpcnN0Q2hpbGQoKTsKKy8vICAgICAgICAgICAgICAgICAgICBpZihpbml0VmFsPT1udWxsKSBpbml0VmFsID0gaW5pdGlhbGl6ZXI7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbml0U3RyID0gaW5pdFZhbC5nZXROb2RlVmFsdWUoKS50cmltKCkucmVwbGFjZUFsbCgiXCIiLCIiKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSUNVX1NQQUNFX1BSRUZJWCtpbml0U3RyOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkRldGVjdGVkICIrd2hpY2hWZXIgKyAiIHZlcnNpb246ICIgKyByZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaWxlc3RvbmVPZiA9ICIiOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86ICAjMSB1c2UgVVZlcnNpb25JbmZvLiAodGhpcyB0b29sIGRvZXNuJ3QgZGVwZW5kIG9uIElDVTRKIHlldCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICMyIG1vdmUgdGhpcyB0byBhIHV0aWxpdHkgZnVuY3Rpb246IHN0cmlwLyJleHBsYWluIiBhbiBJQ1UgdmVyc2lvbiAjLgorICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3RhcnRzV2l0aCgiSUNVICIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmVyc1tdID0gcmVzdWx0LnN1YnN0cmluZyg0KS5zcGxpdCgiXFwuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFqID0gSW50ZWdlci5wYXJzZUludCh2ZXJzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW4gPSB2ZXJzLmxlbmd0aD4xP0ludGVnZXIucGFyc2VJbnQodmVyc1sxXSk6MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaWNyID0gdmVycy5sZW5ndGg+Mj9JbnRlZ2VyLnBhcnNlSW50KHZlcnNbMl0pOjA7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0Y2ggPSB2ZXJzLmxlbmd0aD4zP0ludGVnZXIucGFyc2VJbnQodmVyc1szXSk6MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiID09IFsiK3ZlcnMudG9TdHJpbmcoKSsiXSAiICsgbWFqICsgIiAuICIgKyBtaW4gKyAiIC4gIiArIG1pY3IgKyAiIC4gIiArIHBhdGNoICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihtYWogPj0gNDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXcgc2NoZW1lOiA0OSBhbmQgZm9sbG93aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cnVuY1ZlcnNpb24gPSAiSUNVICIgK21hajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtaW4gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxlc3RvbmVPZiA9ICIgKG0iK21pY3IrIikiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIGEgbWlsZXN0b25lIHRvd2FyZHMgIiArIHRydW5jVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKG1pbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRlbm90ZSBhcyBtaWxlc3RvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIklDVSAiKyhtYWopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIHRoZSByZWxlYXNlIG9mICIgKyB0cnVuY1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzdG9uZU9mID0gIiAodXBkYXRlICMiKyhtaW4tMSkrIjogIityZXN1bHQuc3Vic3RyaW5nKDQpKyIpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIklDVSAiKyhtYWopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIGFuIHVwZGF0ZSB0byAgIiArIHRydW5jVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyB0cnVuY2F0ZSB0byBtYWpvciAjIGZvciBjb21wYXJpbmcgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVuY1ZlcnNpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9sZCBzY2hlbWUgLSAxLjAuKiAuLiA0LjguKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cnVuY1ZlcnNpb24gPSAiSUNVICIgKyBtYWorIi4iK21pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigobWluJTIpPT0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzdG9uZU9mID0gIiAoIittYWorIi4iKyhtaW4rMSkrIm0iK21pY3IrIikiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY1ZlcnNpb24gPSAiSUNVICIrKG1haikrIi4iKyhtaW4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgIC4uICIgKyBtaWxlc3RvbmVPZiArICIgaXMgYSBtaWxlc3RvbmUgdG93YXJkcyAiICsgdHJ1bmNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYobWljcj09MCAmJiBwYXRjaD09MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIHRoZSByZWxlYXNlIG9mICIgKyB0cnVuY1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzdG9uZU9mID0gIiAodXBkYXRlICIrbWljcisiLiIrcGF0Y2grIikiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIGFuIHVwZGF0ZSB0byAiICsgdHJ1bmNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1bmNWZXJzaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYod2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TWlsZXN0b25lID0gbWlsZXN0b25lT2Y7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRNaWxlc3RvbmUgPSBtaWxlc3RvbmVPZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9kdW1wTm9kZShkZWZpbmVzLCIiKTsKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV2FybmluZzogQ291bGRuJ3QgZ2V0ICIgKyB3aGljaFZlcisgICIgdmVyc2lvbiBmcm9tICIrIFVWRVJTSU9OICsgIiAtIHJldmVydGluZyB0byAiICsgcHJldlZlcik7CisgICAgICAgICAgICByZXN1bHQgPSBwcmV2VmVyOworICAgICAgICB9CisKKyAgICAgICAgaWYocmVzdWx0ICE9IG51bGwpIHsKKworICAgICAgICB9CisKKyAgICAgICAgaWYocHJldlZlciAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihyZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmKCFyZXN1bHQuZXF1YWxzKHByZXZWZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogRGV0ZWN0ZWQgIiArIHJlc3VsdCArICIgdmVyc2lvbiBidXQgd2UnbGwgdXNlIHlvdXIgcmVxdWVzdGVkIC0tIit3aGljaFZlcisidmVyICIrcHJldlZlcik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByZXZWZXI7CisgICAgICAgICAgICAgICAgICAgIGlmKCFyaWdodE1pbGVzdG9uZS5pc0VtcHR5KCkmJndoaWNoVmVyLmVxdWFscygibmV3IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIC4uIGlnbm9yaW5nIG1pbGVzdG9uZSBpbmRpY2F0b3IgIiArIHJpZ2h0TWlsZXN0b25lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TWlsZXN0b25lID0gIiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoIWxlZnRNaWxlc3RvbmUuaXNFbXB0eSgpJiYhd2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdE1pbGVzdG9uZT0iIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogWW91IGRvbid0IG5lZWQgdG8gdXNlICAnLS0iK3doaWNoVmVyKyJ2ZXIgIityZXN1bHQrIicgYW55bW9yZSAtIHdlIGRldGVjdGVkIGl0IGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogRGlkbid0IGRldGVjdCB2ZXJzaW9uIHNvIHdlJ2xsIHVzZSB5b3VyIHJlcXVlc3RlZCAtLSIrd2hpY2hWZXIrInZlciAiK3ByZXZWZXIpOworICAgICAgICAgICAgCXJlc3VsdCA9IHByZXZWZXI7CisgICAgICAgICAgICAJaWYoIXJpZ2h0TWlsZXN0b25lLmlzRW1wdHkoKSYmd2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAuLiBpZ25vcmluZyBtaWxlc3RvbmUgaW5kaWNhdG9yICIgKyByaWdodE1pbGVzdG9uZSk7CisgICAgICAgICAgICAJCXJpZ2h0TWlsZXN0b25lID0gIiI7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIGlmKCFsZWZ0TWlsZXN0b25lLmlzRW1wdHkoKSYmIXdoaWNoVmVyLmVxdWFscygibmV3IikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdE1pbGVzdG9uZT0iIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihyZXN1bHQgPT0gbnVsbCkgeworICAgICAgICAJU3lzdGVtLmVyci5wcmludGxuKCJwcmV2VmVyPSIrcHJldlZlcik7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiBZb3UnbGwgbmVlZCB0byB1c2UgdGhlIG9wdGlvbiAgXCItLSIrd2hpY2hWZXIrInZlclwiICBiZWNhdXNlIHdlIGNvdWxkIG5vdCBkZXRlY3QgYW4gSUNVIHZlcnNpb24gaW4gIiArIFVWRVJTSU9OICk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiRXJyb3I6IFlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgb3B0aW9uICBcIi0tIit3aGljaFZlcisidmVyXCIgIGJlY2F1c2Ugd2UgY291bGQgbm90IGRldGVjdCBhbiBJQ1UgdmVyc2lvbiBpbiAiICsgVVZFUlNJT04gKTsKKyAgICAgICAgfQorCisKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRVc2FnZSgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBTdGFibGVBUEkgb3B0aW9uKiB0YXJnZXQqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9wdGlvbnM6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0taGVscCAgICAgICAgICBQcmludCB0aGlzIHRleHQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1vbGR2ZXIgICAgICAgIFZlcnNpb24gb2Ygb2xkIHZlcnNpb24gb2YgSUNVIChvcHRpb25hbCkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1vbGRkaXIgICAgICAgIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHhtbCBkb2NzIG9mIG9sZCB2ZXJzaW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0tbmV3dmVyICAgICAgICBWZXJzaW9uIG9mIG5ldyB2ZXJzaW9uIG9mIElDVSAob3B0aW9uYWwpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0tbmV3ZGlyICAgICAgICBEaXJlY3RvcnkgdGhhdCBjb250YWlucyB4bWwgZG9jcyBvZiBuZXcgdmVyc2lvbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtLWN4c2x0ICAgICAgICAgWFNMVCBmaWxlIGZvciBDIGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1jcHB4c2x0ICAgICAgIFhTTFQgZmlsZSBmb3IgQysrIGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1yZXBvcnR4c2x0ICAgIFhTTFQgZmlsZSBmb3IgcmVwb3J0IGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1yZXN1bHRmaWxlICAgIE91dHB1dCBmaWxlIik7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldEF0dHIoTm9kZSBub2RlLCBTdHJpbmcgYXR0ck5hbWUpeworICAgIAlpZihub2RlLmdldEF0dHJpYnV0ZXMoKT09bnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCk9PTMpIHsKKy8vICAgIAkJcmV0dXJuICIodGV4dCBub2RlIDMpIjsKKyAgICAJCXJldHVybiAiKE5vZGU6ICIgKyBub2RlLnRvU3RyaW5nKCkgKyAiICkiOworLy8gICAgCQlyZXR1cm4gbm9kZS5nZXRGaXJzdENoaWxkKCkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbShhdHRyTmFtZSkuZ2V0Tm9kZVZhbHVlKCk7CisgICAgCX0KKworICAgICAgICB0cnkgeworICAgICAgICAJcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbShhdHRyTmFtZSkuZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgIH0gY2F0Y2goTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisgICAgICAgIAlpZihub2RlLmdldEF0dHJpYnV0ZXMoKT09bnVsbCkgIHsKKyAgICAgICAgCQl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiW25vIGF0dHJpYnV0ZXMgQ2FuJ3QgZ2V0IGF0dHIgIithdHRyTmFtZSArIiBvdXQgb2Ygbm9kZSAiICsgbm9kZS5nZXROb2RlTmFtZSgpKyI6Iitub2RlLmdldE5vZGVUeXBlKCkrIjoiK25vZGUuZ2V0Tm9kZVZhbHVlKCkrIkAiK25vZGUuZ2V0VGV4dENvbnRlbnQoKSk7CisgICAgICAgIAl9IGVsc2UgaWYobm9kZS5nZXRBdHRyaWJ1dGVzKCkuZ2V0TmFtZWRJdGVtKGF0dHJOYW1lKT09bnVsbCkgeworICAgICAgICAJCXJldHVybiBudWxsOworICAgICAgICAJCS8vdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIk5vIGF0dHJpYnV0ZSBuYW1lZDogIithdHRyTmFtZSk7CisgICAgICAgIAl9IGVsc2UgeworICAgICAgICAJCVN5c3RlbS5lcnIucHJpbnRsbigiQ2FuJ3QgZ2V0IGF0dHIgIithdHRyTmFtZSsiOiAiK25wZS50b1N0cmluZygpKTsKKyAgICAgICAgCX0KKyAgICAgICAgCW5wZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJDYW4ndCBnZXQgYXR0ciAiK2F0dHJOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cihOYW1lZE5vZGVNYXAgYXR0ckxpc3QsIFN0cmluZyBhdHRyTmFtZSl7CisgICAgICAgIHJldHVybiBhdHRyTGlzdC5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpLmdldE5vZGVWYWx1ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBGdW5jdGlvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8RnVuY3Rpb24+IHsKKyAgICAgICAgcHVibGljIFN0cmluZyBwcm90b3R5cGU7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgaWQ7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgc3RhdHVzOworICAgICAgICBwdWJsaWMgU3RyaW5nIHZlcnNpb247CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZmlsZTsKKyAgICAgICAgcHVibGljIFN0cmluZyBjb21wYXJhYmxlTmFtZTsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEZ1bmN0aW9uIHJpZ2h0KXsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5lcXVhbHMocmlnaHQucHJvdG90eXBlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgRnVuY3Rpb24gZnJvbVhtbChOb2RlIG4peworICAgICAgICAgICAgRnVuY3Rpb24gZiA9IG5ldyBGdW5jdGlvbigpOworICAgICAgICAgICAgZi5wcm90b3R5cGUgPSBnZXRBdHRyKG4sICJwcm90b3R5cGUiKTsKKworICAgICAgICAgICAgaWYoInllcyIuZXF1YWxzKGdldEF0dHIobiwgInN0YXRpYyIpKSYmIWYucHJvdG90eXBlLmNvbnRhaW5zKCJzdGF0aWMiKSkgeworICAgICAgICAgICAgCWYucHJvdG90eXBlID0gInN0YXRpYyAiLmNvbmNhdChmLnByb3RvdHlwZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGYuaWQgPSBnZXRBdHRyKG4sICJpZCIpOworICAgICAgICAgICAgZi5zdGF0dXMgPSBnZXRBdHRyKG4sICJzdGF0dXMiKTsKKyAgICAgICAgICAgIGYudmVyc2lvbiA9IHRyaW1JQ1UoZ2V0QXR0cihuLCAidmVyc2lvbiIpKTsKKyAgICAgICAgICAgIGYuZmlsZSA9IGdldEF0dHIobiwgImZpbGUiKTsKKyAgICAgICAgICAgIGYucHVyaWZ5UHJvdG90eXBlKCk7CisKKyAgICAgICAgICAgIGYuc2ltcGxpZnlQcm90b3R5cGUoKTsKKworICAgICAgICAgICAgaWYoZi5maWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIAlmLmZpbGUgPSAie251bGx9IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAJZi5maWxlID0gRnVuY3Rpb24uZ2V0QmFzZW5hbWUoZi5maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYuY29tcGFyYWJsZU5hbWUgPSBmLmNvbXBhcmFibGVOYW1lKCk7CisgICAgICAgICAgICByZXR1cm4gZjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb252ZXJ0IHN0cmluZyB0byBiYXNlbmFtZS4KKyAgICAgICAgICogQHBhcmFtIHN0cgorICAgICAgICAgKiBAcmV0dXJuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZW5hbWUoU3RyaW5nIHN0cil7CisgICAgICAgICAgICBpbnQgaSA9IHN0ci5sYXN0SW5kZXhPZigiLyIpOworICAgICAgICAgICAgc3RyID0gaSA9PSAtMSA/IHN0ciA6IHN0ci5zdWJzdHJpbmcoaSsxKTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIH0KKworCisgICAgICAgIHN0YXRpYyBwcml2YXRlIFN0cmluZyByZXBsTGlzdFtdID0geyAgIlsgXSpcXChbIF0qdm9pZFsgXSpcXClbIF0qIiwgICAiKCkiLCAgLy8gY2xlYW51cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLCAiLCAiLCAiLCAgICAgICAgICAgICAgICAvLyBjbGVhbnVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsgXSpcXCpbIF0qIiwgIiogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyBdKj1bIF0qMFsgXSokIiwgIj0wIiwgICAgICAvLyBjbGVhbnVwIHB1cmUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXClbIF0qY29uc3QiLCAiKSBjb25zdCIsICAvLyBUaGlzIGp1c3QgY2xlYW5zIHVwIHRoZSBzcGFjaW5nLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5jb25zdCBbIF0qIiwgImNvbnN0ICIsIC8vIGNsZWFudXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyIoWywpXSlbIF0qY29uc3QgWyBdKiIsICJcMSIsICAvLyBUT0RPOiBub3RpZnkgYWJvdXQgdGhpcyBkaWZmZXJlbmNlLCBzZXBhcmF0ZWx5IC0gcmVtb3ZlIGNvbnN0IGZyb20gcGFyYW0KKyAgICAgICAgICAgIAkJCQkJCX07CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIHRoZXNlIGFyZSBub3RlZCBhcyBkZWx0YXMuCisgICAgICAgICAqLworICAgICAgICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgc2ltcGxpZnlMaXN0W10gPSB7CisgICAgICAgICAgICAiWyBdKj1bIF0qMFsgXSokIiwgIiIsICAgICAgLy8gcmVtb3ZlIHB1cmUgdmlydHVhbCAtIFRPRE86IG5vdGlmeSBhYm91dCB0aGlzIGRpZmZlcmVuY2UsIHNlcGFyYXRlbHkKKyAgICAgICAgICAgICJcXClbIF0qY29uc3RbIF0qJCIsICIpIiwgIC8vIFRPRE86IG5vdGlmeSBhYm91dCB0aGlzIGRpZmZlcmVuY2UsIHNlcGFyYXRlbHkgLSByZW1vdmUgY29uc3QgZnJvbSBmdW5jdGlvbiB0eXBlCisgICAgICAgIH07CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpYWwgY2FzZXM6CisgICAgICAgICAqCisgICAgICAgICAqIFJlbW92ZSB0aGUgc3RhdHVzIGF0dHJpYnV0ZSBlbWJlZGRlZCBpbiB0aGUgQyBwcm90b3R5cGUKKyAgICAgICAgICoKKyAgICAgICAgICogUmVtb3ZlIHRoZSB2aXJ0dWFsIGtleXdvcmQgaW4gQ3BwIHByb3RvdHlwZQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIHB1cmlmeVByb3RvdHlwZSgpeworICAgICAgICAgICAgLy9yZWZlciB0byAndW1hY2hpbmUuaCcKKyAgICAgICAgICAgIFN0cmluZyBzdGF0dXNMaXN0W10gPSB7IlVfQ0FQSSIsICJVX1NUQUJMRSIsICJVX0RSQUZUIiwgIlVfREVQUkVDQVRFRCIsICJVX09CU09MRVRFIiwgIlVfSU5URVJOQUwiLCAidmlydHVhbCIsICJVX0VYUE9SVDIiLCAiVV9JMThOX0FQSSIsICJVX0NPTU1PTl9BUEkiIH07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXR1c0xpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IHN0YXR1c0xpc3RbaV07CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcHJvdG90eXBlLnJlcGxhY2VBbGwocywiIik7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcHJvdG90eXBlLnRyaW0oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBsTGlzdC5sZW5ndGg7IGkrPSAyKSB7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcHJvdG90eXBlLnJlcGxhY2VBbGwocmVwbExpc3RbaSswXSxyZXBsTGlzdFtpKzFdKTsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBwcm90b3R5cGUgPSBwcm90b3R5cGUudHJpbSgpOworCisgICAgICAgICAgICAvLyBOb3csIHJlbW92ZSBwYXJhbWV0ZXIgbmFtZXMhCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgb3V0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGluID0gbmV3IFN0cmluZ0J1ZmZlcihwcm90b3R5cGUpOworICAgICAgICAgICAgaW50IG9wZW5QYXJlbiA9IGluLmluZGV4T2YoIigiKTsKKyAgICAgICAgICAgIGludCBjbG9zZVBhcmVuID0gaW4ubGFzdEluZGV4T2YoIikiKTsKKworICAgICAgICAgICAgaWYob3BlblBhcmVuPT0tMSB8fCBjbG9zZVBhcmVuPT0tMSkgcmV0dXJuOyAvLyBleGl0LCBtYWxmb3JtZWQ/CisgICAgICAgICAgICBpZihvcGVuUGFyZW4rMT09Y2xvc2VQYXJlbikgcmV0dXJuOyAvLyBleGl0OiAoKQorCisgICAgICAgICAgICBvdXQuYXBwZW5kKGluLCAwLCBvcGVuUGFyZW4rMSk7IC8vIHByZWx1ZGUKKworICAgICAgICAgICAgZm9yKGludCBsZWZ0ID0gb3BlblBhcmVuKzE7IGxlZnQ8Y2xvc2VQYXJlbjspIHsKKyAgICAgICAgICAgIAlpbnQgcmlnaHQgPSBpbi5pbmRleE9mKCIsIiwgbGVmdCsxKTsgLy8gcmlnaHQgZWRnZQorICAgICAgICAgICAgCWlmKHJpZ2h0Pj1jbG9zZVBhcmVuIHx8IHJpZ2h0PT0tMSApICByaWdodD1jbG9zZVBhcmVuOyAvLyBmb3VuZCBsYXN0IGNvbW1hCisKKyAgICAgICAgICAgIC8vCVN5c3RlbS5lcnIucHJpbnRsbigiQ29uc2lkZXJpbmcgICIgKyBsZWZ0ICsgIiAvICIgKyByaWdodCArICIgLSAiICsgY2xvc2VQYXJlbiArICAiIDogIiAgKyBpbi5zdWJzdHJpbmcobGVmdCwgcmlnaHQpKTsKKworICAgICAgICAgICAgCWlmKGxlZnQ9PXJpZ2h0KSBjb250aW51ZTsKKworICAgICAgICAgICAgCS8vIGZpbmQgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAgCWludCByaWdodENoID0gcmlnaHQtMTsKKyAgICAgICAgICAgIAlpZihyaWdodENoPT1sZWZ0KSB7IC8vIDEgY2gtIGJyZWFrCisgICAgICAgICAgICAJCW91dC5hcHBlbmQoaW4sbGVmdCxyaWdodCk7CisgICAgICAgICAgICAJCWNvbnRpbnVlOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAkvLyBlYXQgd2hpdGVzcGFjZSBhdCByaWdodAorICAgICAgICAgICAgCWludCBuYW1lRW5kQ2ggPSByaWdodENoOworICAgICAgICAgICAgCXdoaWxlKG5hbWVFbmRDaD5sZWZ0ICYmIENoYXJhY3Rlci5pc1doaXRlc3BhY2UoaW4uY2hhckF0KG5hbWVFbmRDaCkpKSB7CisgICAgICAgICAgICAJCW5hbWVFbmRDaC0tOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAlpbnQgbmFtZVN0YXJ0Q2ggPSBuYW1lRW5kQ2g7CisgICAgICAgICAgICAJd2hpbGUobmFtZVN0YXJ0Q2g+bGVmdCAmJiBDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoaW4uY2hhckF0KG5hbWVTdGFydENoKSkpIHsKKyAgICAgICAgICAgIAkJbmFtZVN0YXJ0Q2gtLTsKKyAgICAgICAgICAgIAl9CisKKyAgICAgICAgICAgIAkvLyBub3csIGRpZCB3ZSBmaW5kIHNvbWV0aGluZyB0byBza2lwPworICAgICAgICAgICAgCWlmKG5hbWVTdGFydENoPmxlZnQgJiYgbmFtZUVuZENoPm5hbWVTdGFydENoKSB7CisgICAgICAgICAgICAJCW91dC5hcHBlbmQoaW4sIGxlZnQsIG5hbWVTdGFydENoKzEpOworICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgICAgICAgICAJCS8vIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgCQlvdXQuYXBwZW5kKGluLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAJfQorCisgICAgICAgICAgICAJbGVmdCA9IHJpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQuYXBwZW5kKGluLCBjbG9zZVBhcmVuLCBpbi5sZW5ndGgoKSk7IC8vIHBvc3RsdWRlCisKKyAgICAgICAgICAgIC8vIERlbGV0ZSBhbnkgZG91YmxlZCB3aGl0ZXNwYWNlLgorICAgICAgICAgICAgZm9yKGludCBwPTE7cDxvdXQubGVuZ3RoKCk7cCsrKSB7CisgICAgICAgICAgICAgICAgY2hhciBwcmV2ID0gb3V0LmNoYXJBdChwLTEpOworICAgICAgICAgICAgCWlmKENoYXJhY3Rlci5pc1doaXRlc3BhY2UocHJldikpIHsKKyAgICAgICAgICAgIAkJd2hpbGUgKG91dC5sZW5ndGgoKT5wJiYoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShvdXQuY2hhckF0KHApKSkpIHsKKyAgICAgICAgICAgIAkJCW91dC5kZWxldGVDaGFyQXQocCk7CisgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAkJaWYob3V0Lmxlbmd0aCgpPnApIHsKKyAgICAgICAgICAgIAkJCS8vIGFueSB0cmFpbGluZ3MgdG8gZGVsZXRlPworICAgICAgICAgICAgCQkJY2hhciBjdXJyID0gb3V0LmNoYXJBdChwKTsKKyAgICAgICAgICAgIAkJCWlmKGN1cnI9PScsJyB8fCBjdXJyPT0nKScgfHwgY3Vycj09JyonIHx8IGN1cnI9PScmJykgeyAvLyBkZWxldGUgc3BhY2VzIGJlZm9yZSB0aGVzZS4KKyAgICAgICAgICAgIAkJCQlvdXQuZGVsZXRlQ2hhckF0KC0tcCk7CisgICAgICAgICAgICAJCQkJY29udGludWU7CisgICAgICAgICAgICAJCQl9CisgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvLyAgU3lzdGVtLmVyci5wcmludGxuKHByb3RvdHlwZSsiIC0+ICIgKyBvdXQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBwcm90b3R5cGUgPSBvdXQudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzaW1wbGlmeVByb3RvdHlwZSgpIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm90b3R5cGUwID0gcHJvdG90eXBlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaW1wbGlmeUxpc3QubGVuZ3RoOyBpKz0gMikgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHByb3RvdHlwZS5yZXBsYWNlQWxsKHNpbXBsaWZ5TGlzdFtpKzBdLHNpbXBsaWZ5TGlzdFtpKzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCFwcm90b3R5cGUwLmVxdWFscyhwcm90b3R5cGUpKSB7CisgICAgICAgICAgICAgICAgYWRkU2ltcGxpZmljYXRpb24ocHJvdG90eXBlMCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorLy8gICAgICAgIHByaXZhdGUgRWxlbWVudCB0b1htbChEb2N1bWVudCBkb2MpeworLy8gICAgICAgICAgICBFbGVtZW50ICBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudCgiZnVuYyIpOworLy8gICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJwcm90b3R5cGUiLCBwcm90b3R5cGUpOworLy8gICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgic3RhdHVzIiwgc3RhdHVzKTsKKy8vICAgICAgICAgICAgcmV0dXJuIGVsZTsKKy8vICAgICAgICB9CisJCXB1YmxpYyBpbnQgY29tcGFyZVRvKEZ1bmN0aW9uIG8pIHsKKwkJCXJldHVybiBjb21wYXJhYmxlTmFtZS5jb21wYXJlVG8oKChGdW5jdGlvbilvKS5jb21wYXJhYmxlTmFtZSk7CisJCX0KKwkJcHVibGljIFN0cmluZyBjb21wYXJhYmxlTmFtZSgpIHsKKwkJCXJldHVybiBmaWxlKyJ8Iitwcm90b3R5cGUrInwiK3N0YXR1cysifCIrdmVyc2lvbisifCIraWQ7CisJCX0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgSm9pbmVkRnVuY3Rpb24gaW1wbGVtZW50cyBDb21wYXJhYmxlPEpvaW5lZEZ1bmN0aW9uPiB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcHJvdG90eXBlOworICAgICAgICBwdWJsaWMgU3RyaW5nIGxlZnRSZWZJZDsKKyAgICAgICAgcHVibGljIFN0cmluZyBsZWZ0U3RhdHVzOworICAgICAgICBwdWJsaWMgU3RyaW5nIGxlZnRWZXJzaW9uOworICAgICAgICBwdWJsaWMgU3RyaW5nIHJpZ2h0VmVyc2lvbjsKKyAgICAgICAgcHVibGljIFN0cmluZyBsZWZ0RmlsZTsKKyAgICAgICAgcHVibGljIFN0cmluZyByaWdodFJlZklkOworICAgICAgICBwdWJsaWMgU3RyaW5nIHJpZ2h0U3RhdHVzOworICAgICAgICBwdWJsaWMgU3RyaW5nIHJpZ2h0RmlsZTsKKworICAgICAgICBwdWJsaWMgU3RyaW5nIGNvbXBhcmFibGVOYW1lOworCisgICAgICAgIHN0YXRpYyBKb2luZWRGdW5jdGlvbiBmcm9tTGVmdEZ1bihGdW5jdGlvbiBsZWZ0KXsKKyAgICAgICAgICAgIEpvaW5lZEZ1bmN0aW9uIHUgPSBuZXcgSm9pbmVkRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIHUucHJvdG90eXBlID0gbGVmdC5wcm90b3R5cGU7CisgICAgICAgICAgICB1LmxlZnRSZWZJZCA9IGxlZnQuaWQ7CisgICAgICAgICAgICB1LmxlZnRTdGF0dXMgPSBsZWZ0LnN0YXR1czsKKyAgICAgICAgICAgIHUubGVmdEZpbGUgPSBsZWZ0LmZpbGU7CisgICAgICAgICAgICB1LnJpZ2h0UmVmSWQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgLy8gdS5yaWdodFZlcnNpb24gPSBudWw7CisgICAgICAgICAgICB1LmxlZnRWZXJzaW9uID0gbGVmdC52ZXJzaW9uOworICAgICAgICAgICAgdS5yaWdodFN0YXR1cyA9IG5vdEZvdW5kOworICAgICAgICAgICAgdS5yaWdodEZpbGUgPSBub3RGb3VuZDsKKyAgICAgICAgICAgIHUuY29tcGFyYWJsZU5hbWUgPSBsZWZ0LmNvbXBhcmFibGVOYW1lOworICAgICAgICAgICAgcmV0dXJuIHU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgSm9pbmVkRnVuY3Rpb24gZnJvbVJpZ2h0RnVuKEZ1bmN0aW9uIHJpZ2h0KXsKKyAgICAgICAgICAgIEpvaW5lZEZ1bmN0aW9uIHUgPSBuZXcgSm9pbmVkRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIHUucHJvdG90eXBlID0gcmlnaHQucHJvdG90eXBlOworICAgICAgICAgICAgdS5sZWZ0UmVmSWQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgIHUubGVmdFN0YXR1cyA9IG5vdEZvdW5kOworICAgICAgICAgICAgdS5sZWZ0RmlsZSA9IG5vdEZvdW5kOworICAgICAgICAgICAvLyB1LmxlZnRWZXJzaW9uID0gbnVsOworICAgICAgICAgICAgdS5yaWdodFZlcnNpb24gPSByaWdodC52ZXJzaW9uOworICAgICAgICAgICAgdS5yaWdodFJlZklkID0gcmlnaHQuaWQ7CisgICAgICAgICAgICB1LnJpZ2h0U3RhdHVzID0gcmlnaHQuc3RhdHVzOworICAgICAgICAgICAgdS5yaWdodEZpbGUgPSByaWdodC5maWxlOworICAgICAgICAgICAgdS5jb21wYXJhYmxlTmFtZSA9IHJpZ2h0LmNvbXBhcmFibGVOYW1lOworICAgICAgICAgICAgcmV0dXJuIHU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgSm9pbmVkRnVuY3Rpb24gZnJvbVR3b0Z1bihGdW5jdGlvbiBsZWZ0LCBGdW5jdGlvbiByaWdodCl7CisgICAgICAgICAgICBpZiAoIWxlZnQuZXF1YWxzKHJpZ2h0KSkgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgICAgICAgICBKb2luZWRGdW5jdGlvbiB1ID0gbmV3IEpvaW5lZEZ1bmN0aW9uKCk7CisgICAgICAgICAgICB1LnByb3RvdHlwZSA9IGxlZnQucHJvdG90eXBlOworICAgICAgICAgICAgdS5sZWZ0UmVmSWQgPSBsZWZ0LmlkOworICAgICAgICAgICAgdS5sZWZ0U3RhdHVzID0gbGVmdC5zdGF0dXM7CisgICAgICAgICAgICB1LmxlZnRGaWxlID0gbGVmdC5maWxlOworICAgICAgICAgICAgdS5yaWdodFJlZklkID0gcmlnaHQuaWQ7CisgICAgICAgICAgICB1LnJpZ2h0U3RhdHVzID0gcmlnaHQuc3RhdHVzOworICAgICAgICAgICAgdS5sZWZ0VmVyc2lvbiA9IGxlZnQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRWZXJzaW9uID0gcmlnaHQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRGaWxlID0gcmlnaHQuZmlsZTsKKyAgICAgICAgICAgIHUuY29tcGFyYWJsZU5hbWUgPSBsZWZ0LmNvbXBhcmFibGVOYW1lKyIrIityaWdodC5jb21wYXJhYmxlTmFtZTsKKyAgICAgICAgICAgIHJldHVybiB1OworICAgICAgICB9CisKKyAgICAgICAgRWxlbWVudCB0b1htbChEb2N1bWVudCBkb2MpeworICAgICAgICAgICAgRWxlbWVudCAgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZ1bmMiKTsKKyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoInByb3RvdHlwZSIsIGZvcm1hdENvZGUocHJvdG90eXBlKSk7CisvLyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoImxlZnRSZWZJZCIsIGxlZnRSZWZJZCk7CisKKyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoImxlZnRTdGF0dXMiLCBsZWZ0U3RhdHVzKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRSZWZJZCIsIHJpZ2h0UmVmSWQpOworICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRTdGF0dXMiLCByaWdodFN0YXR1cyk7CisgICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJsZWZ0VmVyc2lvbiIsIGxlZnRWZXJzaW9uKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRSZWZJZCIsIHJpZ2h0UmVmSWQpOworICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRWZXJzaW9uIiwgcmlnaHRWZXJzaW9uKTsKKworCisvLyAgICAgICAgICAgIFN0cmluZyBmID0gcmlnaHRSZWZJZC5lcXVhbHMobm90Rm91bmQpID8gbGVmdFJlZklkIDogcmlnaHRSZWZJZDsKKy8vICAgICAgICAgICAgaW50IHRhaWwgPSBmLmluZGV4T2YoIl8iKTsKKy8vICAgICAgICAgICAgZiA9IHRhaWwgIT0gLTEgPyBmLnN1YnN0cmluZygwLCB0YWlsKSA6IGY7CisvLyAgICAgICAgICAgIGYgPSBmLnN0YXJ0c1dpdGgoImNsYXNzIikgPyBmLnJlcGxhY2VGaXJzdCgiY2xhc3MiLCIiKSA6IGY7CisgICAgICAgICAgICBTdHJpbmcgZiA9IHJpZ2h0RmlsZS5lcXVhbHMobm90Rm91bmQpID8gbGVmdEZpbGUgOiByaWdodEZpbGU7CisgICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJmaWxlIiwgZik7CisgICAgICAgICAgICByZXR1cm4gZWxlOworICAgICAgICB9CisKKworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhKb2luZWRGdW5jdGlvbiBvKSB7CisJCQlyZXR1cm4gY29tcGFyYWJsZU5hbWUuY29tcGFyZVRvKG8uY29tcGFyYWJsZU5hbWUpOworCQl9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEZ1bmN0aW9uIHJpZ2h0KXsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5lcXVhbHMocmlnaHQucHJvdG90eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc0ZhYyA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgIFRyYW5zZm9ybWVyIG1ha2VUcmFuc2Zvcm1lcihJbnB1dFN0cmVhbSBpcywgU3RyaW5nIG5hbWUpIHsKKyAgICAJaWYoaXM9PW51bGwpIHsKKyAgICAJCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJObyBpbnB1dHN0cmVhbSBzZXQgZm9yICIgKyBuYW1lKTsKKyAgICAJfQorICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oIlRyYW5zZm9ybWluZyBmcm9tOiAiICsgbmFtZSk7CisgICAgCVRyYW5zZm9ybWVyIHQ7CisJCXRyeSB7CisvLwkJCS8vIGNoZWNrIHRoZSBwcm9sb2cKKy8vCQkJaWYoaXMubWFya1N1cHBvcnRlZCgpKSAgdHJ5IHsKKy8vCQkJCWlzLm1hcmsoMTAwKTsKKy8vCQkJCWludCBiID0gaXMucmVhZCgpOworLy8JCQkJaXMucmVzZXQoKTsKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBieXRlOiA9PSAiICsgSW50ZWdlci50b0hleFN0cmluZyhiKSk7CisvLwkJCX0gY2F0Y2goVGhyb3dhYmxlIHRoKSB7CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAoIGNvdWxkbid0IHJlYWQgYSBieXRlOiAiICsgdGgudG9TdHJpbmcoKSsgIiApIik7CisvLwkJCX0gZWxzZSB7CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAoIGNvdWxkbid0IHNldCBtYXJrKSIpOworLy8JCQl9CisJCQlTdHJlYW1Tb3VyY2Ugc3MgPSBuZXcgU3RyZWFtU291cmNlKGlzKTsKKwkJCXNzLnNldFN5c3RlbUlkKG5ldyBGaWxlKCIuIikpOworCQkJdCA9IHRyYW5zRmFjLm5ld1RyYW5zZm9ybWVyKHNzKTsKKwkJfSBjYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiQ291bGRuJ3QgbWFrZSB0cmFuc2Zvcm1lciBmb3IgIiArIG5hbWUgKyAiIC0gIiArIGUuZ2V0TWVzc2FnZUFuZExvY2F0aW9uKCkpOworCQl9CisgICAgCWlmKHQgPT0gbnVsbCkgeworICAgIAkJdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkbid0IG1ha2UgdHJhbnNmb3JtZXIgZm9yICIgKyBuYW1lKTsKKyAgICAJfQorICAgIAlyZXR1cm4gdDsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIHJlcG9ydFNlbGVjdGVkRnVuKE5vZGUgam9pbmVkTm9kZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9ueworICAgICAgICBUcmFuc2Zvcm1lciByZXBvcnQgPSBtYWtlVHJhbnNmb3JtZXIocmVwb3J0WHNsU3RyZWFtLCBSUFRYU0xUKTsKKyAgICAgICAgLy9yZXBvcnQuc2V0UGFyYW1ldGVyKCJsZWZ0U3RhdHVzIiwgbGVmdFN0YXR1cyk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoImxlZnRWZXIiLCBsZWZ0VmVyKTsKKy8vICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJyaWdodFN0YXR1cyIsIHJpZ2h0U3RhdHVzKTsKKyAgICAgICAgcmVwb3J0LnNldFBhcmFtZXRlcigib3VyWWVhciIsIG5ldyBJbnRlZ2VyKG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKS5nZXQoamF2YS51dGlsLkNhbGVuZGFyLllFQVIpKSk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoInJpZ2h0VmVyIiwgcmlnaHRWZXIpOworICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJyaWdodE1pbGVzdG9uZSIsIHJpZ2h0TWlsZXN0b25lKTsKKyAgICAgICAgcmVwb3J0LnNldFBhcmFtZXRlcigibGVmdE1pbGVzdG9uZSIsIGxlZnRNaWxlc3RvbmUpOworICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJkYXRlVGltZSIsIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpLmdldFRpbWUoKSk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoIm5vdEZvdW5kIiwgbm90Rm91bmQpOworCisgICAgICAgIERPTVNvdXJjZSBzcmMgPSBuZXcgRE9NU291cmNlKGpvaW5lZE5vZGUpOworCisgICAgICAgIFJlc3VsdCByZXMgPSBuZXcgU3RyZWFtUmVzdWx0KHJlc3VsdEZpbGUpOworLy8gICAgICAgIERPTVJlc3VsdCByZXMgPSBuZXcgRE9NUmVzdWx0KCk7CisgICAgICAgIHJlcG9ydC50cmFuc2Zvcm0oc3JjLCByZXMpOworLy8gICAgICAgIGR1bXBOb2RlKHJlcy5nZXROb2RlKCksIiIpOworICAgIH0KKworICAgIHByaXZhdGUgU2V0PEpvaW5lZEZ1bmN0aW9uPiBnZXRGdWxsTGlzdChJbnB1dFN0cmVhbSBkdW1wWHNsdFN0cmVhbSwgU3RyaW5nIGR1bXBYc2x0RmlsZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb257CisgICAgICAgIC8vIHByZXBhcmUgdHJhbnNmb3JtZXIKKyAgICAgICAgWFBhdGggeHBhdGggPSBYUGF0aEZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdYUGF0aCgpOworICAgICAgICBTdHJpbmcgZXhwcmVzc2lvbiA9ICIvbGlzdCI7CisgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbWFrZVRyYW5zZm9ybWVyKGR1bXBYc2x0U3RyZWFtLCBkdW1wWHNsdEZpbGUpOworCisgICAgICAgIC8vICAgICAgICBJbnB1dFNvdXJjZSBsZWZ0U291cmNlID0gbmV3IElucHV0U291cmNlKGxlZnREaXIgKyAiaW5kZXgueG1sIik7CisgICAgICAgIERPTVNvdXJjZSBsZWZ0SW5kZXggPSBuZXcgRE9NU291cmNlKGdldERvY3VtZW50KG5ldyBGaWxlKGxlZnREaXIsSU5ERVhfWE1MKSkpOworICAgICAgICBET01SZXN1bHQgbGVmdFJlc3VsdCA9IG5ldyBET01SZXN1bHQoKTsKKyAgICAgICAgdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKERPQ19GT0xERVIsIGxlZnREaXIpOworICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obGVmdEluZGV4LCBsZWZ0UmVzdWx0KTsKKworLy8gICAgICAgIE5vZGUgbGVmdExpc3QgPSBYUGF0aEFQSS5zZWxlY3RTaW5nbGVOb2RlKGxlZnRSZXN1bHQuZ2V0Tm9kZSgpLCIvbGlzdCIpOworICAgICAgICBOb2RlIGxlZnRMaXN0ID0gKE5vZGUpeHBhdGguZXZhbHVhdGUoZXhwcmVzc2lvbiwgbGVmdFJlc3VsdC5nZXROb2RlKCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOworICAgICAgICBpZihsZWZ0TGlzdD09bnVsbCkgeworICAgICAgICAgICAJLy9kdW1wTm9kZSh4c2x0U291cmNlLmdldE5vZGUoKSk7CisgICAgICAgICAgCWR1bXBOb2RlKGxlZnRSZXN1bHQuZ2V0Tm9kZSgpKTsKKy8vICAgICAgICAJZHVtcE5vZGUobGVmdEluZGV4LmdldE5vZGUoKSk7CisgICAgICAgIAlTeXN0ZW0ub3V0LmZsdXNoKCk7CisgICAgICAgIAlTeXN0ZW0uZXJyLmZsdXNoKCk7CisgICAgICAgIAl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiZ2V0RnVsbExpc3QoIitkdW1wWHNsdEZpbGUudG9TdHJpbmcoKSsiKSByZXR1cm5lZCBhIG51bGwgbGVmdCAiK2V4cHJlc3Npb24pOworICAgICAgICB9CisKKyAgICAgICAgeHBhdGgucmVzZXQoKTsgLy8gcmV1c2UKKworICAgICAgICBET01Tb3VyY2UgcmlnaHRJbmRleCA9IG5ldyBET01Tb3VyY2UoZ2V0RG9jdW1lbnQobmV3IEZpbGUocmlnaHREaXIsSU5ERVhfWE1MKSkpOworICAgICAgICBET01SZXN1bHQgcmlnaHRSZXN1bHQgPSBuZXcgRE9NUmVzdWx0KCk7CisgICAgICAgIHRyYW5zZm9ybWVyLnNldFBhcmFtZXRlcihET0NfRk9MREVSLCByaWdodERpcik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9hZGluZzogIitkdW1wWHNsdEZpbGUudG9TdHJpbmcoKSk7CisgICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShyaWdodEluZGV4LCByaWdodFJlc3VsdCk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgLi4gbG9hZGVkOiAiK2R1bXBYc2x0RmlsZS50b1N0cmluZygpKTsKKyAgICAgICAgTm9kZSByaWdodExpc3QgPSAoTm9kZSl4cGF0aC5ldmFsdWF0ZShleHByZXNzaW9uLCByaWdodFJlc3VsdC5nZXROb2RlKCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOworICAgICAgICBpZihyaWdodExpc3Q9PW51bGwpIHsKKyAgICAgICAgCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJnZXRGdWxsTGlzdCgiK2R1bXBYc2x0RmlsZS50b1N0cmluZygpKyIpIHJldHVybmVkIGEgbnVsbCByaWdodCAiK2V4cHJlc3Npb24pOworICAgICAgICB9CisvLyAgICAgICAgZHVtcE5vZGUocmlnaHRMaXN0LCIiKTsKKworCisgICAgICAgIFNldDxGdW5jdGlvbj4gbGVmdFNldCA9IG5vZGVUb1NldChsZWZ0TGlzdCk7CisgICAgICAgIFNldDxGdW5jdGlvbj4gcmlnaHRTZXQgPSBub2RlVG9TZXQocmlnaHRMaXN0KTsKKyAgICAgICAgU2V0PEpvaW5lZEZ1bmN0aW9uPiBqb2luZWQgPSBmdWxsSm9pbihsZWZ0U2V0LCByaWdodFNldCk7CisgICAgICAgIHJldHVybiBqb2luZWQ7CisvLyAgICAgICAgam9pbmVkTm9kZSA9IHNldFRvTm9kZShqb2luZWQpOworLy8gICAgICAgIGR1bXBOb2RlKGpvaW5lZE5vZGUsIiIpOworLy8gICAgICAgIHJldHVybiBqb2luZWROb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBub2RlCisgICAgICogQHJldHVybiAgICAgIFNldDxGdW4+CisgICAgICovCisgICAgcHJpdmF0ZSBTZXQ8RnVuY3Rpb24+IG5vZGVUb1NldChOb2RlIG5vZGUpeworICAgICAgICBTZXQ8RnVuY3Rpb24+IHMgPSBuZXcgVHJlZVNldDxGdW5jdGlvbj4oKTsKKyAgICAgICAgTm9kZUxpc3QgbGlzdCA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSBuID0gbGlzdC5pdGVtKGkpOworICAgICAgICAgICAgcy5hZGQoRnVuY3Rpb24uZnJvbVhtbChuKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHNldCAgICAgICBTZXQ8Sm9pbmVkRnVuPgorICAgICAqIEByZXR1cm4KKyAgICAgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIE5vZGUgc2V0VG9Ob2RlKFNldDxKb2luZWRGdW5jdGlvbj4gc2V0KSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbnsKKyAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkYmYgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgIERvY3VtZW50IGRvYyAgPSBkYmYubmV3RG9jdW1lbnRCdWlsZGVyKCkubmV3RG9jdW1lbnQoKTsKKyAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImxpc3QiKTsKKyAgICAgICAgZG9jLmFwcGVuZENoaWxkKHJvb3QpOworICAgICAgICBmb3IgKEl0ZXJhdG9yPEpvaW5lZEZ1bmN0aW9uPiBpdGVyID0gc2V0Lml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgSm9pbmVkRnVuY3Rpb24gZnVuID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICByb290LmFwcGVuZENoaWxkKGZ1bi50b1htbChkb2MpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFkZCB0aGUgJ2NoYW5nZWQnIHN0dWZmCisgICAgICAgIEVsZW1lbnQgcm9vdDIgPSBkb2MuY3JlYXRlRWxlbWVudCgic2ltcGxpZmljYXRpb25zIik7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQocm9vdDIpOworICAgICAgICB7CisgICAgICAgIAlmb3IoU3RyaW5nIHNpbXBsaWZpY2F0aW9uIDogZ2V0Q2hhbmdlZFNpbXBsaWZpY2F0aW9ucygpKSB7CisgICAgICAgIAkJRWxlbWVudCBzdWJTaW1wbGlmaWNhdGlvbiA9IGRvYy5jcmVhdGVFbGVtZW50KCJzaW1wbGlmaWNhdGlvbiIpOworICAgICAgICAJCUVsZW1lbnQgYmFzZUVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgiYmFzZSIpOworICAgICAgICAJCWJhc2VFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzaW1wbGlmaWNhdGlvbikpOworICAgICAgICAJCXN1YlNpbXBsaWZpY2F0aW9uLmFwcGVuZENoaWxkKGJhc2VFbGVtZW50KTsKKworICAgICAgICAJCXJvb3QyLmFwcGVuZENoaWxkKHN1YlNpbXBsaWZpY2F0aW9uKTsKKworICAgICAgICAJCWZvcihTdHJpbmcgY2hhbmdlIDogc2ltcGxpZmljYXRpb25zLmdldChzaW1wbGlmaWNhdGlvbikpIHsKKyAgICAgICAgCQkJRWxlbWVudCBjaGFuZ2VFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImNoYW5nZSIpOworICAgICAgICAJCQljaGFuZ2VFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjaGFuZ2UpKTsKKyAgICAgICAgCQkJc3ViU2ltcGxpZmljYXRpb24uYXBwZW5kQ2hpbGQoY2hhbmdlRWxlbWVudCk7CisgICAgICAgIAkJfQorCSAgICAgICAJfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRvYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBmdWxsLWpvaW4gdHdvIFNldCBvbiAncHJvdG90eXBlJworICAgICAqCisgICAgICogQHBhcmFtIGxlZnQgICAgIFNldDxGdW4+CisgICAgICogQHBhcmFtIHJpZ2h0ICAgIFNldDxGdW4+CisgICAgICogQHJldHVybiAgICAgICAgICBTZXQ8Sm9pbmVkRnVuPgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFNldDxKb2luZWRGdW5jdGlvbj4gZnVsbEpvaW4oU2V0PEZ1bmN0aW9uPiBsZWZ0LCBTZXQ8RnVuY3Rpb24+IHJpZ2h0KXsKKworICAgICAgICBTZXQ8Sm9pbmVkRnVuY3Rpb24+IGpvaW5lZCA9IG5ldyBUcmVlU2V0PEpvaW5lZEZ1bmN0aW9uPigpOyAvL1NldDxKb2luZWRGdW4+CisgICAgICAgIFNldDxGdW5jdGlvbj4gY29tbW9uID0gbmV3IFRyZWVTZXQ8RnVuY3Rpb24+KCk7IC8vU2V0PEZ1bj4KKyAgICAgICAgZm9yIChJdGVyYXRvcjxGdW5jdGlvbj4gaXRlcjEgPSBsZWZ0Lml0ZXJhdG9yKCk7IGl0ZXIxLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uIGYxID0gaXRlcjEubmV4dCgpOworLy8gICAgICAgICAgICBpZiAoZjEucHJvdG90eXBlLm1hdGNoZXMoIi4qVHJhbnNsaXRlcmF0b3I6Oi4qIikpeworLy8gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJsZWZ0OiAiICsgZjEucHJvdG90eXBlKTsKKy8vICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigibGVmdDogIiArIGYxLnN0YXR1cyk7CisvLyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIyID0gcmlnaHQuaXRlcmF0b3IoKTsgaXRlcjIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgICAgIEZ1bmN0aW9uIGYyID0gaXRlcjIubmV4dCgpOworLy8gICAgICAgICAgICAgICAgaWYgKCBmMS5wcm90b3R5cGUubWF0Y2hlcygiLipmaWx0ZXJlZFRyYW5zbGl0ZXJhdGUuKiIpCisvLyAgICAgICAgICAgICAgICAgICYmIGYyLnByb3RvdHlwZS5tYXRjaGVzKCIuKmZpbHRlcmVkVHJhbnNsaXRlcmF0ZS4qIikpeworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigicmlnaHQ6ICIgKyBmMi5wcm90b3R5cGUpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigicmlnaHQ6ICIgKyBmMi5zdGF0dXMpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihmMS5wcm90b3R5cGUuZXF1YWxzKGYyLnByb3RvdHlwZSkpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihmMS5wcm90b3R5cGUuZ2V0Qnl0ZXMoKVswXSk7CisvLyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGYyLnByb3RvdHlwZS5nZXRCeXRlcygpWzBdKTsKKy8vICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZjEuZXF1YWxzKGYyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYWRkIGxlZnQgaXRlbSB0byBjb21tb24gc2V0CisgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgcmVtb3ZlIGNvbW1vbiBpdGVtcyB3aXRoIGxlZnQgc2V0IGxhdGVyCisgICAgICAgICAgICAgICAgICAgIGNvbW1vbi5hZGQoZjEpOworICAgICAgICAgICAgICAgICAgICBqb2luZWQuYWRkKEpvaW5lZEZ1bmN0aW9uLmZyb21Ud29GdW4oZjEsIGYyKSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LnJlbW92ZShmMik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIgPSBjb21tb24uaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBGdW5jdGlvbiBmID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBsZWZ0LnJlbW92ZShmKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIgPSBsZWZ0Lml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgRnVuY3Rpb24gZiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgam9pbmVkLmFkZChKb2luZWRGdW5jdGlvbi5mcm9tTGVmdEZ1bihmKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEl0ZXJhdG9yPEZ1bmN0aW9uPiBpdGVyID0gcmlnaHQuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICBGdW5jdGlvbiBmID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBqb2luZWQuYWRkKEpvaW5lZEZ1bmN0aW9uLmZyb21SaWdodEZ1bihmKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpvaW5lZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBOb2RlKE5vZGUgbikgeworICAgIAlkdW1wTm9kZShuLCIiKTsKKyAgICB9CisgICAgLyoqCisgICAgICogRHVtcCBvdXQgYSBub2RlIGZvciBkZWJ1Z2dpbmcuIFJlY3Vyc2l2ZSBmY24KKyAgICAgKiBAcGFyYW0gbgorICAgICAqIEBwYXJhbSBwcmUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBOb2RlKE5vZGUgbiwgU3RyaW5nIHByZSkgeworICAgIAlTdHJpbmcgb3ByZSA9IHByZTsKKwkJcHJlICs9ICIgIjsKKwkJU3lzdGVtLm91dC5wcmludChvcHJlICsgIjwiICsgbi5nZXROb2RlTmFtZSgpICk7CisJCS8vIGR1bXAgYXR0cmlidXRlCisJCU5hbWVkTm9kZU1hcCBhdHRyID0gbi5nZXRBdHRyaWJ1dGVzKCk7CisJCWlmIChhdHRyICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0ci5nZXRMZW5ndGgoKTsgaSsrKSB7CisJCQkJU3lzdGVtLm91dC5wcmludCgiXG4iK3ByZSsiICAgIithdHRyLml0ZW0oaSkuZ2V0Tm9kZU5hbWUoKSsiPVwiIiArIGF0dHIuaXRlbShpKS5nZXROb2RlVmFsdWUoKSsiXCIiKTsKKwkJCX0KKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4iKTsKKworCQkvLyBkdW1wIHZhbHVlCisJCVN0cmluZyB2ID0gcHJlICsgbi5nZXROb2RlVmFsdWUoKTsKKwkJaWYgKG4uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKKwkJCVN5c3RlbS5vdXQucHJpbnRsbih2KTsKKworCQkvLyBkdW1wIHN1YiBub2RlcworCQlOb2RlTGlzdCBuTGlzdCA9IG4uZ2V0Q2hpbGROb2RlcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG5MaXN0LmdldExlbmd0aCgpOyBpKyspIHsKKwkJCU5vZGUgbG4gPSBuTGlzdC5pdGVtKGkpOworCQkJZHVtcE5vZGUobG4sIHByZSArICIgIik7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludGxuKG9wcmUgKyAiPC8iICsgbi5nZXROb2RlTmFtZSgpICsgIj4iKTsKKwl9CisKKyAgICBwcml2YXRlIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgdGhlQnVpbGRlciA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkYmYgID0gbnVsbDsKKyAgICBwcml2YXRlIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKyAgICAJaWYodGhlQnVpbGRlciA9PSBudWxsKSB7CisgICAgICAgICAgICBkYmYgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICB0aGVCdWlsZGVyID0gZGJmLm5ld0RvY3VtZW50QnVpbGRlcigpOworICAgIAl9CisgICAgCXJldHVybiB0aGVCdWlsZGVyOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIERvY3VtZW50IGdldERvY3VtZW50KEZpbGUgZmlsZSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb257CisgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOworICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShmaXMpOworICAgICAgICBEb2N1bWVudCBkb2MgPSBnZXREb2N1bWVudEJ1aWxkZXIoKS5wYXJzZShpbnB1dFNvdXJjZSk7CisgICAgICAgIHJldHVybiBkb2M7CisgICAgfQorICAgIHN0YXRpYyBib29sZWFuIHRyaWVkID0gZmFsc2U7CisgICAgc3RhdGljIEZvcm1hdHRlciBhRm9ybWF0dGVyID0gbnVsbDsKKworICAgIHB1YmxpYyBpbnRlcmZhY2UgRm9ybWF0dGVyIHsKKyAgICAJcHVibGljIFN0cmluZyBmb3JtYXRDb2RlKFN0cmluZyBzKTsKKyAgICB9CisKKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdF9rZXl3b3Jkc1tdID0geworICAgIAkiZW51bSIsIiNkZWZpbmUiLCJzdGF0aWMiCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEF0dGVtcHQgdG8gdXNlIGEgcHJldHR5IGZvcm1hdHRlcgorICAgICAqIEBwYXJhbSBwcm90b3R5cGUyCisgICAgICogQHJldHVybgorICAgICAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdENvZGUoU3RyaW5nIHByb3RvdHlwZTIpIHsKKwkJaWYoIXRyaWVkKSB7CisJCQlTdHJpbmcgdGhlRm9ybWF0dGVyID0gU3RhYmxlQVBJLmNsYXNzLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi5Db2RlRm9ybWF0dGVyIjsKKwkJCXRyeSB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCQkJQ2xhc3M8Rm9ybWF0dGVyPiBmb3JtYXRDbGFzcyA9IChDbGFzczxGb3JtYXR0ZXI+KSBDbGFzcy5mb3JOYW1lKHRoZUZvcm1hdHRlcik7CisJCQkJYUZvcm1hdHRlciA9IChGb3JtYXR0ZXIpIGZvcm1hdENsYXNzLm5ld0luc3RhbmNlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogQ291bGRuJ3QgbG9hZCAiICsgdGhlRm9ybWF0dGVyKTsKKwkJCQlhRm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcigpIHsKKworCQkJCQlwdWJsaWMgU3RyaW5nIGZvcm1hdENvZGUoU3RyaW5nIHMpIHsKKwkJCQkJCVN0cmluZyBzdHIgPSBIVE1MU2FmZShzLnRyaW0oKSk7CisJCQkJCQlmb3IoU3RyaW5nIGtleXdvcmQgOiBmb3JtYXRfa2V5d29yZHMpIHsKKwkJCQkJCQlpZihzdHIuc3RhcnRzV2l0aChrZXl3b3JkKSkgeworCQkJCQkJCQlzdHIgPSBzdHIucmVwbGFjZUZpcnN0KGtleXdvcmQsICI8dHQ+IitrZXl3b3JkKyI8L3R0PiIpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCXJldHVybiBzdHI7CisJCQkJCX0KKworCQkJCX07CisJCQl9CisJCQl0cmllZCA9IHRydWU7CisJCX0KKwkJaWYoYUZvcm1hdHRlciAhPSBudWxsKSB7CisJCQlyZXR1cm4gYUZvcm1hdHRlci5mb3JtYXRDb2RlKHByb3RvdHlwZTIpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIEhUTUxTYWZlKHByb3RvdHlwZTIpOworCQl9CisJfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSFRNTFNhZmUoU3RyaW5nIHMpIHsKKyAgICAgICAgaWYocz09bnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzLnJlcGxhY2VBbGwoIiYiLCImYW1wOyIpCisgICAgICAgICAgICAgLnJlcGxhY2VBbGwoIjwiLCImbHQ7IikKKyAgICAgICAgICAgICAucmVwbGFjZUFsbCgiPiIsIiZndDsiKQorICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCJcIiIsIiZxdW90OyIpOworICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuYy54c2x0IGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdApAQCAtMCwwICsxLDEwNyBAQAorPCEtLQorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBpcyBhbiBYU0xUIGJ1aWxkIGZpbGUgZm9yIElDVSB0b29scy4gCisqLworLS0+Cis8IS0tCisgIExpc3QgYWxsIEMgZnVuY3Rpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSAnaW5kZXgueG1sJworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iZG9jRm9sZGVyIiAvPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICA8bGlzdD4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZXNfbm9kZSIgc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdmaWxlJ10vQHJlZmlkIiAvPgorICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRmaWxlc19ub2RlIj4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlIiBzZWxlY3Q9ImNvbmNhdCgkZG9jRm9sZGVyLCAnLycsIC4gLCAnLnhtbCcpIiAvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZ1bmNzX25vZGUiIHNlbGVjdD0iZG9jdW1lbnQoJGZpbGUpL2RveHlnZW4vY29tcG91bmRkZWYvc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSdmdW5jdGlvbiddIiAvPgorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGZ1bmNzX25vZGUiPgorICAgICAgICAgIDxjcHBmdW5jPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJwcm90b3R5cGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoZGVmaW5pdGlvbi90ZXh0KCksIGFyZ3NzdHJpbmcvdGV4dCgpKSIgLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0ibG9jYXRpb24vQGZpbGUiIC8+CisgICAgICAgICAgPC9jcHBmdW5jPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgCisgICAgICAgIDwhLS0gIG5vdyBnZXQgI2RlZmluZXMgIC0tPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRlZnNfbm9kZSIgc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J2RlZmluZSddIiAvPgorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGRlZnNfbm9kZSI+CisgICAgICAgICAgPGNwcGZ1bmM+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InN0YXR1cyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+I2RlZmluZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorICAgICAgICAgIDwvY3BwZnVuYz4KK8KgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKworCQk8IS0tICBub3cgZW51bXMgLS0+CisJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9ub2RlIgorCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAa2luZD0nZW51bSddW0Bwcm90PSdwdWJsaWMnXSIgLz4KKwkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRlbnVtX25vZGUiPgorCisJCQk8IS0tICB1c2UgYSBuYW1lLCBlbHNlICcoYW5vbnltb3VzKScgLS0+CisJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9uYW1lIj4KKwkJCQk8eHNsOmNob29zZT4JCQkJCQorCQkJCQk8eHNsOndoZW4gdGVzdD0iY29udGFpbnMobmFtZS90ZXh0KCksICdAJykiPgorCQkJCQkJKGFub255bW91cyk8L3hzbDp3aGVuPgorCQkJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lL3RleHQoKSIgLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPgorCQkJPC94c2w6dmFyaWFibGU+CisJCQorCQkJPCEtLSAgZW51bSBvYmplY3QgIC0tPgorCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3N0YXR1cyIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPgorCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3ZlcnNpb24iIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSIvPgorCQkJCisJCQkgPCEtLSAgbm8gYW5vbnltb3VzIGZpbGUgbGV2ZWwgZW51bXMgLS0+PCEtLQorCQkJPHhzbDppZiB0ZXN0PSJub3QoY29udGFpbnMobmFtZS90ZXh0KCksICdAJykpIj4KKwkJCQk8Y3BwZnVuYz4gCisJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fc3RhdHVzIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSA8eHNsOnZhbHVlLW9mCisJCQkJCQlzZWxlY3Q9IiRlbnVtX25vZGVfbmFtZSIgLz4ge308L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCTwvY3BwZnVuYz4KKwkJCTwveHNsOmlmPgorCQkJCisJCQktLT48eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9maWxlIiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCisKKwkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9tZW1iZXIiIHNlbGVjdD0iZW51bXZhbHVlW0Bwcm90PSdwdWJsaWMnXSIvPgorCQkJCisJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbWVtYmVyIj4KKwkJCQk8Y3BwZnVuYz4KKwkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQk8IS0tICBzdGF0dXMgYW5kIHZlcnNpb246IG9ubHkgb3ZlcnJpZGUgaWYgc2V0LiAtLT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOmNob29zZT4KKwkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZ0aXRsZS90ZXh0KCkgIT0gJyciPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPjwveHNsOndoZW4+CisJCQkJCQkJPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDpvdGhlcndpc2U+CisJCQkJCQk8L3hzbDpjaG9vc2U+PC94c2w6YXR0cmlidXRlPgorCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOmNob29zZT4KKwkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSAhPSAnJyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz48L3hzbDp3aGVuPgorCQkJCQkJCTx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZW51bV92ZXJzaW9uIiAvPjwveHNsOm90aGVyd2lzZT4KKwkJCQkJCTwveHNsOmNob29zZT48L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fbm9kZV9uYW1lIi8+Ojo8eHNsOnZhbHVlLW9mCisJCQkJCQlzZWxlY3Q9Im5hbWUvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iZmlsZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX25vZGVfZmlsZSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJPC9jcHBmdW5jPgorCQkJCisJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGVudW0gbWVtYmVyIC0tPgorCQkJCisKKwkJPC94c2w6Zm9yLWVhY2g+IDwhLS0gIGRvbmUgd2l0aCBlbnVtIC0tPgorCisKKyAgICAgIDwveHNsOmZvci1lYWNoPgorICA8L2xpc3Q+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKworCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENGdW5jX3htbC54c2x0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTBlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdApAQCAtMCwwICsxLDM2IEBACis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIGlzIGFuIFhTTFQgYnVpbGQgZmlsZSBmb3IgSUNVIHRvb2xzLiAKKyovCistLT4KKzwhLS0KKyAgTGlzdCBhbGwgQyBmdW5jdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlICdpbmRleC54bWwnCistLT4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJkb2NGb2xkZXIiIC8+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisgIDxsaXN0PgorICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlc19ub2RlIiBzZWxlY3Q9Ii9kb3h5Z2VuaW5kZXgvY29tcG91bmRbQGtpbmQ9J2ZpbGUnXS9AcmVmaWQiIC8+CisgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGZpbGVzX25vZGUiPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGUiIHNlbGVjdD0iY29uY2F0KCRkb2NGb2xkZXIsICcvJywgLiAsICcueG1sJykiIC8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZnVuY3Nfbm9kZSIgc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J2Z1bmN0aW9uJ10iIC8+CisgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZnVuY3Nfbm9kZSI+CisgICAgICAgICAgPGNwcGZ1bmM+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InN0YXR1cyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChkZWZpbml0aW9uL3RleHQoKSwgYXJnc3N0cmluZy90ZXh0KCkpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJsb2NhdGlvbi9AZmlsZSIgLz4KKyAgICAgICAgICA8L2NwcGZ1bmM+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgPC94c2w6Zm9yLWVhY2g+CisgIDwvbGlzdD4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgorCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENwcEZ1bmMueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENwcEZ1bmMueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk5MjljCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuYy54c2x0CkBAIC0wLDAgKzEsMTQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzwhLS0gTGlzdCBhbGwgY3BwIHB1YmxpYyBmdW5jdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlICdpbmRleC54bWwnIC0tPgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisJPHhzbDpwYXJhbSBuYW1lPSJkb2NGb2xkZXIiIC8+CisKKwk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKwkJPGxpc3Q+CisJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGVzX25vZGUiCisJCQkJc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdjbGFzcyddL0ByZWZpZCIgLz4KKwkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZmlsZXNfbm9kZSI+CisJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlIgorCQkJCQlzZWxlY3Q9ImNvbmNhdCgkZG9jRm9sZGVyLCAnLycsIC4gLCAnLnhtbCcpIiAvPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZnVuY3Nfbm9kZSIKKwkJCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZltAcHJvdD0ncHVibGljJ10vc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSdmdW5jdGlvbiddIiAvPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iY29tcG91bmRuYW1lIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9jb21wb3VuZG5hbWUvdGV4dCgpIiAvPgorCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZnVuY3Nfbm9kZSI+CisJCQkJCTxjcHBmdW5jPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+PHhzbDp2YWx1ZS1vZgorCQkJCQkJCXNlbGVjdD0iY29uY2F0KGRlZmluaXRpb24vdGV4dCgpLCBhcmdzc3RyaW5nL3RleHQoKSkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0ibG9jYXRpb24vQGZpbGUiIC8+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAc3RhdGljIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlubGluZSIgLz4KKwkJCQkJPC9jcHBmdW5jPgorCQkJCTwveHNsOmZvci1lYWNoPgorCQkJCQorCQkJCTwhLS0gIG5vdyBjb25zdCBzdGF0aWMgcHVibGljcyAtLT4KKwkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9InNjb25zdF9ub2RlIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J3ZhcmlhYmxlJ11bQHN0YXRpYz0neWVzJ10iIC8+CisJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRzY29uc3Rfbm9kZSI+CisJCQkJCTxjcHBmdW5jPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+c3RhdGljIDx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRlZmluaXRpb24vdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQHN0YXRpYyIgLz4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpbmxpbmUiIC8+CisJCQkJCTwvY3BwZnVuYz4KKwkJCQk8L3hzbDpmb3ItZWFjaD4KKworCQk8IS0tIAorCQkJCS8vTm8gcmVhbCBub24tc3RhdGljIHZhcmlhYmxlcyAtIGFuZCBhbHNvLCBkb3h5Z2VuIGlzIGNvbmZ1c2VkIGFib3V0IG5lc3RlZCBzdHJ1Y3RzL3VuaW9ucworCQkJCQorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iY29uc3Rfbm9kZSIKKwkJCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZltAcHJvdD0ncHVibGljJ10vc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSd2YXJpYWJsZSddW0BzdGF0aWM9J25vJ10iIC8+CisJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRjb25zdF9ub2RlIj4KKwkJCQkJPGNwcGZ1bmM+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0icHJvdG90eXBlIj4vKiBub3Qgc3RhdGljICovIDx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRlZmluaXRpb24vdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQHN0YXRpYyIgLz4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpbmxpbmUiIC8+CisJCQkJCTwvY3BwZnVuYz4KKwkJCQk8L3hzbDpmb3ItZWFjaD4KKwkJLS0+CisJCQkJPCEtLSAgbm93IGVudW1zIC0tPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9ub2RlIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9zZWN0aW9uZGVmL21lbWJlcmRlZltAa2luZD0nZW51bSddW0Bwcm90PSdwdWJsaWMnXSIgLz4KKwkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbm9kZSI+CisKKwkJCQkJPCEtLSAgdXNlIGEgbmFtZSwgZWxzZSAnKGFub255bW91cyknIC0tPgorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9uYW1lIj48eHNsOmNob29zZT4JCQkJCQorCQkJCQkJCTx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhuYW1lL3RleHQoKSwgJ0AnKSI+KGFub255bW91cyk8L3hzbDp3aGVuPgorCQkJCQkJCTx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lL3RleHQoKSIgLz48L3hzbDpvdGhlcndpc2U+CisJCQkJCQk8L3hzbDpjaG9vc2U+PC94c2w6dmFyaWFibGU+CisKKwkJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3N0YXR1cyIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPgorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fdmVyc2lvbiIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+CisKKwkJCQkJPGNwcGZ1bmM+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSIkZW51bV92ZXJzaW9uIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSAKKwkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGNvbXBvdW5kbmFtZSIvPjo6PHhzbDp2YWx1ZS1vZgorCQkJCQkJCXNlbGVjdD0iJGVudW1fbm9kZV9uYW1lIiAvPiB7fTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQk8L2NwcGZ1bmM+CisJCQorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9maWxlIiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkKKwkJCisJCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9tZW1iZXIiIHNlbGVjdD0iZW51bXZhbHVlW0Bwcm90PSdwdWJsaWMnXSIvPgorCQkJCQkKKwkJCQkJPCEtLSAgZm9yIGVhY2ggbWVtYmVyIC0tPgorCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbWVtYmVyIj4KKwkJCQkJCTxjcHBmdW5jPgorCQkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKwkJCQkJCQk8IS0tICBzdGF0dXMgYW5kIHZlcnNpb246IG9ubHkgb3ZlcnJpZGUgaWYgc2V0LiAtLT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPgorCQkJCQkJCQk8eHNsOmNob29zZT4KKwkJCQkJCQkJCTx4c2w6d2hlbiB0ZXN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSAhPSAnJyI+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+CisJCQkJCQkJCQk8L3hzbDp3aGVuPgorCQkJCQkJCQkJPHhzbDpvdGhlcndpc2U+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz4KKwkJCQkJCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJPC94c2w6Y2hvb3NlPgorCQkJCQkJCTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj4KKwkJCQkJCQkJPHhzbDpjaG9vc2U+CisJCQkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSAhPSAnJyI+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz4KKwkJCQkJCQkJCTwveHNsOndoZW4+CisJCQkJCQkJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fdmVyc2lvbiIgLz4KKwkJCQkJCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJPC94c2w6Y2hvb3NlPgorCQkJCQkJCTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJwcm90b3R5cGUiPmVudW0gCisJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjb21wb3VuZG5hbWUiLz46Ojx4c2w6dmFsdWUtb2YKKwkJCQkJCQkJc2VsZWN0PSIkZW51bV9ub2RlX25hbWUiIC8+Ojo8eHNsOnZhbHVlLW9mCisJCQkJCQkJCXNlbGVjdD0ibmFtZS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImZpbGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZW51bV9ub2RlX2ZpbGUiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPC9jcHBmdW5jPgorCQkJCQkKKwkJCQkJPC94c2w6Zm9yLWVhY2g+IDwhLS0gIGRvbmUgd2l0aCBlbnVtIG1lbWJlciAtLT4KKwkJCQkJwqAKKwkJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGVudW1zIC0tPgorCisJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGZpbGUgLS0+CisKKwkJPC9saXN0PgorCTwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKworCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDcHBGdW5jX3htbC54c2x0IGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMzZmYzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdApAQCAtMCwwICsxLDM2IEBACis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIGlzIGFuIFhTTFQgZmlsZS4gCisqLworLS0+Cis8IS0tCisgIExpc3QgYWxsIGNwcCBwdWJsaWMgZnVuY3Rpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSAnaW5kZXgueG1sJworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iZG9jRm9sZGVyIiAvPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICA8bGlzdD4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZXNfbm9kZSIgc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdjbGFzcyddL0ByZWZpZCIgLz4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZmlsZXNfbm9kZSI+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZSIgc2VsZWN0PSJjb25jYXQoJGRvY0ZvbGRlciwgJy8nLCAuICwgJy54bWwnKSIgLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmdW5jc19ub2RlIiBzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmL3NlY3Rpb25kZWYvbWVtYmVyZGVmW0Bwcm90PSdwdWJsaWMnXVtAa2luZD0nZnVuY3Rpb24nXSIgLz4KKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRmdW5jc19ub2RlIj4KKyAgICAgICAgICA8Y3BwZnVuYz4KKyAgICAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZ0aXRsZS90ZXh0KCkiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icHJvdG90eXBlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KGRlZmluaXRpb24vdGV4dCgpLCBhcmdzc3RyaW5nL3RleHQoKSkiIC8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorICAgICAgICAgIDwvY3BwZnVuYz4KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC9saXN0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKKwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5SZXBvcnQueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VuUmVwb3J0LnhzbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzMDcwZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VuUmVwb3J0LnhzbHQKQEAgLTAsMCArMSwzNzAgQEAKKzwhLS0KKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwOC0yMDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBpcyB0aGUgWFNMVCBmb3IgdGhlIEFQSSBSZXBvcnQuCisqLworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGVmdFZlciIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJyaWdodFZlciIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJyaWdodE1pbGVzdG9uZSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJsZWZ0TWlsZXN0b25lIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9Im5vdEZvdW5kIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9Im91clllYXIiIC8+CisKKyAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiB2ZXJzaW9uPSI0LjAiICBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCitkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIgorCW9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiCWVuY29kaW5nPSJ1dGYtOCIgaW5kZW50PSJ5ZXMiLz4KKworCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICAgIDxodG1sPgorCTx4c2w6Y29tbWVudD4KKwkgQ29weXJpZ2h0IChDKSAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRvdXJZZWFyIiAvPiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKwk8L3hzbDpjb21tZW50PgorICAgIDxoZWFkPgorICAgIDx0aXRsZT5JQ1U0QyBBUEkgQ29tcGFyaXNvbjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIi8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0TWlsZXN0b25lIiAvPiB3aXRoIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodE1pbGVzdG9uZSIgLz4gPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImljdTRjLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+CisgICAgPC9oZWFkPgorCisgICAgPGJvZHk+CisKKyAgICA8YSBuYW1lPSIjX3RvcCI+PC9hPgorCisgICAgPGgxPklDVTRDIEFQSSBDb21wYXJpc29uOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRNaWxlc3RvbmUiIC8+IHdpdGggPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodFZlciIgLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0TWlsZXN0b25lIiAvPiA8L2gxPgorCisgICAgPGRpdiBpZD0idG9jIj4KKwkgICAgPHVsPgorCSAgICAJPGxpPjxhIGhyZWY9IiNyZW1vdmVkIj5SZW1vdmVkIGZyb20gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIi8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI2RlcHJlY2F0ZWQiPkRlcHJlY2F0ZWQgb3IgT2Jzb2xldGVkIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI2NoYW5nZWQiPkNoYW5nZWQgaW4gIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI3Byb21vdGVkIj5Qcm9tb3RlZCB0byBzdGFibGUgaW4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodFZlciIgLz48L2E+PC9saT4KKwkgICAgCTxsaT48YSBocmVmPSIjYWRkZWQiPkFkZGVkIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI290aGVyIj5PdGhlciBleGlzdGluZyBkcmFmdHMgaW4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodFZlciIgLz48L2E+PC9saT4KKwkgICAgCTxsaT48YSBocmVmPSIjcHVyZXZpcnR1YWwiPlNpZ25hdHVyZSBTaW1wbGlmaWNhdGlvbnM8L2E+IDxzdXAgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IHllbGxvdzsgZm9udC1zaXplOiBzbWFsbGVzdDsnPihuZXcpPC9zdXA+PC9saT4KKwkgICAgPC91bD4KKwkgICAgPGhyIC8+CisJPC9kaXY+CisKKwk8YSBuYW1lPSJyZW1vdmVkIj48L2E+CisJICAgIDxoMj5SZW1vdmVkIGZyb20gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIi8+IDwvaDI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAcmlnaHRTdGF0dXM9JG5vdEZvdW5kXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+CisKKwk8YSBuYW1lPSJkZXByZWNhdGVkIj48L2E+CisgICAgPGgyPkRlcHJlY2F0ZWQgb3IgT2Jzb2xldGVkIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAcmlnaHRTdGF0dXM9J0RlcHJlY2F0ZWQnIGFuZCBAbGVmdFN0YXR1cyE9J0RlcHJlY2F0ZWQnKSBvciAoQHJpZ2h0U3RhdHVzPSdPYnNvbGV0ZScgYW5kIEBsZWZ0U3RhdHVzIT0nT2Jzb2xldGUnKV0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8UC8+PGEgaHJlZj0iI190b3AiPihqdW1wIGJhY2sgdG8gdG9wKTwvYT48aHIvPgorCisJPGEgbmFtZT0iY2hhbmdlZCI+PC9hPgorICAgIDxoMj5DaGFuZ2VkIGluICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiAob2xkLCBuZXcpPC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAbGVmdFN0YXR1cyAhPSAkbm90Rm91bmQpIGFuZCAoQHJpZ2h0U3RhdHVzICE9ICRub3RGb3VuZCkgYW5kICggKEBsZWZ0U3RhdHVzICE9IEByaWdodFN0YXR1cykgb3IgKEBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uKSApIGFuZCBub3QgKCAoQGxlZnRTdGF0dXMgPSAnRHJhZnQnKSBhbmQgKEByaWdodFN0YXR1cyA9ICdTdGFibGUnKSBhbmQgKEByaWdodFZlcnNpb24gPSAkcmlnaHRWZXIpICldIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPFAvPjxhIGhyZWY9IiNfdG9wIj4oanVtcCBiYWNrIHRvIHRvcCk8L2E+PGhyLz4KKworCTxhIG5hbWU9InByb21vdGVkIj48L2E+CisgICAgPGgyPlByb21vdGVkIHRvIHN0YWJsZSBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvaDI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAbGVmdFN0YXR1cyAhPSAnU3RhYmxlJyBhbmQgIEByaWdodFN0YXR1cyA9ICdTdGFibGUnXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+CisKKyAgICA8YSBuYW1lPSJhZGRlZCI+PC9hPgorICAgIDxoMj5BZGRlZCBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvaDI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAbGVmdFN0YXR1cz0kbm90Rm91bmRdIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPFAvPjxhIGhyZWY9IiNfdG9wIj4oanVtcCBiYWNrIHRvIHRvcCk8L2E+PGhyLz4KKworICAgIDxhIG5hbWU9Im90aGVyIj48L2E+CisgICAgPGgyPk90aGVyIGV4aXN0aW5nIGRyYWZ0cyBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvaDI+CisgICAgPGRpdiBjbGFzcz0nb3RoZXInPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5mb1RhYmxlIj4gPCEtLSAgbm90ZTogbm90ZSBnZW5UYWJsZSAtLT4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0ByaWdodFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFZlcnNpb24gIT0gJHJpZ2h0VmVyXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvZGl2PgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+CisKKyAgICA8YSBuYW1lPSJwdXJldmlydHVhbCI+PC9hPgorICAgIDxoMj5TaWduYXR1cmUgU2ltcGxpZmljYXRpb25zPC9oMj4KKyAgICA8aT5UaGlzIHNlY3Rpb24gc2hvd3MgY2FzZXMgd2hlcmUgdGhlIHNpZ25hdHVyZSB3YXMgInNpbXBsaWZpZWQiIGZvciB0aGUgc2FrZSBvZiBjb21wYXJpc29uLiBUaGUgc2ltcGxpZmllZCBmb3JtIGlzIGluIGJvbGQsIGZvbGxvd2VkIGJ5CisgICAgCWFsbCBwb3NzaWJsZSB2YXJpYXRpb25zIGluICJvcmlnaW5hbCIgZm9ybS48L2k+CisgICAgPGRpdiBjbGFzcz0nb3RoZXInPgorICAgIAk8dWw+CisgICAgCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2xpc3Qvc2ltcGxpZmljYXRpb25zL3NpbXBsaWZpY2F0aW9uIj4KKyAgICAJCQk8bGk+PGI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImJhc2UiIC8+PC9iPgorICAgIAkJCTxiciAvPgorICAgIAkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iY2hhbmdlIj4KKyAgICAJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0ZXh0KCkiIC8+PGJyIC8+CisgICAgCQkJCTwveHNsOmZvci1lYWNoPgorICAgIAkJCTwvbGk+CisgICAgCQk8L3hzbDpmb3ItZWFjaD4KKyAgICAJPC91bD4KKyAgICA8L2Rpdj4KKyAgICA8UC8+PGEgaHJlZj0iI190b3AiPihqdW1wIGJhY2sgdG8gdG9wKTwvYT48aHIvPgorPCEtLQorCistLT4KKworICAgIDxwPjxpPjxmb250IHNpemU9Ii0xIj5Db250ZW50cyBnZW5lcmF0ZWQgYnkgU3RhYmxlQVBJIHRvb2wgb24gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZSIgLz48YnIvPkNvcHlyaWdodCAoQykgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRvdXJZZWFyIiAvPiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC48L2ZvbnQ+PC9pPjwvcD4KKyAgICA8L2JvZHk+CisgICAgPC9odG1sPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIGFsbW9zdCBhbGwgc3V0YWJsZXMgYXJlIGdlbmVyYXRlZCBieSB0aGlzIC0tPgorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGVzIiAvPgorICAgIDx0YWJsZSBjbGFzcz0nZ2VuVGFibGUnIEJPUkRFUj0iMSI+CisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKzwhLS0KKyAgICAgICAgICAgIDx4c2w6Y29tbWVudD4KKyAgICAgICAgICAgICAgQHByb3RvdHlwZTogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwcm90b3R5cGUiIC8+CisgICAgICAgICAgICAgIEBsZWZ0U3RhdHVzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRTdGF0dXMiIC8+CisgICAgICAgICAgICAgIEBsZWZ0VmVyc2lvbjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgQHJpZ2h0U3RhdHVzOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJpZ2h0U3RhdHVzIiAvPgorICAgICAgICAgICAgICBAcmlnaHRWZXJzaW9uOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJpZ2h0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgIDwveHNsOmNvbW1lbnQ+CistLT4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIncm93JyIvPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iKHBvc2l0aW9uKCkgbW9kIDIpIi8+IDwhLS0gZm9yIGV2ZW4tb2RkIHJvdyBjb2xvcmluZ3MgLS0+CisgICAgICAgICAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIpID0gMCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzAiIC8+PC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cxIiAvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdmaWxlJz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmaWxlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ncHJvdG8nPiA8eHNsOnZhbHVlLW9mIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiIHNlbGVjdD0iQHByb3RvdHlwZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3N0YWJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAJPHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIGFuZCBAbGVmdFZlcnNpb24gPSBAcmlnaHRWZXJzaW9uIj4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbHNwYW4iPjI8L3hzbDphdHRyaWJ1dGU+CisJICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+Y2VudGVyPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgIAk8L3hzbDppZj4KKworICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRTdGF0dXMiIC8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSAnRHJhZnQnIGFuZCBAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJyBhbmQgQGxlZnRWZXJzaW9uID0gQHJpZ2h0VmVyc2lvbiI+JiN4MjE5MjtTdGFibGU8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAbGVmdFZlcnNpb24gIT0gJycgYW5kIEBsZWZ0VmVyc2lvbiAhPSAnLiciPgorCSAgICAgICAgICAgICAgPGJyLz4KKwkgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFZlcnNpb24iIC8+CisJICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQGxlZnRTdGF0dXMgPSAnJyBhbmQgQGxlZnRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgIDxpPih1bnRhZ2dlZCk8L2k+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzICE9ICdEcmFmdCcgb3IgQHJpZ2h0U3RhdHVzICE9ICdTdGFibGUnIG9yIEBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIj4KKyAgICAgICAgICAgICAgICA8dGQ+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRTdGF0dXMiIC8+CisgICAgICAgICAgICAgICAgICAgIDxici8+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJy4nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iid2ZXJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisJICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorCSAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScgYW5kIG5vdCAoIChAbGVmdFN0YXR1cyA9ICdEcmFmdCcpIGFuZCAoQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScpIGFuZCAoQHJpZ2h0VmVyc2lvbiA9ICRyaWdodFZlcikgKSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz48YiB0aXRsZT0nQSBzdGFibGUgQVBJIGNoYW5nZWQgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oY2hhbmdlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkByaWdodFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFZlcnNpb24gIT0gJHJpZ2h0VmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIGRyYWZ0IEFQSSBoYXMgdGhlIHdyb25nIHZlcnNpb24uJyBjbGFzcz0nYmlnd2Fybic+KHNob3VsZCBiZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIi8+KTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAbGVmdFN0YXR1cyA9ICRub3RGb3VuZCBhbmQgQHJpZ2h0VmVyc2lvbiA9ICcnIGFuZCBAcmlnaHRTdGF0dXMgIT0gJ0ludGVybmFsJyBhbmQgQHJpZ2h0U3RhdHVzICE9ICdEZXByZWNhdGVkJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAJPGJyLz48YiB0aXRsZT0nQSBuZXcgQVBJIHdhcyBpbnRyb2R1Y2VkIHRoYXQgd2FzIG5vdCB0YWdnZWQuJyBjbGFzcz0nYmlnd2Fybic+KHVudGFnZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkByaWdodFN0YXR1cyA9ICdTdGFibGUnIGFuZCBAcmlnaHRWZXJzaW9uID0gJHJpZ2h0VmVyIj4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2Jvcm5zdGFibGUnPgorICAgICAgICAgICAgICAgICAgICA8YiB0aXRsZT0nQSBuZXcgQVBJIHdhcyBpbnRyb2R1Y2VkIGFzIHN0YWJsZSBpbiAkcmlnaHRWZXIuJyBjbGFzcz0nYmlnd2Fybic+KEJvcm4gU3RhYmxlKTwvYj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgIDwveHNsOnRlbXBsYXRlPgorCisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmZvVGFibGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZXMiIC8+CisgICAgPHRhYmxlIGNsYXNzPSdnZW5UYWJsZScgQk9SREVSPSIxIj4KKyAgICA8VEhFQUQ+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidGaWxlJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidBUEknIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+IDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgPC9USEVBRD4KKworICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJG5vZGVzIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBmaWxlIiAvPgorCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3JvdyciLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iihwb3NpdGlvbigpIG1vZCAyKSIvPgorICAgICAgICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9Iihwb3NpdGlvbigpIG1vZCAyKSA9IDAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cwIiAvPjwveHNsOndoZW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0icm93MSIgLz48L3hzbDpvdGhlcndpc2U+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nZmlsZSc+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZmlsZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3Byb3RvJz4gPHhzbDp2YWx1ZS1vZiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIiBzZWxlY3Q9IkBwcm90b3R5cGUiIC8+IDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidzdGFiY2hhbmdlJyIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisKKyAgICAgICAgICAgICAgICAgICAJPHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyA9IEByaWdodFN0YXR1cyBhbmQgQGxlZnRWZXJzaW9uID0gQHJpZ2h0VmVyc2lvbiI+CisJICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xzcGFuIj4yPC94c2w6YXR0cmlidXRlPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPmNlbnRlcjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAJPC94c2w6aWY+CisKKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0U3RhdHVzIiAvPgorICAgICAgICAgICAgICAgICAgICA8YnIvPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRWZXJzaW9uIiAvPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0gIkBsZWZ0U3RhdHVzICE9IEByaWdodFN0YXR1cyBvciBAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiI+CisgICAgICAgICAgICAgICAgPHRkPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJpZ2h0U3RhdHVzIiAvPgorICAgICAgICAgICAgICAgICAgICA8YnIvPgorICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIndmVyY2hhbmdlJyIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgdGVzdCA9ICJAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorCSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJG5vdEZvdW5kIGFuZCBAcmlnaHRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgCTxici8+PGIgdGl0bGU9J0EgbmV3IEFQSSB3YXMgaW50cm9kdWNlZCB0aGF0IHdhcyBub3QgdGFnZ2VkLicgY2xhc3M9J2JpZ3dhcm4nPih1bnRhZ2dlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgIDwveHNsOnRlbXBsYXRlPgorCisKKyAgICA8eHNsOnRlbXBsYXRlIG5hbWU9InB1cmVWaXJ0dWFsVGFibGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZXMiIC8+CisgICAgPHRhYmxlIGNsYXNzPSdnZW5UYWJsZScgQk9SREVSPSIxIj4KKyAgICA8IS0tCisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisgICAgLS0+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKworICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iidyb3cnIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIocG9zaXRpb24oKSBtb2QgMikiLz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIocG9zaXRpb24oKSBtb2QgMikgPSAwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0icm93MCIgLz48L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzEiIC8+PC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2ZpbGUnPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZpbGUiIC8+IDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdwcm90byc+IDx4c2w6dmFsdWUtb2YgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIgc2VsZWN0PSJAcHJvdG90eXBlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInc3RhYmNoYW5nZSciIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorCisgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSBAcmlnaHRTdGF0dXMgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+MjwveHNsOmF0dHJpYnV0ZT4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgCTwveHNsOmlmPgorCisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFN0YXR1cyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9ICJAbGVmdFN0YXR1cyAhPSBAcmlnaHRTdGF0dXMgb3IgQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24iPgorICAgICAgICAgICAgICAgIDx0ZD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFN0YXR1cyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIndmVyY2hhbmdlJyIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJG5vdEZvdW5kIGFuZCBAcmlnaHRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgCTxici8+PGIgdGl0bGU9J0EgbmV3IEFQSSB3YXMgaW50cm9kdWNlZCB0aGF0IHdhcyBub3QgdGFnZ2VkLicgY2xhc3M9J2JpZ3dhcm4nPih1bnRhZ2dlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgIDwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5yZXBvcnRfeG1sLnhzbHQgYi9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2dlbnJlcG9ydF94bWwueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAxYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5yZXBvcnRfeG1sLnhzbHQKQEAgLTAsMCArMSwyMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFRoaXMgaXMgdGhlIFhTTFQgZm9yIHRoZSBBUEkgUmVwb3J0LCBYTUwgc3R5bGUKKyovCistLT4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKzwhLS0KKyAgPHhzbDpwYXJhbSBuYW1lPSJsZWZ0U3RhdHVzIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InJpZ2h0U3RhdHVzIiAvPgorLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGVmdFZlciIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJyaWdodFZlciIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJudWwiIC8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJvdXJZZWFyIiAvPgorICAKKworICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKyAgICA8eHNsOmNvbW1lbnQ+CisgICAgICBDb3B5cmlnaHQgKEMpICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG91clllYXIiIC8+LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICA8L3hzbDpjb21tZW50PgorICAgIDxjaGFuZ2VSZXBvcnQ+CisgICAgICA8aWRlbnRpdHk+CisJPHhzbDphdHRyaWJ1dGUgbmFtZT0ibGVmdCI+CisJICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIi8+CisJPC94c2w6YXR0cmlidXRlPgorCTx4c2w6YXR0cmlidXRlIG5hbWU9InJpZ2h0Ij4KKwkgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+CisJPC94c2w6YXR0cmlidXRlPgorCTx4c2w6YXR0cmlidXRlIG5hbWU9ImdlbmVyYXRlZC1kYXRlIj4KKwkgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVRpbWUiIC8+CisJPC94c2w6YXR0cmlidXRlPgorICAgICAgPC9pZGVudGl0eT4KKworICAgICAgPCEtLSA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImljdTRjLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+IC0tPgorCisgICAgICA8ZnVuY3Rpb25zIG5hbWU9InJlbW92ZWQiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2VuVGFibGUiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGVzIiBzZWxlY3Q9Ii9saXN0L2Z1bmNbQHJpZ2h0U3RhdHVzPSRudWxdIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKworICAgICAgPGZ1bmN0aW9ucyBuYW1lPSJkZXByZWNhdGVkIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAcmlnaHRTdGF0dXM9J0RlcHJlY2F0ZWQnIGFuZCBAbGVmdFN0YXR1cyE9J0RlcHJlY2F0ZWQnKSBvciAoQHJpZ2h0U3RhdHVzPSdPYnNvbGV0ZScgYW5kIEBsZWZ0U3RhdHVzIT0nT2Jzb2xldGUnKV0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvZnVuY3Rpb25zPgorCisgICAgICA8ZnVuY3Rpb25zIG5hbWU9ImNoYW5nZWQiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2VuVGFibGUiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGVzIiBzZWxlY3Q9Ii9saXN0L2Z1bmNbKEBsZWZ0U3RhdHVzICE9ICRudWwpIGFuZCAoQHJpZ2h0U3RhdHVzICE9ICRudWwpIGFuZCAoIChAbGVmdFN0YXR1cyAhPSBAcmlnaHRTdGF0dXMpIG9yIChAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbikgKV0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvZnVuY3Rpb25zPgorCisgICAgICA8ZnVuY3Rpb25zIG5hbWU9InByb21vdGVkIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0BsZWZ0U3RhdHVzICE9ICdTdGFibGUnIGFuZCAgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZSddIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKyAgICAKKyAgICAgIDxmdW5jdGlvbnMgbmFtZT0iYWRkZWQiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2VuVGFibGUiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGVzIiBzZWxlY3Q9Ii9saXN0L2Z1bmNbQGxlZnRTdGF0dXM9JG51bF0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvZnVuY3Rpb25zPgorCisgICAgICA8ZnVuY3Rpb25zIG5hbWU9ImRyYWZ0Ij4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZm9UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAcmlnaHRTdGF0dXMgPSAnRHJhZnQnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICRyaWdodFZlcl0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvZnVuY3Rpb25zPgorCisgICAgPC9jaGFuZ2VSZXBvcnQ+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZ2VuVGFibGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZXMiIC8+CisgICAgPHRhYmxlIGNsYXNzPSdnZW5UYWJsZScgQk9SREVSPSIxIj4KKyAgICA8VEhFQUQ+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidGaWxlJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidBUEknIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+IDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgPC9USEVBRD4KKworICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJG5vZGVzIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBmaWxlIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3JvdyciLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iihwb3NpdGlvbigpIG1vZCAyKSIvPgorICAgICAgICAgICAgICAgICAgICA8IS0tIAorICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIocG9zaXRpb24oKSBtb2QgMikgPSAwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0icm93MCIgLz48L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzEiIC8+PC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2ZpbGUnPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZpbGUiIC8+IDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdwcm90byc+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcHJvdG90eXBlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInc3RhYmNoYW5nZSciIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+CisgICAgICAgCSAgICAgICAgICAgIAkJMgorICAgICAgIAkgICAgICAgICAgICAJPC94c2w6YXR0cmlidXRlPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgorICAgICAgIAkgICAgICAgICAgICAJCWNlbnRlcgorICAgICAgIAkgICAgICAgICAgICAJPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgIAk8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0U3RhdHVzIiAvPjx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSAnRHJhZnQnIGFuZCBAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJyBhbmQgQGxlZnRWZXJzaW9uID0gQHJpZ2h0VmVyc2lvbiI+Jmd0O1N0YWJsZTwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8YnIvPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRWZXJzaW9uIiAvPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzICE9ICdEcmFmdCcgb3IgQHJpZ2h0U3RhdHVzICE9ICdTdGFibGUnIG9yIEBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIj4KKyAgICAgICAgICAgICAgICA8dGQ+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRTdGF0dXMiIC8+IAorICAgICAgICAgICAgICAgICAgICA8YnIvPiAKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIndmVyY2hhbmdlJyIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0Egc3RhYmxlIEFQSSBjaGFuZ2VkIHZlcnNpb24uJyBjbGFzcz0nYmlnd2Fybic+KGNoYW5nZWQpPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAcmlnaHRTdGF0dXMgPSAnRHJhZnQnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICRyaWdodFZlciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz48YiB0aXRsZT0nQSBkcmFmdCBBUEkgaGFzIHRoZSB3cm9uZyB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihzaG91bGQgYmUgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodFZlciIvPik8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQGxlZnRTdGF0dXMgPSAnTm9uZScgYW5kIEByaWdodFZlcnNpb24gPSAnJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAJPGJyLz48YiB0aXRsZT0nQSBuZXcgQVBJIHdhcyBpbnRyb2R1Y2VkIHRoYXQgd2FzIG5vdCB0YWdnZWQuJyBjbGFzcz0nYmlnd2Fybic+KHVudGFnZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8L3RhYmxlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgCisgICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmZvVGFibGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZXMiIC8+CisgICAgPHRhYmxlIGNsYXNzPSdnZW5UYWJsZScgQk9SREVSPSIxIj4KKyAgICA8VEhFQUQ+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidGaWxlJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidBUEknIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+IDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgPC9USEVBRD4KKworICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJG5vZGVzIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBmaWxlIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3JvdyciLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iihwb3NpdGlvbigpIG1vZCAyKSIvPgorICAgICAgICAgICAgICAgICAgICA8IS0tIAorICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIocG9zaXRpb24oKSBtb2QgMikgPSAwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0icm93MCIgLz48L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzEiIC8+PC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2ZpbGUnPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZpbGUiIC8+IDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdwcm90byc+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcHJvdG90eXBlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInc3RhYmNoYW5nZSciIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAJPHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyA9IEByaWdodFN0YXR1cyBhbmQgQGxlZnRWZXJzaW9uID0gQHJpZ2h0VmVyc2lvbiI+CisJICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xzcGFuIj4KKyAgICAgICAJICAgICAgICAgICAgCQkyCisgICAgICAgCSAgICAgICAgICAgIAk8L3hzbDphdHRyaWJ1dGU+CisJICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CisgICAgICAgCSAgICAgICAgICAgIAkJY2VudGVyCisgICAgICAgCSAgICAgICAgICAgIAk8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgCTwveHNsOmlmPgorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFN0YXR1cyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9ICJAbGVmdFN0YXR1cyAhPSBAcmlnaHRTdGF0dXMgb3IgQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24iPgorICAgICAgICAgICAgICAgIDx0ZD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFN0YXR1cyIgLz4gCisgICAgICAgICAgICAgICAgICAgIDxici8+IAorICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iid2ZXJjaGFuZ2UnIiAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFZlcnNpb24iIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJ05vbmUnIGFuZCBAcmlnaHRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgCTxici8+PGIgdGl0bGU9J0EgbmV3IEFQSSB3YXMgaW50cm9kdWNlZCB0aGF0IHdhcyBub3QgdGFnZ2VkLicgY2xhc3M9J2JpZ3dhcm4nPih1bnRhZ2dlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgIDwveHNsOnRlbXBsYXRlPgorICAKKzwveHNsOnN0eWxlc2hlZXQ+CisKKworCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmxkaWN1cmVzLnB5IGIvc2NyaXB0cy9ibGRpY3VyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVmMmNkZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvYmxkaWN1cmVzLnB5CkBAIC0wLDAgKzEsMTg4IEBACisjIS91c3IvYmluL3B5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKK3ByaW50ICJOT1RFOiB0aGlzIHRvb2wgaXMgYSBURUNITk9MT0dZIFBSRVZJRVcgYW5kIG5vdCBhIHN1cHBvcnRlZCBJQ1UgdG9vbC4iCisjCisjIEBhdXRob3IgU3RldmVuIFIuIExvb21pcyA8c3JsQGljdS1wcm9qZWN0Lm9yZz4KKyMKKyMgWWV0IEFub3RoZXIgUmVzb3VyY2UgQnVpbGRlcgorIworIyBVc2FnZToKKyMKKyMjJCBta2RpciBsb2MKKyMjJCBlY2hvICdyb290IHsgaGVsbG8geyAiSGVsbG8iIH0gfScgPiBsb2Mvcm9vdC50eHQKKyMjJCBlY2hvICdlcyB7IGhlbGxvIHsgIkhvbGEiIH0gfScgPiBsb2MvZXMudHh0CisjIyQgcm0gLXJmIC4vb3V0CisjIyQgYmxkaWN1cmVzLnB5IC0tbmFtZSBteWFwcCAtLWZyb20gLi9sb2MgLWQgLi9vdXQKKyMjJCBscyBvdXQvbXlhcHAuZGF0CisjCisjIHVzZSAnYmxkaWN1cmVzLnB5IC0taGVscCcgZm9yIGhlbHAuCisjCisjIEJVR1MvVE9ETworIyAqIGRlcGVuZGVuY3kgY2FsY3VsYXRpb24KKyMgKiBwYXRobmFtZXMvUEFUSCBmb3IgZ2VucmIvcGtnZGF0YQorIyAqIGNsZWFudXAgb2YgZmlsZXMsIC4vb3V0LCBldGMKKyMgKiBkb2N1bWVudCByZXNfaW5kZXgKKyMgKiBwcm9iYWJseSBwYXRobmFtZSBtdW5naW5nCisjICogZGV1Z2xpZnkgcHl0aG9uCisKKworaW1wb3J0IHN5cworCisjIGZvciB1dGYtOAorI3JlbG9hZChzeXMpCisjc3lzLnNldGRlZmF1bHRlbmNvZGluZygidXRmLTgiKQorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBvcworCitlbmRpYW49c3lzLmJ5dGVvcmRlcgorCitwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nWWV0IEFub3RoZXIgSUNVIFJlc291cmNlIEJ1aWxkZXInLCBlcGlsb2c9J0lDVSB0b29sLCBodHRwOi8vaWN1LXByb2plY3Qub3JnIC0gbWFzdGVyIGNvcHkgYXQgaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L3Rvb2xzL3RydW5rL3NjcmlwdHMvYmxkaWN1cmVzLnB5JykKK3BhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZnJvbScsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0nZnJvbWRpcnMnLCBoZWxwPSdyZWFkIC50eHQgZmlsZXMgZnJvbSB0aGlzIGRpcicsIG1ldGF2YXI9J2Zyb21kaXInLCByZXF1aXJlZD1UcnVlKQorcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1uYW1lJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J3NldCB0aGUgYnVuZGxlIG5hbWUsIHN1Y2ggYXMgIm15YXBwIicsIG1ldGF2YXI9J2J1bmRuYW1lJywgcmVxdWlyZWQ9VHJ1ZSkKK3BhcnNlci5hZGRfYXJndW1lbnQoJy1tJywgJy0tbW9kZScsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdwa2dkYXRhIG1vZGUnLCBtZXRhdmFyPSdtb2RlJywgZGVmYXVsdD0iYXJjaGl2ZSIpCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlc3QnLCBhY3Rpb249J3N0b3JlJywgZGVzdD0nZGVzdGRpcicsIGhlbHA9J2Rlc3QgZGlyLCBkZWZhdWx0IGlzICIuIi4nLCBkZWZhdWx0PSIuIiwgbWV0YXZhcj0nZGVzdGRpcicpCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctZScsICctLWVuZGlhbicsIGFjdGlvbj0nc3RvcmUnLCBkZXN0PSdlbmRpYW4nLCBoZWxwPSdlbmRpYW4sIGJpZywgbGl0dGxlIG9yIGhvc3QsIHlvdXIgZGVmYXVsdCBpcyAiJXMiLicgJSBlbmRpYW4sIGRlZmF1bHQ9ZW5kaWFuLCBtZXRhdmFyPSdlbmRpYW5uZXNzJykKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyYm9zZScsICctdicsIGFjdGlvbj0nY291bnQnLGRlZmF1bHQ9MCkKKworYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKK2lmIGFyZ3MudmVyYm9zZT4wOgorICAgIHByaW50ICJPcHRpb25zOiAiK3N0cihhcmdzKQorCitpZiBhcmdzLnZlcmJvc2UgPiAwOgorICAgIHByaW50ICJta2RpciAiICsgYXJncy5kZXN0ZGlyCitvcy5tYWtlZGlycyhhcmdzLmRlc3RkaXIpCit0bXBkaXIgPSAndG1wJworb3MubWFrZWRpcnMoJyVzLyVzLycgJSAoYXJncy5kZXN0ZGlyLCB0bXBkaXIpKQorCitsaXN0bmFtZSA9ICclcy8lcy9pY3VmaWxlcy5sc3QnICUgKGFyZ3MuZGVzdGRpciwgdG1wZGlyKQorCisKKworaWYgYXJncy5lbmRpYW4gbm90IGluICgiYmlnIiwibGl0dGxlIiwiaG9zdCIpOgorICAgIHByaW50ICJVbmtub3duIGVuZGlhbm5lc3M6ICVzIiAlIGFyZ3MuZW5kaWFuCisgICAgc3lzLmV4aXQoMSkKKworaWYgYXJncy5lbmRpYW4gaXMgImhvc3QiOgorICAgIGFyZ3MuZW5kaWFuID0gZW5kaWFuCisKK25lZWRzd2FwID0gYXJncy5lbmRpYW4gaXMgbm90IGVuZGlhbgorCitpZiBuZWVkc3dhcCBhbmQgYXJncy5tb2RlIG5vdCBpbiAoImFyY2hpdmUiLCAiZmlsZXMiKToKKyAgICBwcmludCAiRG9uJ3Qga25vdyBob3cgdG8gZG8gc3dhcHBpbmcgZm9yIG1vZGU9JXMiICUgYXJncy5tb2RlCisgICAgc3lzLmV4aXQoMSkKKworcGtnbW9kZSA9IGFyZ3MubW9kZQorCitpZiBuZWVkc3dhcCBhbmQgYXJncy5tb2RlIGluICgiZmlsZXMiKToKKyAgICBwa2dtb2RlID0gImFyY2hpdmUiCisKK2lmIGFyZ3MudmVyYm9zZSA+IDA6CisgICAgcHJpbnQgIj4lcyIgJSAobGlzdG5hbWUpCitsaXN0Zm4gPSBvcGVuKGxpc3RuYW1lLCAndycpCisKK3ByaW50ID4+bGlzdGZuLCAnIyBsaXN0IGZvciAiJXMiIGdlbmVyYXRlZCBieSAlcyBvbiAlcycgJSAoYXJncy5uYW1lLHBhcnNlci5wcm9nLCAnKG5vdyknKQorcHJpbnQgPj5saXN0Zm4sICcjIGFyZ3M6ICcgKyBzdHIoYXJncykKK3ByaW50ID4+bGlzdGZuLCAnIycKKworaWR4bmFtZSA9ICclcy8lcy9yZXNfaW5kZXgudHh0JyAlIChhcmdzLmRlc3RkaXIsIHRtcGRpcikKK2lkeGZuID0gb3BlbihpZHhuYW1lLCAndycpCitwcmludCA+PmlkeGZuLCAiIiIvLyBXYXJuaW5nLCB0aGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSAlcworcmVzX2luZGV4OnRhYmxlKG5vZmFsbGJhY2spIHsKKyBJbnN0YWxsZWRMb2NhbGVzOnRhYmxlIHsiIiIgJSAocGFyc2VyLnByb2cpCisKK2dlbnMgPSB7fQorCitkZWYgYWRkX3JlcyhyZXNuYW1lLHR4dG5hbWUsIGxvYyk6CisgICAgaWYgYXJncy52ZXJib3NlPjA6CisgICAgICAgIHByaW50ICIrICVzIChmcm9tICVzKSIgJSAobG9jLCB0eHRuYW1lKQorICAgIHByaW50ID4+bGlzdGZuLCAiIyAlcyIgJSAodHh0bmFtZSkKKyAgICBwcmludCA+Pmxpc3RmbiwgIiVzLnJlcyIgJSAobG9jKQorICAgIGdlbnNbbG9jXSA9IHsgImxvYyI6IGxvYywgInJlcyI6IHJlc25hbWUsICJ0eHQiOiB0eHRuYW1lIH0KKworYWRkX3JlcygnJXMvJXMvcmVzX2luZGV4LnJlcycgJSAoYXJncy5kZXN0ZGlyLHRtcGRpciksIGlkeG5hbWUsICdyZXNfaW5kZXgnKQorCitkZWYgYWRkX2xvYyhwYXRoLCBsb2MpOgorICAgIHJlc2YgPSAnJXMvJXMvJXMucmVzJyAlIChhcmdzLmRlc3RkaXIsdG1wZGlyLGxvYykKKyAgICB0eHRmID0gJyVzLyVzLnR4dCcgJSAocGF0aCwgbG9jKQorICAgIHByaW50ID4+aWR4Zm4sICIgICVzIHtcIlwifSIgJSBsb2MKKyAgICBhZGRfcmVzKHJlc2YsIHR4dGYsIGxvYykKKworZm9yIGRpciBpbiBhcmdzLmZyb21kaXJzOgorICAgIGlmIGFyZ3MudmVyYm9zZT4wOgorICAgICAgICBwcmludCAiQ29sbGVjdGluZyAudHh0IGZpbGVzIGluICVzIiAlIChkaXIpCisKKyAgICB3YWxrcyA9IG9zLndhbGsoZGlyKQorICAgIGZvciBlbnQgaW4gd2Fsa3M6CisgICAgICAgICAgICBqdW5rID0gKHBhdGgsZGlycyxmaWxlcykgPSBlbnQKKyAgICAgICAgICAgIGlmIGFyZ3MudmVyYm9zZT4zOgorICAgICAgICAgICAgICAgIHByaW50IGp1bmsKKyAgICAgICAgICAgIGlmIChwYXRoLmZpbmQoIi8uc3ZuIikgIT0gLTEpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiAoZmlsZVstNDpdICE9ICIudHh0Iik6CisgICAgICAgICAgICAgICAgICAgIGlmIGFyZ3MudmVyYm9zZT4xOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIklnbm9yaW5nICVzLyVzIHdpdGggc3VmZml4ICVzIiAlIChwYXRoLGZpbGUsIGZpbGVbLTQ6XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsb2MgPSBmaWxlWzotNF0KKyAgICAgICAgICAgICAgICBhZGRfbG9jKHBhdGgsIGxvYykKKworcHJpbnQgPj5pZHhmbiwgIiB9IgorcHJpbnQgPj5pZHhmbiwgIn0iCisKK2lkeGZuLmNsb3NlKCkKK2xpc3Rmbi5jbG9zZSgpCisKK2lmIChhcmdzLnZlcmJvc2U+Mik6CisgICAgcHJpbnQgZ2VucworCitpZiAoYXJncy52ZXJib3NlPjMpOgorICAgIHByaW50ICJUT0RPOiBkZXBlbmRlbmN5IHRyYWNraW5nLiBGb3Igbm93LCBkb250JyBjYXJlIgorCitmb3IgZ2VuIGluIGdlbnM6CisgICAgaXRlbSA9IGdlbnNbZ2VuXQorICAgIGNtZCA9ICdnZW5yYiAtZCAiJXMvJXMiICIlcyInICUgKGFyZ3MuZGVzdGRpciwgdG1wZGlyLCBpdGVtWyJ0eHQiXSkKKyAgICBpZiAoYXJncy52ZXJib3NlPjEpOgorICAgICAgICBwcmludCAiIyAiICsgY21kCisgICAgb3Muc3lzdGVtKGNtZCkKKworY21kID0gJ3BrZ2RhdGEgLW0gIiVzIiAtVCAiJXMvJXMiIC1wICIlcyIgLXMgIiVzLyVzIiAtZCAiJXMiICIlcyInICUgKHBrZ21vZGUsYXJncy5kZXN0ZGlyLHRtcGRpcixhcmdzLm5hbWUsYXJncy5kZXN0ZGlyLHRtcGRpcixhcmdzLmRlc3RkaXIsbGlzdG5hbWUpCitpZiAoYXJncy52ZXJib3NlPjEpOgorICAgIGNtZCA9IGNtZCArICIgLXYiCisgICAgcHJpbnQgIiMgIiArIGNtZAorcmMgPSBvcy5zeXN0ZW0oY21kKQoraWYgcmMgaXMgbm90IDA6CisgICAgcHJpbnQgIiMgQ29tbWFuZCBmYWlsZWQ6ICIgKyBjbWQKKyAgICBzeXMuZXhpdChyYykKKworaWYgbmVlZHN3YXA6CisgICAgb3V0ZmlsZSA9ICIlcy8lcy5kYXQiICUgKGFyZ3MuZGVzdGRpciwgYXJncy5uYW1lKQorICAgIHRtcGZpbGUgPSAgIiVzLyVzLyVzLmRhdCIgJSAoYXJncy5kZXN0ZGlyLCB0bXBkaXIsIGFyZ3MubmFtZSkKKyAgICBpZiBhcmdzLm1vZGUgaW4gKCJmaWxlcyIsImFyY2hpdmUiKToKKyAgICAgICAgcHJpbnQgIiMgJXMgLT4gJXMiICUgKG91dGZpbGUsIHRtcGZpbGUpCisgICAgICAgIG9zLnJlbmFtZShvdXRmaWxlLHRtcGZpbGUpCisgICAgICAgICMgc3dhcCB0bXAgYmFjayB0byBvdXQKKyAgICAgICAgY21kID0gJ2ljdXBrZyAtdyAtdGIgIiVzIiAiJXMiJyAlICh0bXBmaWxlLCBvdXRmaWxlKQorICAgICAgICBpZiAoYXJncy52ZXJib3NlPjEpOgorICAgICAgICAgICAgY21kID0gY21kICsgIiAtdiIKKyAgICAgICAgICAgIHByaW50ICIjICIgKyBjbWQKKyAgICAgICAgcmMgPSBvcy5zeXN0ZW0oY21kKQorICAgICAgICBpZiByYyBpcyBub3QgMDoKKyAgICAgICAgICAgIHByaW50ICIjIFN3YXAgY29tbWFuZCBmYWlsZWQ6ICIgKyBjbWQKKyAgICAgICAgICAgIHN5cy5leGl0KHJjKQorICAgICMgZmFsbCB0aHJvdWdoIGZvciBmaWxlcyBtb2RlLgorICAgIGlmIGFyZ3MubW9kZSBpbiAoImZpbGVzIik6CisgICAgICAgIG9zLm1rZGlyKCIlcy8lcy8iICUgKGFyZ3MuZGVzdGRpciwgYXJncy5uYW1lKSkKKyAgICAgICAgIyB1bnBhY2sKKyAgICAgICAgY21kID0gJ2ljdXBrZyAtdGIgLXggIiVzIiAtZCAiJXMvJXMvIiAiJXMiJyAlIChsaXN0bmFtZSwgYXJncy5kZXN0ZGlyLCBhcmdzLm5hbWUsIG91dGZpbGUpCisgICAgICAgIGlmIChhcmdzLnZlcmJvc2U+MSk6CisgICAgICAgICAgICBjbWQgPSBjbWQgKyAiIC12IgorICAgICAgICAgICAgcHJpbnQgIiMgIiArIGNtZAorICAgICAgICByYyA9IG9zLnN5c3RlbShjbWQpCisgICAgICAgIGlmIHJjIGlzIG5vdCAwOgorICAgICAgICAgICAgcHJpbnQgIiMgU3dhcCBjb21tYW5kIGZhaWxlZDogIiArIGNtZAorICAgICAgICAgICAgc3lzLmV4aXQocmMpCisgICAgICAgICMgdG9kbyBjbGVhbnVwPz8KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jcHlzZWFyY2gvQ3B5LnBtIGIvc2NyaXB0cy9jcHlzZWFyY2gvQ3B5LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjkwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NweXNlYXJjaC9DcHkucG0KQEAgLTAsMCArMSwxMDkgQEAKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENPUFlSSUdIVDoKKyMgICogQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisjICAqIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBDb21tb24gZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIGNweXNlYXJjaC5wbCBhbmQgY3B5c2Nhbi5wbAorIworCitwYWNrYWdlIENweTsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgYmFzZSAnRXhwb3J0ZXInOworCitvdXIgQEVYUE9SVCA9IHF3KGFueSBnbG9iX3RvX3JlZ2V4IHNob3VsZF9pZ25vcmUpOworCisjIGFueShDT0RFLCBMSVNUKQorIyBFdmFsdWF0ZSBDT0RFIGZvciBlYWNoIGVsZW1lbnQgb2YgTElTVCB0aWxsIENPREUoJF8pIHJldHVybnMgMS4gUmV0dXJuIDAgaWYKKyMgbm90IGZvdW5kLgorc3ViIGFueSgmQCkgeworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbG9jYWwgJF87CisgICAgJiRjb2RlICYmIHJldHVybiAxIGZvciBAXzsKKyAgICAwOworfQorCisjIFBlcmwgZG9lc24ndCBoYXZlIGZubWF0Y2guIENsb3Nlc3QgdGhpbmcgaXMgRmlsZTo6Rm5NYXRjaCBidXQgdGhhdCdzCisjIFVOSVgtb25seSAoc2VlIGl0cyBjYXZlYXRzKS4gU28sIGFzIGEgd29ya2Fyb3VuZCwgY29udmVydCBnbG9icyB0byByZWd1bGFyCisjIGV4cHJlc3Npb25zLiBUcmFuc2xhdGVkIGZyb20gUHl0aG9uJ3MgZm5tYXRjaCBtb2R1bGUuCitzdWIgZ2xvYl90b19yZWdleCgkKSB7CisgICAgbXkgKCRnbG9iLCAkaSwgJGxlbiwgJHJlZ2V4KTsKKyAgICAkZ2xvYiA9IHNoaWZ0OworICAgICRpID0gMDsKKyAgICAkbGVuID0gbGVuZ3RoKCRnbG9iKTsKKyAgICAkcmVnZXggPSAiIjsKKworICAgICMgY2hhcmF0KFNUUiwgSURYKQorICAgICMgUmV0dXJuIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGFyZ3VtZW50IGF0IHRoZSBnaXZlbiBpbmRleC4KKyAgICBteSAkY2hhcmF0ID0gc3ViKCQkKSB7IHJldHVybiBzdWJzdHIoc2hpZnQsIHNoaWZ0LCAxKSB9OworCisgICAgd2hpbGUgKCRpIDwgJGxlbikgeworICAgICAgICBteSAoJGMsICRvdXQpOworICAgICAgICAkYyA9ICYkY2hhcmF0KCRnbG9iLCAkaSsrKTsKKyAgICAgICAgaWYgICAgKCRjIGVxICcqJykgeyAkb3V0ID0gJy4qJyB9CisgICAgICAgIGVsc2lmICgkYyBlcSAnPycpIHsgJG91dCA9ICcuJyB9CisgICAgICAgIGVsc2lmICgkYyBlcSAnWycpIHsgIyBnbG9iIGNsYXNzZXMKKyAgICAgICAgICAgIG15ICRqID0gJGk7CisKKyAgICAgICAgICAgICMgR2V0IHRoZSBjbG9zaW5nIGluZGV4IG9mIHRoZSBjbGFzcy4gXSBhcHBlYXJpbmcgaGVyZSBpcyBwYXJ0CisgICAgICAgICAgICAjIG9mIHRoZSBjbGFzcy4KKyAgICAgICAgICAgIGlmICAgICgkaiA8ICRsZW4gJiYgJiRjaGFyYXQoJGdsb2IsICRqKSBlcSAnIScpIHsgJGorKyB9CisgICAgICAgICAgICBpZiAgICAoJGogPCAkbGVuICYmICYkY2hhcmF0KCRnbG9iLCAkaikgZXEgJ10nKSB7ICRqKysgfQorICAgICAgICAgICAgd2hpbGUgKCRqIDwgJGxlbiAmJiAmJGNoYXJhdCgkZ2xvYiwgJGopIG5lICddJykgeyAkaisrIH0KKworICAgICAgICAgICAgIyBEaWRuJ3QgZmluZCBjbG9zaW5nIGJyYWNlLiBVc2UgbGl0ZXJhbCBbCisgICAgICAgICAgICBpZiAoJGogPj0gJGxlbikgeyAkb3V0ID0gIlxcWyIgfQorCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIFRoZSBjb21wbGV0ZSBjbGFzcyBjb250ZW50cyAoZXhjZXB0IHRoZSBicmFjZXMpCisgICAgICAgICAgICAgICAgbXkgJHMgPSBzdWJzdHIoJHJlZ2V4LCAkaSwgJGogLSAkaSk7CisgICAgICAgICAgICAgICAgJHMgPX4gcy9cXC9cXFxcL2c7CisgICAgICAgICAgICAgICAgJGkgPSAkaiArIDE7ICMgY2hhbmdlIHBvc2l0aW9uIHRvIG91dHNpZGUgY2xhc3MKKworICAgICAgICAgICAgICAgICMgTmVnYXRpb24KKyAgICAgICAgICAgICAgICBpZiAoJiRjaGFyYXQoJHMsIDApIGVxICchJykgeyAkcyA9ICdeJy5zdWJzdHIoJHMsIDEpOyB9CisgICAgICAgICAgICAgICAgIyBMaXRlcmFsIF4KKyAgICAgICAgICAgICAgICBlbHNpZiAoJiRjaGFyYXQoJHMsIDApIGVxICdeJykgeyAkcyA9ICdcXCcuJHM7IH0KKworICAgICAgICAgICAgICAgICRvdXQgPSAiWyRzXSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7ICRvdXQgPSBxdW90ZW1ldGEoJGMpIH0KKyAgICAgICAgJHJlZ2V4IC49ICRvdXQ7CisgICAgfQorICAgIHJldHVybiAkcmVnZXg7Cit9CisKK291ciAkY3B5c2tpcCA9ICdjcHlza2lwLnR4dCc7CitkaWUgKCJDYW4ndCBmaW5kICRjcHlza2lwLiBQbGVhc2UgZG93bmxvYWQgaXQgZnJvbSAiLgorICAgICAiaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvY3B5c2tpcC50eHQgKHNlZSAiLgorICAgICAiaHR0cDovL3NpdGUuaWN1LXByb2plY3Qub3JnL3Byb2Nlc3Nlcy9jb3B5cmlnaHQtc2NhbiBmb3IgbW9yZSBkZXRhaWxzKS4iKQorICAgIHVubGVzcyAtZiAkY3B5c2tpcDsKKworb3BlbiBTS0lQLCAiPCRjcHlza2lwIiBvciBkaWUgIkVycm9yIG9wZW5pbmcgJGNweXNraXAuIjsKK291ciBAaWdub3JlX2dsb2JzID0gbWFwICB7IGNob21wOyBnbG9iX3RvX3JlZ2V4KCRfKSB9CisgICAgICAgICAgICAgICAgICAgIGdyZXAgeyAhIG0vXlxzKiMvIH0KKyAgICAgICAgICAgICAgICAgICAgPFNLSVA+OworY2xvc2UgU0tJUDsKKworIyBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucyB0byBpZ25vcmUKK291ciBAaWdub3JlX2V4dGVuc2lvbnMgPSBxdyhzdm4gZGxsIGlsayBpZGIgcGRiIGRzcCBkc3cgb3B0IG5jYiB2Y3Byb2ogc2xuIHN1bworICAgIGN2c2lnbm9yZSBjbnYgcmVzIGljdSBleGUgb2JqIGJpbiBleHAgbGliIG91dCBwbGcgamFyIHNwcCBzdHViIHBvbGljeSB0dGYKKyAgICBUVEYgb3RmKTsKK291ciAkaWdub3JlX2V4dHMgPSBqb2luICd8JywKKyAgICAgICAgICAgICAgICAgICBtYXAgeyAiXFwuJF8iIH0KKyAgICAgICAgICAgICAgICAgICBAaWdub3JlX2V4dGVuc2lvbnM7CisKKyMgaWdub3JlIHJlZ2V4CitvdXIgJGlnbm9yZV9yZWdleCA9ICJkYXRhL291dC9idWlsZHxDVlN8XFx+fFxcI3xEZWJ1Z3xSZWxlYXNlfHBvc2l0aW9uc3x1bmlkYXRhfCRpZ25vcmVfZXh0cyI7CisKKyMgQ2hlY2sgaWYgdGhpcyBmaWxlIHNob3VsZCBiZSBpZ25vcmVkLgorc3ViIHNob3VsZF9pZ25vcmUoJCkgeworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworICAgIHJldHVybiAxIGlmICRmaWxlbmFtZSA9fiAvJGlnbm9yZV9yZWdleC87CisgICAgZm9yIG15ICRyIChAaWdub3JlX2dsb2JzKSB7IHJldHVybiAxIGlmICRmaWxlbmFtZSA9fiAvJHIvIH0KKyAgICAwOworfQorCisxOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jcHlzZWFyY2gvY3B5c2Nhbi5wbCBiL3NjcmlwdHMvY3B5c2VhcmNoL2NweXNjYW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGViNzUwNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY3B5c2VhcmNoL2NweXNjYW4ucGwKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDT1BZUklHSFQ6CisjICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDExLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisjICAqIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAKKyMgIFNlYXJjaCBmb3IgYW5kIGxpc3QgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIGNvcHlyaWdodCBub3RpY2UsIGFuZCBzaG91bGQuCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbGU6OkZpbmQ7CisKK3VzZSBGaW5kQmluIHF3KCRCaW4pOwordXNlIGxpYiAkQmluOworCit1c2UgQ3B5OworbXkgJGljdV9zcmMgPSAkQVJHVlswXSB8fCAiLiI7CitkaWUgIkNhbid0IG9wZW4gSUNVIGRpcmVjdG9yeTogJGljdV9zcmMiIHVubGVzcyAtZCAkaWN1X3NyYzsKK2ZpbmQoeworICAgICAgICB3YW50ZWQgPT4gc3ViIHsKKyAgICAgICAgICAgIHJldHVybiB1bmxlc3MgLWY7CisgICAgICAgICAgICByZXR1cm4gaWYgc2hvdWxkX2lnbm9yZSgkXyk7CisKKyAgICAgICAgICAgIG9wZW4gRiwgIjwkXyIgb3IgZGllICJFcnJvciBvcGVuaW5nICckXycuIjsKKyAgICAgICAgICAgIG15ICRyZXN1bHQgPSBhbnkgeyAkXyA9fiAvY29weXJpZ2h0LiooaW50ZXJuYXRpb25hbHxpYm0pL2kgfSA8Rj47CisgICAgICAgICAgICBjbG9zZSBGOworCisgICAgICAgICAgICBwcmludCAiJF9cbiIgdW5sZXNzICRyZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIG5vX2NoZGlyID0+IDEsCisgICAgfSwgJGljdV9zcmMpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jcHlzZWFyY2gvY3B5c2VhcmNoLnBsIGIvc2NyaXB0cy9jcHlzZWFyY2gvY3B5c2VhcmNoLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMmM0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NweXNlYXJjaC9jcHlzZWFyY2gucGwKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDT1BZUklHSFQ6CisjICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDExLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisjICAqIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBTZWFyY2ggZm9yIGZpbGVzIG1vZGlmaWVkIHRoaXMgeWVhciwgdGhhdCBuZWVkIHRvIGhhdmUgY29weXJpZ2h0IGluZGljYXRpbmcKKyMgdGhpcyBjdXJyZW50IHllYXIgb24gdGhlbS4KKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgVGltZTo6bG9jYWx0aW1lOwordXNlIEZpbGU6OnN0YXQ7Cit1c2UgRmlsZTo6RmluZDsKKworIyBBZGQgc2NyaXB0IGRpcmVjdG9yeSB0byBQZXJsIFBBVEguCit1c2UgRmluZEJpbiBxdygkQmluKTsKK3VzZSBsaWIgJEJpbjsKKwordXNlIENweTsKKworbXkgJGljdV9zcmMgPSAkQVJHVlswXSB8fCAiLiI7CitkaWUgIkNhbid0IG9wZW4gSUNVIGRpcmVjdG9yeTogJGljdV9zcmMiIHVubGVzcyAtZCAkaWN1X3NyYzsKK215ICR5ZWFyID0gbG9jYWx0aW1lLT55ZWFyICsgMTkwMDsKKworZmluZCh7CisgICAgICAgIHdhbnRlZCA9PiBzdWIgeyAjICRfIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUKKyAgICAgICAgICAgIHJldHVybiB1bmxlc3MgLWY7CisgICAgICAgICAgICByZXR1cm4gaWYgKGxvY2FsdGltZShzdGF0KCRfKS0+bXRpbWUpLT55ZWFyICsgMTkwMCkgPCAkeWVhcjsKKyAgICAgICAgICAgIHJldHVybiBpZiBzaG91bGRfaWdub3JlKCRfKTsKKyAgICAgICAgICAgICMgZmlsZSBpcyByZWNlbnQgYW5kIHNob3VsZG4ndCBiZSBpZ25vcmVkLiBmaW5kIGNvcHlyaWdodC4KKworICAgICAgICAgICAgIyBpZiBmaWxlIGNvbnRhaW5zIGEgbGluZSB3aXRoICJjb3B5cmlnaHQiIGFuZCBjdXJyZW50IHllYXIgb24gdGhlCisgICAgICAgICAgICAjIHNhbWUgbGluZSwgd2UncmUgZ29vZC4KKyAgICAgICAgICAgIG9wZW4gRiwgIjwkXyIgb3IgZGllICJFcnJvciBvcGVuaW5nICckXycuIjsKKyAgICAgICAgICAgIG15ICRyZXN1bHQgPSBhbnkgeyAkXyA9fiAvY29weXJpZ2h0LiokeWVhci9pIH0gPEY+OworICAgICAgICAgICAgY2xvc2UgRjsKKworICAgICAgICAgICAgcHJpbnQgIiRfXG4iIHVubGVzcyAkcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBub19jaGRpciA9PiAxLAorICAgIH0sICRpY3Vfc3JjKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY3B5c2VhcmNoL3JlYWRtZS50eHQgYi9zY3JpcHRzL2NweXNlYXJjaC9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4N2RlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NweXNlYXJjaC9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTggQEAKK0NvcHlyaWdodCAoYykgMjAwMi0yMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK2NweXNlYXJjaC5wbCBpcyBhIHBlcmwgc2NyaXB0IHVzZWQgdG8gZGV0ZWN0IHRoZSBmaWxlcyB0aGF0IG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3B5cmlnaHQgbm90aWNlLiBCZXN0IHdoZW4gdXNlZCBvbiB3aW5kb3dzIG9uIGEgY2xlYW4gY2hlY2tvdXQuIEVkaXQgJGljdVNvdXJjZSB0byB5b3VyIHBhdGguIElmIHlvdSBhcmUgd29ya2luZyBvbiBvdGhlciBwbGF0Zm9ybSwgeW91IHByb2JhYmx5IHdhbnQgdG8gZWRpdCAkaWdub3JlIHRvIHJlZmxlY3QgZGlmZmVyZW50IHRlbXBvcmFyeSBmaWxlcyB0aGF0IHlvdSBkb24ndCB3YW50IGluIHRoZSBzY2FuLiBUaGUgcmVzdWx0IHdpbGwgYmUgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBkb24ndCBoYXZlIHdvcmQgY29weXJpZ2h0IChjYXNlIGlnbm9yZWQpIGluIGZpcnN0IDEwIGxpbmVzLiBMb29rIGF0IHRoZW0gYW5kIGZpeCBpZiBuZWVkZWQuIAorCitjcHlzZWFyY2gucGwgIHNlYXJjaGVzIGZvciBmaWxlcyBtb2RpZmllZCB0aGlzIHllYXIgdGhhdCBkb24ndCBoYXZlIHRoZQorICBjb3JyZWN0IHllYXIgY29weXJpZ2h0IChpLmUuICdjb3B5cmlnaHQgMTk5NScpIAorCitjcHlzY2FuLnBsICAgIHNlYXJjaGVzIGZvciBhbGwgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGFueSBjb3B5cmlnaHQKKworY3B5c2tpcC50eHQgIGlzIHBhcnQgb2YgdGhlIGlnbm9yZSBsaXN0LiBEb3dubG9hZCB0aGUgbGF0ZXN0IGZyb20KKyAgIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL2NweXNraXAudHh0CisKK21vcmUgZG9jcyBvbiBjb3B5cmlnaHQgc2NhbiBhdDoKKyAgIGh0dHA6Ly9zaXRlLmljdS1wcm9qZWN0Lm9yZy9wcm9jZXNzZXMvY29weXJpZ2h0LXNjYW4KKworCitIYXZlIGZ1biEKK3dlaXYKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaWN1cnVuIGIvc2NyaXB0cy9pY3VydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY2NTUwMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvaWN1cnVuCkBAIC0wLDAgKzEsMjA2IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgVGhpcyBpcyBkZXNpZ25lZCBmb3IgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgc2luZ2xlLXNvdXJjZS1maWxlIElDVSBwcm9ncmFtcy4KKyMKKyMgWW91IGNhbiBhbHdheXMgZG93bmxvYWQgdGhlIGxhdGVzdCBmcm9tIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS90b29scy90cnVuay9zY3JpcHRzL2ljdXJ1bgorIyBPciwgYXMgYW4gdW5vZmZpY2lhbCBsaW5rLCBodHRwOi8vYml0Lmx5L2ljdS1ydW4KKyMKKyMgSW4gaXRzIHNpbXBsZXN0IHVzYWdlLCAgc2ltcGx5IHR5cGU6CisjCisjICAgICBpY3VydW4gIHlvdXJwcm9ncmFtLmMKKyMgICAgICAgKG9yIC5jcHAgaWYgaXQgaXMgYSBDKysgcHJvZ3JhbSkKKyMKKyMgIFRoZSB0b29sIHdpbGwgY29tcGlsZSBhbmQgdGhlbiBydW4gdGhlIHByb2dyYW0KKyMKKyMgIEZJTkRJTkcgSUNVCisjICBUbyBmaW5kIElDVSwgdGhlIGZvbGxvd2luZyBzZWFyY2ggb3JkZXIgaXMgdXNlZCBieSBwcmlvcml0eToKKyMKKyMgIDEpICAgICItaSA8cGF0aD4iIC4uIHRoZSA8cGF0aD4gd2lsbCBiZSBzZWFyY2hlZCBmb3IgZWl0aGVyIGEgZGlyZWN0IHBhdGggdG8gaWN1LWNvbmZpZywKKyMgICAgICAgICAgICBvciBhIGRpcmVjdG9yeSBjb250YWluaW5nIGl0LCBvciBhIGRpcmVjdG9yeSBjb250YWluaW5nICcvYmluJyBjb250YWluaW5nIGl0LgorIyAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIGljdS1jb25maWcgaXMgIC9vcHQvbG9jYWwvYmluL2ljdS1jb25maWcsIGFueSBvZiB0aGUgZm9sbG93aW5nIHdpbGwgd29yazoKKyMgICAgICAgICAgICAgICAgIC1pIC9vcHQvbG9jYWwKKyMgICAgICAgICAgICAgICAgIC1pIC9vcHQvbG9jYWwvYmluCisjICAgICAgICAgICAgICAgICAtaSAvb3B0L2xvY2FsL2Jpbi9pY3UtY29uZmlnCisjCisjICAgICAgICAgQWRkaXRpb25hbGx5LCAvaWN1L3NvdXJjZSBpcyBhIGJ1aWx0IElDVSBzb3VyY2UgZGlyZWN0b3J5LCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6CisjCisjICAgICAgICAgICAgICAgICAtaSAvaWN1CisjICAgICAgICAgICAgICAgICAtaSAvaWN1L3NvdXJjZQorIworIyAgICAgICAgIEFsc28sIGlmIC9idWlsZCBpcyBhbiBvdXQtb2Ytc291cmNlIGJ1aWxkLCB0aGlzIHdpbGwgd29yazoKKyMKKyMgICAgICAgICAgICAgICAgIC1pIC9idWlsZAorIworIyAgMikgICAgSWYgdGhlcmUgaXMgYW4gZXhlY3V0YWJsZSB+Ly5pY3VydW5yYyBzY3JpcHQsIGl0IGNhbiBzZXQgdGhlIHZhcmlhYmxlICJJQ1VfQ09ORklHIiB0byBwb2ludAorIyAgICAgICAgZGlyZWN0bHkgdG8gdGhlIGljdS1jb25maWcgZmlsZS4KKyMgICAgICAgIEFuIGV4YW1wbGUgfi8uaWN1cnVucmMgc2NyaXB0ICBjb250YWlucyBqdXN0IHRoaXMgbGluZToKKyMKKyMgICAgICAgICAgICAgIElDVV9DT05GSUc9L2hvbWUvc3JsL0UvSUkvYmluL2ljdS1jb25maWcKKyMKKyMgIDMpICAgIElDVV9DT05GSUcgY2FuIGJlIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gaWN1LWNvbmZpZyAgKCBpdCdzIG92ZXJyaWRkZW4gYnkgdGhlIC5pY3VydW5yYyBzY3JpcHQgKQorIworIyAgNCkgICAgaWYgImljdS1jb25maWciIGlzIG9uIHRoZSBQQVRILCBpdCB3aWxsIGJlIHVzZWQuCisjCisjCisjICBSVU5OSU5HCisjICAgQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgZmlsZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24uCisjCisjICBUT0RPCisjICAgKiBzaG91bGQgc3VwcG9ydCBwa2ctY29uZmlnLCB3aGljaCBpcyBwcmVmZXJyZWQgb3ZlciBpY3UtY29uZmlnLCBhbHRob3VnaCBpY3UtY29uZmlnIG1ha2VzIHRoaXMgdXNhZ2UKKyMgICAgIGVhc2llcgorIworIyAgICogbmVlZCB0byB0ZXN0IHRoZSAkUEFUSCBhbmQgJElDVV9DT05GSUcgdXNhZ2UgbW9kZWxzCisKK1NDUklQVFZFUj0nJFJldmlzaW9uJCcKKworCitJQ1VfT1ZFUlJJREU9IiIKKwordXNhZ2UoKQoreworICAgIGVjaG8gIlNjcmlwdCBWZXJzaW9uICR7U0NSSVBUVkVSfSIKKyAgICBlY2hvICJVc2FnZTogJDAgWyAtaSAvcGF0aC90by9pY3UgfCAtaSAvcGF0aC90by9pY3UtY29uZmlnIF0gIGZpbGUuY3twcH0gWyBwcm9ncmFtIGFyZ3MgLi4uXSIKK30KKworaWYgWyAkIyAtbHQgMSBdOwordGhlbgorICAgICAgICB1c2FnZQorICAgICAgICBleGl0IDEKK2ZpCisKK2lmIFsgIiQxIiA9ICItPyIgLW8gJDEgPSAiLWgiIF07Cit0aGVuCisgICAgICAgIHVzYWdlCisgICAgICAgIGV4aXQgMAorZmkKKworCitpZiBbICQxID0gIi1pIiBdOwordGhlbgorICAgICAgICBzaGlmdAorICAgICAgICBJQ1VfT1ZFUlJJREU9JDEKKyAgICAgICAgc2hpZnQKK2ZpCisKK2lmIFsgJDEgPSAiLU8iIF07Cit0aGVuCisgICAgc2hpZnQKKyAgICBYVFJBX09QVFM9JDEKKyAgICBzaGlmdAorZmkKKworaWYgWyAhIC14ICIke0lDVV9DT05GSUd9IiBdOwordGhlbgorICAgIElDVV9DT05GSUc9YHdoaWNoIGljdS1jb25maWcgMj4vZGV2L251bGwgfHwgZWNob2AKK2ZpCisKKworIyBub3csIHNlYXJjaAoraWYgWyAteCB+Ly5pY3VydW5yYyBdOwordGhlbgorICAgICAgICAuIH4vLmljdXJ1bnJjCitmaQorCitJTl9TT1VSQ0U9CitJQ1VfQ09ORklHX09QVFM9CisKK2lmIFsgIngke0lDVV9PVkVSUklERX0iICE9ICJ4IiBdOwordGhlbgorICAgICAgICBpZiBbIC1mICIke0lDVV9PVkVSUklERX0iIC1hIC14ICIke0lDVV9PVkVSUklERX0iIF07CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBJQ1VfQ09ORklHPSIke0lDVV9PVkVSUklERX0iCisgICAgICAgIGVsaWYgWyAteCAiJHtJQ1VfT1ZFUlJJREV9L2ljdS1jb25maWciIF07CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBJQ1VfQ09ORklHPSIke0lDVV9PVkVSUklERX0vaWN1LWNvbmZpZyIKKyAgICAgICAgZWxpZiBbIC14ICIke0lDVV9PVkVSUklERX0vYmluL2ljdS1jb25maWciIF07CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBJQ1VfQ09ORklHPSIke0lDVV9PVkVSUklERX0vYmluL2ljdS1jb25maWciCisgICAgICAgIGVsaWYgWyAteCAiJHtJQ1VfT1ZFUlJJREV9L3NvdXJjZS9jb25maWcvaWN1LWNvbmZpZyIgXTsKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIElDVV9DT05GSUc9IiR7SUNVX09WRVJSSURFfS9zb3VyY2UvY29uZmlnL2ljdS1jb25maWciCisgICAgICAgICAgICAgICAgSU5fU09VUkNFPSIke0lDVV9PVkVSUklERX0vc291cmNlIgorICAgICAgICBlbGlmIFsgLXggIiR7SUNVX09WRVJSSURFfS9jb25maWcvaWN1LWNvbmZpZyIgXTsKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIElDVV9DT05GSUc9IiR7SUNVX09WRVJSSURFfS9jb25maWcvaWN1LWNvbmZpZyIKKyAgICAgICAgICAgICAgICBJTl9TT1VSQ0U9IiR7SUNVX09WRVJSSURFfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVjaG8gIiQwOiBEb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCAkSUNVX09WRVJSSURFIC0gbm90IGFuIGV4ZWN1dGFibGUgb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyBJQ1Ugc291cmNlIG9yIGluc3RhbGwiID4mMgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorZmkKKworaWYgWyAhIC14ICIke0lDVV9DT05GSUd9IiBdOwordGhlbgorICAgIGVjaG8gIiQwOiBFcnJvcjogXCIke0lDVV9DT05GSUd9XCIgaXMgbm90IGFuIGljdS1jb25maWcgc2NyaXB0LiBHb29kYnllLiIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBbIC1kICIke0lOX1NPVVJDRX0iIF07Cit0aGVuCisgICAgZWNobyAiSUNVIHdvcmtzcGFjZSBkaXI6IiAiJHtJTl9TT1VSQ0V9IgorICAgICMgcmV2aXNpdAorICAgIGlmIFsgLWYgIiR7SU5fU09VUkNFfS9jb21tb24vdW5pY29kZS91dHlwZXMuaCIgXTsKKyAgICB0aGVuCisgICAgICAgIHRvcF9zcmNkaXI9IiR7SU5fU09VUkNFfSIKKyAgICBlbHNlCisgICAgICAgIHRvcF9zcmNkaXI9YHNlZCAtbiAtZSAncyVedG9wX3NyY2RpciA9IFwoLipcKSVcMSVwJyA8ICIke0lOX1NPVVJDRX0vTWFrZWZpbGUiYAorICAgICAgICBpZiBbICEgLWQgIiR7dG9wX3NyY2Rpcn0iIF07CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlNvcnJ5OiBjYW5ub3QgZmluZCB0b3Bfc3JjZGlyIGZyb20gJHtJTl9TT1VSQ0V9L01ha2VmaWxlIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiBbICEgLWYgIiR7dG9wX3NyY2Rpcn0vY29tbW9uL3VuaWNvZGUvdXR5cGVzLmgiIF07CisgICAgdGhlbgorICAgICAgICBlY2hvIFNvcnJ5OiBjYW5ub3QgZmluZCAiJHt0b3Bfc3JjZGlyfS9jb21tb24vdW5pY29kZS91dHlwZXMuaCIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJJQ1UgdG9wIGxldmVsIHNvdXJjZSBkaXI6IiAiJHt0b3Bfc3JjZGlyfSIKKworICAgIElDVV9DT05GSUdfT1BUUz0tLW5vdmVyaWZ5CisgICAgTElOS09QVFM9Ii0tbGRmbGFncy1saWJzb25seSAtLWxkZmxhZ3Mtc3lzdGVtIC0tbGRmbGFncy1pY3VpbyIKKyAgICBPVVJMSUJQQVRIPSR7SU5fU09VUkNFfS9saWI6JHtJTl9TT1VSQ0V9L3N0dWJkYXRhOiR7SU5fU09VUkNFfS90b29scy9jdGVzdGZ3CisgICAgU1JDX09QVFM9Ii1JJHt0b3Bfc3JjZGlyfS9jb21tb24gLUkke3RvcF9zcmNkaXJ9L2kxOG4gIC1JJHt0b3Bfc3JjZGlyfS9pbyAtSSR7dG9wX3NyY2Rpcn0vdG9vbHMvY3Rlc3RmdyAtSSR7dG9wX3NyY2Rpcn0vdG9vbHMvdG9vbHV0aWwgLUkke0lOX1NPVVJDRX0vY29tbW9uIC1MJHtJTl9TT1VSQ0V9L2xpYiAtTCR7SU5fU09VUkNFfS9zdHViZGF0YSAtTCR7SU5fU09VUkNFfS90b29scy9jdGVzdGZ3IgorICAgIElOVk9LRT1gJHtJQ1VfQ09ORklHfSAke0lDVV9DT05GSUdfT1BUU30gLS1pbnZva2VgOiIke09VUkxJQlBBVEh9IgorZWxzZQorICAgICMgbm8gY3BwZmxhZ3MgZm9yIGluLXNvdXJjZQorICAgIENQUE9QVFM9Ii0tY3BwZmxhZ3MiCisgICAgTElOS09QVFM9Ii0tbGRmbGFncyAtLWxkZmxhZ3MtaWN1aW8iCisgICAgSU5WT0tFPWAke0lDVV9DT05GSUd9ICR7SUNVX0NPTkZJR19PUFRTfSAtLWludm9rZWAKK2ZpCisKK2VjaG8gJ0lDVSAnIHZlcnNpb246IGAke0lDVV9DT05GSUd9ICR7SUNVX0NPTkZJR19PUFRTfSAtLXZlcnNpb25gIHByZWZpeDogYCR7SUNVX0NPTkZJR30gJHtJQ1VfQ09ORklHX09QVFN9IC0tcHJlZml4YAorCitGSUxFPSQxCitzaGlmdAorCitpZiBbICEgLWYgIiR7RklMRX0iIF07Cit0aGVuCisgICAgZWNobyAiJDA6IENhbid0IG9wZW4gJHtGSUxFfSIgPiYyCisgICAgdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKKworCitjYXNlICIke0ZJTEV9IiBpbgorICAgICAqLmNwcCkKKyAgICAgICAgQ09NUD1gJHtJQ1VfQ09ORklHfSAke0lDVV9DT05GSUdfT1BUU30gLS1jeHggLS1jeHhmbGFncyAke0NQUE9QVFN9ICR7TElOS09QVFN9YAorICAgICAgICBPVVQ9YGJhc2VuYW1lICR7RklMRX0gLmNwcGAKKyAgICAgOzsKKworICAgICAqLmMpCisgICAgICAgIENPTVA9YCR7SUNVX0NPTkZJR30gICR7SUNVX0NPTkZJR19PUFRTfSAtLWNjIC0tY2ZsYWdzICR7Q1BQT1BUU30gJHtMSU5LT1BUU31gCisgICAgICAgIE9VVD1gYmFzZW5hbWUgJHtGSUxFfSAuY2AKKyAgICAgOzsKKworICAgICAqKQorICAgICAgICBlY2hvICIkMDogZXJyb3IsIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICR7RklMRX0iID4mMgorICAgICAgICBleGl0IDEKKyAgICAgOzsKK2VzYWMKKworZWNobyAiIyAke0NPTVB9IiAiJHtTUkNfT1BUU30iIC1vICIke09VVH0iICIke0ZJTEV9IiAiJHtYVFJBX09QVFN9IgorKCAke0NPTVB9ICR7U1JDX09QVFN9IC1vICIke09VVH0iICIke0ZJTEV9IiAke1hUUkFfT1BUU30gfHwgKHJtIC1mICIke09VVH0iIDsgZXhpdCAxKSApICAmJiAoIGVjaG8gIiMgJHtJTlZPS0V9ICR7TEVBS19DSEVDS0VSfSAuLyR7T1VUfSIgIiRAIiA7ICIke1NIRUxMfSIgLWMgIiR7SU5WT0tFfSAke0xFQUtfQ0hFQ0tFUn0gLi8ke09VVH0gJCoiKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZXRpY2tldCBiL3NjcmlwdHMvcmV0aWNrZXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2IwMDFkMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcmV0aWNrZXQKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9iYXNoCisjIENvcHlyaWdodCAoYykgMjAxMi0yMDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBmb3IgZml4aW5nIG1pc3RpY2tldHRlZAorIyBzZWUgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvd2lraS9NaXNUaWNrZXR0ZWQKKyMgVE9ETzogIGNsZWFudXAgJHtUTVBGfSoKKworCisKK3Jldj0KK2Zyb209Cit0bz0KKwordXNhZ2UoKQoreworICAgIGVjaG8gIiQwIC1yIHJldiAtZiBmcm9tYnVnIC10IHRvYnVnIgorfQorCit3aGlsZSBnZXRvcHRzICJyOmY6dDoiIG9wdDsgZG8KKyAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgcikKKyAgICAgICAgICAgIHJldj0kT1BUQVJHCisgICAgICAgICAgICA7OworICAgICAgICBmKQorICAgICAgICAgICAgZnJvbT0kT1BUQVJHCisgICAgICAgICAgICA7OworICAgICAgICB0KQorICAgICAgICAgICAgdG89JE9QVEFSRworICAgICAgICAgICAgOzsKKyAgICAgICAgXD8pCisgICAgICAgICAgICBlY2hvICJJbnZhbGlkOiAtJE9QVEFSRyIgPiYyCisgICAgICAgICAgICB1c2FnZQorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworaWYgW1sgISAkcmV2IF1dOwordGhlbgorICAgIGVjaG8gIm5lZWQgLXIgcmV2IG9wdGlvbiIgPiYyCisgICAgdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK2lmIFtbICEgJGZyb20gXV07Cit0aGVuCisgICAgZWNobyAibmVlZCAtZiBvbGRidWcgb3B0aW9uIiA+JjIKKyAgICB1c2FnZQorICAgIGV4aXQgMQorZmkKKworaWYgW1sgISAkdG8gXV07Cit0aGVuCisgICAgZWNobyAibmVlZCAtdCBuZXdidWcgb3B0aW9uIiA+JjIKKyAgICB1c2FnZQorICAgIGV4aXQgMQorZmkKKworaWYgW1sgISAtZCAuc3ZuIF1dOwordGhlbgorICAgIGVjaG8gIi5zdm4gaXMgbm90IGEgZGlyZWN0b3J5LiBQbGVhc2UgY2Qgc29tZXdoZXJlIGVsc2UuIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFtbICEgLWQgJHtUTVBESVJ9IF1dOwordGhlbgorICAgIFRNUERJUj0vdG1wCitmaQorCitUTVBGPSR7VE1QRElSfS9yZXRpY2tldC5yJHtyZXZ9LmYke2Zyb219LnQke3RvfS50eHQKKworZWNobyAiR2V0dGluZyBsb2cgZm9yIHIke3Jldn0iID4mMgorKCBzdm4gcGcgc3ZuOmxvZyAtLXJldnByb3AgLXIgJHtyZXZ9IC4gfCB0ZWUgICR7VE1QRn0gfCBzZWQgLWUgJ3MlXiU8ICVnJyApIHx8IGV4aXQgMQorCitoZWFkIC0xICR7VE1QRn0gPiAke1RNUEZ9LjEKKworaWYgZ3JlcCAtcSAiXnRpY2tldDoke2Zyb219W14wLTldIiAke1RNUEZ9LjE7Cit0aGVuCisgICAgZWNobyAiLS0gb2xkL25ldyAtLSIKK2Vsc2UKKyAgICBpZiBncmVwIC1xICJedGlja2V0OiR7dG99W14wLTldIiAke1RNUEZ9LjE7CisgICAgdGhlbgorICAgICAgICBlY2hvICJyJHtyZXZ9IGFscmVhZHkgcmVmZXJlbmNlcyB0aWNrZXQ6JHt0b30gLSBleGl0dGluZy4iID4mMgorICAgICAgICBleGl0IDAKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkVycm9yOiByJHtyZXZ9IGRvZXNuJ3QgcGVydGFpbiB0byB0aWNrZXQ6JHtmcm9tfSAtIHdhcyB0aGlzIGFscmVhZHkgZml4ZWQ/IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKKyggKCBzZWQgLWUgInMlXnRpY2tldDoke2Zyb219JXRpY2tldDoke3RvfSUiICR7VE1QRn0uMSAmJiB0YWlsIC1uICsyICR7VE1QRn0gKSB8fCBleGl0IDIgKSB8IHRlZSAke1RNUEZ9LmZpeCB8IHNlZCAtZSAncyVeJT4gJWcnCisKK0NNRD0ic3ZuIHBzIHN2bjpsb2cgLS1yZXZwcm9wIC1yICR7cmV2fSAtRiAke1RNUEZ9LmZpeCIKK2VjaG8gIiMgJHtDTUR9IgorZWNobyAidHlwZSBZRVMgdG8gZG8sIF5DIHRvIGtpbGwiCityZWFkIGZvbworaWYgW1sgJGZvbyA9ICJZRVMiIF1dOwordGhlbgorICAgIGVjaG8gIiMjIFJlbWVtYmVyIHRoZSBzZXJ2ZXIgc3RpbGwgbmVlZHMgdG8gYmUgcmVzeW5jZWQuIFNlZSBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy93aWtpL0ZpeGluZ01pc1RpY2tldHRlZCIKKyAgICBleGVjICR7Q01EfQorZWxzZQorICAgIGV4aXQgMAorZmkKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MmQ2NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkKQEAgLTAsMCArMSw1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIworI2Zyb20gaWN1dHJhY3h0bi53ZWJfdWkgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2RjdXQucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9kY3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNzQ4NmYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9kY3V0LnB5CkBAIC0wLDAgKzEsMTUxIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK2ltcG9ydCByZQorCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgKgorZnJvbSB0cmFjLnV0aWwgaW1wb3J0IE1hcmt1cAorZnJvbSB0cmFjLndlYiBpbXBvcnQgSVJlcXVlc3RIYW5kbGVyCitmcm9tIHRyYWMud2ViLmNocm9tZSBpbXBvcnQgYWRkX3N0eWxlc2hlZXQsIElOYXZpZ2F0aW9uQ29udHJpYnV0b3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGVtcGxhdGVQcm92aWRlcgorZnJvbSB0cmFjLndlYi5ocmVmIGltcG9ydCBIcmVmCisjZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLndlYl91aS5jaGFuZ2VzZXQgaW1wb3J0IElDaGFuZ2VzZXRSYW5nZUxpbmsKK2Zyb20gdHJhYy53aWtpIGltcG9ydCB3aWtpX3RvX2h0bWwsIHdpa2lfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZXIKKworCitjbGFzcyBEY3V0TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcikKKyMgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIsSUNoYW5nZXNldFJhbmdlTGluaykKKworICAgIGRlZiByZXZpc2lvbl9yYW5nZV9saW5rKHNlbGYsIHJlcSwgYmFzZSwgc3RhcnQsIGVuZCk6CisgICAgICAgIHJldHVybiAoJ0RDVVQgSGVscGVyJywgcmVxLmhyZWYoJ2RjdXQnLG9sZF9wYXRoPWJhc2UsbmV3X3BhdGg9YmFzZSxvbGQ9c3RhcnQsbmV3PWVuZCkpCisKKyAgICBfcmVxdWVzdF9yZSA9IHJlLmNvbXBpbGUociIvZGN1dCg/Oi8oW14vXSspKT8oLy4qKT8kIikKKworICAgIGRlZiBtYXRjaF9yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5fcmVxdWVzdF9yZSwgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEpOgorCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgIyBzcmwKKyMgICAgICAgIHNob3dfZmlsZXMgPSBzZWxmLnRpbWVsaW5lX3Nob3dfZmlsZXMKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgdGlja2V0bGlzdCA9IHt9ICAjIGRpY3Qgb2YgdGlja2V0LT4/Pz8KKyAgICAgICAgcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgICMgd2VsbC4gY2hlY2sgaXQgYWdhaW4sLgorICAgICAgICAgICAgCisgICAgICAgIHNybGRlYnVnPUZhbHNlCisgICAgICAgIAorICAgICAgICByZXBvcyA9IHNlbGYuZW52LmdldF9yZXBvc2l0b3J5KHJlcS5hdXRobmFtZSkKKyAgICAgICAgCisgICAgICAgIG5ld19wYXRoID0gcmVxLmFyZ3MuZ2V0KCduZXdfcGF0aCcpCisgICAgICAgIG5ld19yZXYgPSByZXEuYXJncy5nZXQoJ25ldycpCisgICAgICAgIG9sZF9wYXRoID0gcmVxLmFyZ3MuZ2V0KCdvbGRfcGF0aCcpCisgICAgICAgIG9sZF9yZXYgPSByZXEuYXJncy5nZXQoJ29sZCcpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChuZXdfcGF0aCkKKyAgICAgICAgbmV3X3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYobmV3X3JldikKKyAgICAgICAgb2xkX3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChvbGRfcGF0aCkKKyAgICAgICAgb2xkX3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYob2xkX3JldikKKworICAgICAgICBvbGRfcmV2ID0gaW50KG9sZF9yZXYpCisgICAgICAgIG5ld19yZXYgPSBpbnQobmV3X3JldikKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5kaWZmX2hyZWYnXSA9IHJlcS5ocmVmKCdjaGFuZ2VzZXQnLG9sZF9wYXRoPW9sZF9wYXRoLG5ldz1uZXdfcmV2LG5ld19wYXRoPW5ld19wYXRoLG9sZD1vbGRfcmV2KQorCisgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3JldiddID0gb2xkX3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3JldiddID0gbmV3X3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3BhdGgnXSA9IG9sZF9wYXRoCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcGF0aCddID0gbmV3X3BhdGgKKworICAgICAgICBpZiBUcnVlOgorICAgICAgICAgICAgcmVxLmhkZlsndGFyZ2V0X3BhdGgnXSA9ICcuJzsKKyAgICAgICAgICAgICMgb2theS4gbWFudWFsbHkgdHJvbXAgdGhyb3VnaCAnZW0KKyAgICAgICAgICAgIG5yZXYgPSBvbGRfcmV2KzEKKyAgICAgICAgICAgIHdoaWxlIG5yZXYgPD0gbmV3X3JldjoKKyAgICAgICAgICAgICAgICBjaGdzZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KG5yZXYpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGNoZ3NldC5tZXNzYWdlIG9yICctLScKKyAgICAgICAgICAgICAgICAjIGNhbiB3ZSBsb2FkIGEgdGlja2V0IGZyb20gaXQ/CisgICAgICAgICAgICAgICAgc3BsaXRzPW1lc3NhZ2Uuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2Uuc3RhcnRzd2l0aCgndGlja2V0OicpIGFuZCBsZW4oc3BsaXRzKT4yOgorICAgICAgICAgICAgICAgICAgICB0aWNrbmFtZT1zcGxpdHNbMV0KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGlja251bT1pbnQodGlja25hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZXYgPSBucmV2KzEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgeWVzLCB3ZSBoYXZlIGEgdGlja2V0ICMKKyAgICAgICAgICAgICAgICAgICAgZmlsZXM9W10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGNoZyBpbiBjaGdzZXQuZ2V0X2NoYW5nZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGdbMF0uc3RhcnRzd2l0aChvbGRfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihmaWxlcyk9PTA6CisgICAgICAgICAgICAgICAgICAgICAgICBucmV2ID0gbnJldisxCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIG5vIHJlbGV2YW50IGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHRpdGVtPSh0aWNrbnVtLGZpbGVzLGNoZ3NldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGlja251bSBpbiB0aWNrZXRsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0bGlzdFt0aWNrbnVtXS5hcHBlbmQoIHRpdGVtICkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldGxpc3RbdGlja251bV09WyB0aXRlbSBdCisgICAgICAgICAgICAgICAgICAgIHJldmxpc3RbbnJldl09dGl0ZW0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAibWFsZm9ybWVkIHRpY2tldD8gJXMgYXQgJWQiICUgKG1lc3NhZ2UsbnJldikgIyBkb24ndCBrbm93IHRoZSBzeW50YXggZm9yIGRpZS4uCisgICAgICAgICAgICAgICAgbnJldiA9IG5yZXYrMQorICAgICAgICAgICAgaWYgbGVuKHRpY2tldGxpc3QpOgorICAgICAgICAgICAgICAgIHRpY2tldHM9dGlja2V0bGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICB0aWNrZXRzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0aWNrZXQgaW4gdGlja2V0czoKKyAgICAgICAgICAgICAgICAgICAgYXRpY2tldD10aWNrZXRsaXN0W3RpY2tldF0gICMgKHRpY2tldCxmaWxlcyxjaGcpCisgICAgICAgICAgICAgICAgICAgIGNtdCA9ICd0aWNrZXQ6JWQgLSAlZCByZXZzOiAnICUgKHRpY2tldCxsZW4oYXRpY2tldCkpCisgICAgICAgICAgICAgICAgICAgIGZvciByZXYgaW4gYXRpY2tldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldm4gPSByZXZbMl0ucmV2CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlY291bnQgPSBsZW4ocmV2WzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgJ3IlZCAtICVkIGZpbGVzICgnICUgKHJldm4sZmlsZWNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gcmV2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArIGZpbGVbMF0gKyAnICcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcpICcKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKGNtdCwgc2VsZi5lbnYsIGRiLCAgc2hvcnRlbj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRpY2tldAorICAgICAgICAgICAgaWYgbGVuKHJldmxpc3QpOgorICAgICAgICAgICAgICAgIHJldnM9cmV2bGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICByZXZzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciByZXYgaW4gcmV2czoKKyAgICAgICAgICAgICAgICAgICAgYXJldj1yZXZsaXN0W3Jldl0gICMgKHRpY2tldCxmaWxlcyxjaGcpCisgICAgICAgICAgICAgICAgICAgIGNtdCA9ICdyJWQgdGlja2V0OiVkICcgJSAoYXJldlsyXS5yZXYsYXJldlswXSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNvdW50ID0gbGVuKGFyZXZbMV0pCisgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcgLSAlZCBmaWxlcyAoJyAlIGZpbGVjb3VudAorICAgICAgICAgICAgICAgICAgICBzaG9ydGZpbGVzPScnCisgICAgICAgICAgICAgICAgICAgIGogPSAwCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGFyZXZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLnBhdGgnICUgKHJldixqKV0gPSBmaWxlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLmtpbmQnICUgKHJldixqKV0gPSBmaWxlWzFdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLmNoYW5nZScgJSAocmV2LGopXSA9IGZpbGVbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0cGF0aD1maWxlWzBdW2xlbihvbGRfcGF0aCkrMTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLnNob3J0cGF0aCcgJSAocmV2LGopXSA9IHNob3J0cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgZmlsZVswXSArICcgJworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRmaWxlcyA9IHNob3J0ZmlsZXMgKyAnICcgKyBzaG9ydHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGo9aisxCisgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcpICcKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5jb21tZW50JyAlIHJldl0gPSB3aWtpX3RvX29uZWxpbmVyKGNtdCwgc2VsZi5lbnYsIGRiLCAgc2hvcnRlbj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5udW1iZXInICUgcmV2XSA9IHJldgorICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLnNob3J0ZmlsZXMnICUgcmV2XSA9IHNob3J0ZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5iYWNrbnVtYmVyJyAlIHJldl0gPSAocmV2LTEpCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQudGlja2V0JyAlIHJldl0gPSBhcmV2WzBdCisKKworIyAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZW1wbGF0ZSwgYmFzZXN0cmluZyk6CisjICAgICAgICAgICAgcmVxLmhkZlsnYWRtaW4ucGFnZV90ZW1wbGF0ZSddID0gdGVtcGxhdGUKKyMgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgcmVxLmhkZlsnYWRtaW4ucGFnZV9jb250ZW50J10gPSBNYXJrdXAodGVtcGxhdGUucmVuZGVyKCkpCisKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICByZXR1cm4gJ2RjdXQuY3MnLCBjb250ZW50X3R5cGUKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWU0OTUKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvY3NzL2ljdXh0bi5jc3MKQEAgLTAsMCArMSw1MyBAQAorLyogQG92ZXJyaWRlIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL2Nocm9tZS9pY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MgKi8KKworLyogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCisvKiBAb3ZlcnJpZGUgaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9jaHJvbWUvaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzICovCisKKwordGFibGUuaWN1cmV2aWV3IHsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCWJvcmRlcjogIDFweCBzb2xpZCBncmF5OworfQorCit0YWJsZS5pY3VyZXZpZXcgdGgsIHRhYmxlLmljdXJldmlldyB0ZCB7CisJdGV4dC1hbGlnbjogbGVmdDsKKwlib3JkZXI6ICAxcHggc29saWQgZ3JheTsKKwlwYWRkaW5nOiAgMnB4OworfQorCit0YWJsZS5pY3VyZXZpZXcgdGhlYWQgdGggeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS5pY3VyZXZpZXcgdGQuY2hhbmdlcyB7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3RhYmxlLmljdXJldmlldyB0ZC5vdmVyYWxsICB7CisJYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKworLmJyYW5jaC11bmtub3duIHsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWZvbnQtc3R5bGU6ICBpdGFsaWM7Cit9CisuYnJhbmNoLXRhZ3MgeworCWZvbnQtd2VpZ2h0OiBib2xkOworCWZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOworCWNvbG9yOiAgd2hpdGU7CisJYmFja2dyb3VuZC1jb2xvcjogbmF2eTsKKwlwYWRkaW5nOiAgMXB4OworfQorLmJyYW5jaC1icmFuY2hlcyB7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwljb2xvcjogICMzNTM7Cit9CisKKy5icmFuY2gtdHJ1bmsgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGI1N2IKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgdmFyIHNldEJyYW5jaE5hbWVzID0gZnVuY3Rpb24oKSB7CisgICAgIHZhciBjc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlc2V0dGFibGUiKTsKKyAgICAgdmFyIHRycz1jc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7CisgICAgIGZvciggaT0xIDsgaSA8IHRycy5sZW5ndGggOyBpKysgKSB7CisJdmFyIHNlYyA9IHRyc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKVsxXTsgLy8gWzBdIGlzICdhdXRob3InLCBbMV0gaXMgc2VjdGlvbi4KKyAgICAgICAgdmFyIGJyayA9IHNlYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOworICAgICAgICBmb3Ioaj0wO2o8YnJrLmxlbmd0aDtqKyspIHsKKyAgICAgICAgICAgdmFyIGJyaSA9IGJya1tqXTsKKyAgICAgICAgICAgdmFyIHN0ciA9IGJyaS5pbm5lckhUTUw7CisgICAgICAgICAgIGlmKHN0ci5pbmRleE9mKCJ0cnVuayIpPi0xKSB7CisgICAgICAgICAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLXRydW5rJzsKKyAgICAgICAgICAgfSBlbHNlIGlmKHN0ci5pbmRleE9mKCJicmFuY2hlcyIpPi0xKSB7CisgICAgICAgICAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLWJyYW5jaGVzJzsKKyAgICAgICAgICAgfSBlbHNlIGlmKHN0ci5pbmRleE9mKCJ0YWdzIik+LTEpIHsKKwkgICAgICBicmkuY2xhc3NOYW1lID0gJ2JyYW5jaC10YWdzJzsKKyAgICAgICAgICAgfQorICAgICAgICB9CisgICAgIH0KKyAgfQorCisvLyBodHRwOi8vY2tvbi53b3JkcHJlc3MuY29tLzIwMDgvMDcvMjUvc3RvcC11c2luZy13aW5kb3dvbmxvYWQtaW4tamF2YXNjcmlwdC8KK2lmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHt3aW5kb3cuYXR0YWNoRXZlbnQoJ29ubG9hZCcsIHNldEJyYW5jaE5hbWVzKTt9CitlbHNlIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0QnJhbmNoTmFtZXMsIGZhbHNlKTt9CitlbHNlIHtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0QnJhbmNoTmFtZXMsIGZhbHNlKTt9CisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3Jldmlldy5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3Jldmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2Q1OWFkCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5CkBAIC0wLDAgKzEsMzMyIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyBSZXZpZXcgbW9kdWxlLgorIyBUT0RPOiByZWZhY3RvciB0aWNrZXQgbWFuaXB1bGF0aW9uIGl0ZW1zIGludG8gdGlja2V0bWdyLgorCitpbXBvcnQgcmUKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudCwgaW1wbGVtZW50cworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudE1hbmFnZXIKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBUcmFjRXJyb3IKK2Zyb20gdHJhYy51dGlsIGltcG9ydCBNYXJrdXAKK2Zyb20gdHJhYy53ZWIgaW1wb3J0IElSZXF1ZXN0SGFuZGxlcgorZnJvbSB0cmFjLndlYi5jaHJvbWUgaW1wb3J0IGFkZF9zdHlsZXNoZWV0LCBhZGRfc2NyaXB0LCBJVGVtcGxhdGVQcm92aWRlciwgYWRkX2N0eHRuYXYKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbCBpbXBvcnQgQ2hhbmdlc2V0Citmcm9tIHRyYWMud2ViLmFwaSBpbXBvcnQgSVJlcXVlc3RGaWx0ZXIKK2Zyb20gdHJhYy53aWtpIGltcG9ydCB3aWtpX3RvX2h0bWwsIHdpa2lfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIKKyAgICAgICAgICAgIAorZnJvbSBnZW5zaGkuYnVpbGRlciBpbXBvcnQgdGFnCisjZnJvbSB0cmFjLmVudiBpbXBvcnQgSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudAorZnJvbSB0cmFjLnBlcm0gaW1wb3J0IElQZXJtaXNzaW9uUmVxdWVzdG9yCitmcm9tIHRyYWMuY29uZmlnIGltcG9ydCBMaXN0T3B0aW9uCitmcm9tIGljdWNvZGV0b29scy50aWNrZXRtZ3IgaW1wb3J0IFRpY2tldE1hbmFnZXIKK2Zyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgcmVzb3VyY2VfZmlsZW5hbWUgI0BVbnJlc29sdmVkSW1wb3J0CisKK2NsYXNzIFJldmlld01vZHVsZShDb21wb25lbnQpOgorCisgICAgaW1wbGVtZW50cyhJVGVtcGxhdGVQcm92aWRlciwgSVJlcXVlc3RGaWx0ZXIsIElSZXF1ZXN0SGFuZGxlciwgSVBlcm1pc3Npb25SZXF1ZXN0b3IpCisKKyAgICAjIHBhdGggdG8gbWF0Y2ggZm9yIHJldmlldworICAgIHBhdGhfbWF0Y2ggPSByZS5jb21waWxlKHInL2ljdXJldmlldy8oWzAtOV0rKScpCisKKyAgICB2b3RlYWJsZV9wYXRocyA9IExpc3RPcHRpb24oJ2ljdWNvZGV0b29scycsICdwYXRocycsICcvdGlja2V0KicsCisgICAgICAgIGRvYz0nTGlzdCBvZiBVUkwgcGF0aHMgdG8gc2hvdyByZXZpZXdzIG9uLiBHbG9icyBhcmUgc3VwcG9ydGVkLicpCisKKyAgICAjICBzZWFyY2ggZm9yIGVhcmxpZXN0IG1hdGNoLCBhbmQgaG93IG1hbnkgc2VnbWVudHMgdG8gaW5jbHVkZSBmb2xsb3dpbmcKKyAgICAjICAgIHRydW5rCisgICAgIyAgICBicmFuY2hlcy9tYWludC9tYWludC00LTgKKyAgICAjICAgIHRhZ3MvcmVsZWFzZS0yLTAKKyAgICBicmFuY2hMaXN0ID0gW1sndHJ1bmsnLDBdLFsnYnJhbmNoZXMnLDJdLFsndGFncycsMV1dCisKKyAgICAjIElQZXJtaXNzaW9uUmVxdWVzdG9yIG1ldGhvZHMKKyAgICBkZWYgZ2V0X3Blcm1pc3Npb25fYWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsnSUNVUkVWSUVXX1ZJRVcnXQorCisgICAgIyBJVGVtcGxhdGVQcm92aWRlciBtZXRob2RzCisgICAgZGVmIGdldF90ZW1wbGF0ZXNfZGlycyhzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgCXJldHVybiBbcmVzb3VyY2VfZmlsZW5hbWUoX19uYW1lX18sICd0ZW1wbGF0ZXMnKV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6IAorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoJ0NvdWxkIG5vdCBnZXQgdGVtcGxhdGUgZGlyOiAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKGUpLCBlKSkKKwkJcmV0dXJuICIiCisKKworICAgIGRlZiBnZXRfaHRkb2NzX2RpcnMoc2VsZik6CisgICAgICAgIHJldHVybiBbKCdpY3Vjb2RldG9vbHMnLCByZXNvdXJjZV9maWxlbmFtZShfX25hbWVfXywgJ2h0ZG9jcycpKV0KKworICAgICMgSVJlcXVlc3RGaWx0ZXIgbWV0aG9kcworICAgIGRlZiBwcmVfcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcSwgaGFuZGxlcik6CisgICAgICAgIGlmICdJQ1VSRVZJRVdfVklFVycgbm90IGluIHJlcS5wZXJtOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIKKworICAgICAgICBpZiBzZWxmLm1hdGNoX3RpY2tldHBhZ2UocmVxKToKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX3Jldmlld2xpbmsocmVxKQorCisgICAgICAgIHJldHVybiBoYW5kbGVyCisKKyAgICBkZWYgcG9zdF9wcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxLCB0ZW1wbGF0ZSwgZGF0YSwgY29udGVudF90eXBlKToKKyAgICAgICAgcmV0dXJuICh0ZW1wbGF0ZSwgZGF0YSwgY29udGVudF90eXBlKQorCisgICAgZGVmIHJlbmRlcl9yZXZpZXdsaW5rKHNlbGYsIHJlcSk6CisgICAgICAgICNhZGRfc3R5bGVzaGVldChyZXEsICdpY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MnKQorCisgICAgICAgIGVscyA9IFtdCisKKyAgICAgICAgdGlja2V0X21nciA9IFRpY2tldE1hbmFnZXIoc2VsZi5jb21wbWdyKQorCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorICAgICAgICBpZiBub3QgcmVwb3M6CisgICAgICAgICAgICByYWlzZSBUcmFjRXJyb3IoIkNvdWxkIG5vdCBnZXQgcmVwb3NpdG9yeSBmb3IgJXMiICUgKHJlcS5hdXRobmFtZSkpCisKKyAgICAgICAgcmV2cyA9IHRpY2tldF9tZ3IudGt0MnJldnMoc2VsZi5sb2csIGRiLCByZXBvcywgcmVxLCByZXEuYXJnc1sndGlja2V0J10pCisKKyAgICAgICAgaWYgbm90IHJldnM6CisgICAgICAgICAgICBzdHIgPSAnTm8gY29tbWl0cy4nCisgICAgICAgICAgICBsaSA9IHRhZy5saShzdHIpCisgICAgICAgICAgICBlbHMuYXBwZW5kKGxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyID0gJyAlZCBjb21taXRzLicgJSBsZW4ocmV2cykKKyAgICAgICAgICAgIGhyZWYgPSByZXEuaHJlZi5yZXZpZXcocmVxLmFyZ3NbJ3RpY2tldCddKQorICAgICAgICAgICAgYSA9IHRhZy5hKCdSZXZpZXcnLCBocmVmPWhyZWYpCisgICAgICAgICAgICBsaSA9IHRhZy5saShhICsgc3RyKQorICAgICAgICAgICAgZWxzLmFwcGVuZChsaSkgICAgICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHVsID0gdGFnLnVsKGVscywgY2xhc3NfPSdyZXZpZXcnKQorICAgICAgICBjbGFzc05hbWUgPSAnJworICAgICAgICB0aXRsZSA9ICJSZXZpZXdzIgorICAgICAgICBhZGRfY3R4dG5hdihyZXEsIHRhZy5zcGFuKHRhZy5vYmplY3QodWwpLCBpZD0naWN1cmV2aWV3JywgdGl0bGU9dGl0bGUsIGNsYXNzXz1jbGFzc05hbWUpKQorCisKKyAgICBkZWYgbWF0Y2hfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcvcmV2aWV3KD86LyhbXi9dKykpPyg/Oi8oW14vXSspKT8oPzovKC4qKSQpPycsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmVxLmFyZ3NbJ3RpY2tldCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbWF0Y2hfdGlja2V0cGFnZShzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcvdGlja2V0KD86LyhbXi9dKykpPyg/Oi8oW14vXSspKT8oPzovKC4qKSQpPycsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmVxLmFyZ3NbJ3RpY2tldCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcGF0aFRvQnJhbmNoTmFtZShzZWxmLCBwYXRoKToKKyAgICAgICAgI3JldHVybiAnLycuam9pbihwYXRoLnNwbGl0KCcvJylbMDoyXSkKKyAgICAgICAgd2luZGV4ID0gTm9uZQorICAgICAgICB3aW4gPSBOb25lCisgICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5icmFuY2hMaXN0OgorICAgICAgICAgICAgaWYocGF0aCA9PSBicmFuY2hbMF0pOiAgIyBjYXRjaCBjaGFuZ2VzIHRvIGp1c3QgJ3RydW5rJworICAgICAgICAgICAgICAgIGlkeCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWR4ID0gcGF0aC5maW5kKGJyYW5jaFswXSsnLycpCisgICAgICAgICAgICBpZihpZHggPiAtMSBhbmQgKHdpbmRleCA9PSBOb25lIG9yIHdpbmRleCA+IGlkeCkpOgorICAgICAgICAgICAgICAgIHdpbmRleCA9IGlkeAorICAgICAgICAgICAgICAgIHdpbiA9IGJyYW5jaAorICAgICAgICBpZiB3aW5kZXggPT0gTm9uZToKKyAgICAgICAgICAgIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpCisgICAgICAgICAgICByZXR1cm4gJy8nLmpvaW4oc2VnbWVudHNbMDoyXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNwcmludCAiZm91bmQgJXMgZm9sbCAlcyBAICVkIiAlICh3aW5bMF0sd2luWzFdLHdpbmRleCkKKyAgICAgICAgICAgIHNlZ21lbnRzID0gcGF0aFt3aW5kZXg6XS5zcGxpdCgnLycpCisgICAgICAgICAgICByZXR1cm4gcGF0aFs6d2luZGV4XSArICgnLycuam9pbihzZWdtZW50c1swOndpblsxXSsxXSkpICMgdXNlIHNwZWNpZmllZCAjIG9mIGZvbGxvd2luZyBzZWdtZW50cworCisgICAgZGVmIGNoYW5nZVRvUmFuZ2Uoc2VsZiwgY19uZXcsIGNoYW5nZSk6CisgICAgICAgICMgcTogKHUndHJ1bmsvTG9jYWxlLmphdmEnLCAnZmlsZScsICdhZGQnLCBOb25lLCB1Jy0xJykgIGZyb20gcjMKKyAgICAgICAgIyBxOiAodSd0cnVuay91dGlsLmMnLCAgICAgICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisjICAgICAgICBjX3BhdGggPSBjaGFuZ2VbMF0KKyMgICAgICAgIGNfaXRlbXR5cGUgPSBjaGFuZ2VbMV0KKyAgICAgICAgY190eXBlID0gY2hhbmdlWzJdCisgICAgICAgIGNfb2xkcGF0aCA9IGNoYW5nZVszXQorICAgICAgICBjX29sZCA9IGludChjaGFuZ2VbNF0gb3IgLTEpCisgICAgICAgIGlmKGNfdHlwZSBpbiAoQ2hhbmdlc2V0LkNPUFksQ2hhbmdlc2V0Lk1PVkUpKToKKyAgICAgICAgICAgIHJldHVybiAoLTEsIGNfbmV3LCBjX3R5cGUsIGNfb2xkLCBjX29sZHBhdGgpICMgaWdub3JlIE9MRCByZXYgZm9yIHRoZXNlCisgICAgICAgIGVsaWYoY190eXBlIGluIChDaGFuZ2VzZXQuREVMRVRFKSk6CisgICAgICAgICAgICByZXR1cm4gKGNfb2xkLCAtMSwgY190eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChjX29sZCwgY19uZXcsIGNfdHlwZSkKKyAgICAgICAgCisgICAgZGVmIGRlc2NyaWJlQ2hhbmdlKHNlbGYsIGZpbGUsIGNoYW5nZSwgcmVxLCBkYik6CisgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0gb3IgJ2NoYW5nZScKKyAgICAgICAgd2hlcmUgPSAnciVkOiVkJyAlIChjaGFuZ2VbMF0sY2hhbmdlWzFdKQorICAgICAgICBpZihjaGFuZ2VbMF0gPT0gLTEpOgorICAgICAgICAgICAgaWYoY2hhbmdlWzFdID09IC0xKToKKyAgICAgICAgICAgICAgICB1cmwgPSBOb25lCisgICAgICAgICAgICAgICAgd2hhdCA9ICJub29wIgorICAgICAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjaWYgY2hhbmdlWzJdID09ICdhZGQrY29tbWl0cyc6CisgICAgICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuYnJvd3NlcihmaWxlLCByZXY9Y2hhbmdlWzFdKSAjICdhZGQnCisgICAgICAgICAgICAgICAgd2hlcmUgPSAnciVkJyAlIGNoYW5nZVsxXQorICAgICAgICAgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0KKyAgICAgICAgZWxpZihjaGFuZ2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgdXJsID0gTm9uZSAjIGRlbGV0ZWQKKyAgICAgICAgICAgIHdoYXQgPSAiZGVsZXRlZCIKKyAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuY2hhbmdlc2V0KG9sZF9wYXRoPWZpbGUsIG9sZD1jaGFuZ2VbMF0sIG5ld19wYXRoPWZpbGUsIG5ldz1jaGFuZ2VbMV0pCisgICAgICAgIGlmIHVybDoKKyAgICAgICAgICAgIHdoYXQgPSBNYXJrdXAoJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKHVybCx3aGF0KSkKKyAgICAgICAgaWYgd2hlcmU6CisgICAgICAgICAgICByZXR1cm4gKHdoYXQsIHRhZy5hKHdoZXJlLCBocmVmPXJlcS5ocmVmLnNlYXJjaChxPXdoZXJlKSkpCisgICAgICAgICAgICAjcmV0dXJuICh3aGF0LCB3aGVyZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAod2hhdCwgJycpCisKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgI29rLCB3aGF0IGFyZSB3ZSBhYm91dC4KKyAgICAgICAgI2RiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgICN0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICAjcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorCisgICAgICAgIG5ld19wYXRoID0gcmVxLmFyZ3MuZ2V0KCduZXdfcGF0aCcpCisgICAgICAgIG5ld19yZXYgPSByZXEuYXJncy5nZXQoJ25ldycpCisgICAgICAgIG9sZF9wYXRoID0gcmVxLmFyZ3MuZ2V0KCdvbGRfcGF0aCcpCisgICAgICAgIG9sZF9yZXYgPSByZXEuYXJncy5nZXQoJ29sZCcpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChuZXdfcGF0aCkKKyAgICAgICAgbmV3X3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYobmV3X3JldikKKyAgICAgICAgb2xkX3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChvbGRfcGF0aCkKKyAgICAgICAgb2xkX3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYob2xkX3JldikKKyAgICAgICAgCisKKyMgICAgICAgIGlmIG5vdCByZXEucGVybS5oYXNfcGVybWlzc2lvbignVElDS0VUX01PRElGWScpOgorIyAgICAgICAgICAgIHJldHVybiByZXEucmVkaXJlY3QocmVxLmhyZWYuYnJvd3NlcigpKQorCisgICAgICAgIG9sZF9yZXYgPSBpbnQob2xkX3JldikKKyAgICAgICAgbmV3X3JldiA9IGludChuZXdfcmV2KQorICAgICAgICAKKyAgICAgICAgdGlja2V0ID0gcmVxLmFyZ3MuZ2V0KCd0aWNrZXQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aWNrZXQgPSBpbnQodGlja2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdGlja2V0ID0gMAorIyAgICAgICAgcmVxLmhkZlsncmV2aWV3LnRpY2tldCddID0gdGlja2V0CisjICAgICAgICByZXEuaGRmWydyZXZpZXcudGlja2V0aHRtbCddID0gdGFnLmEodGlja2V0LCByZXEuaHJlZi50aWNrZXQodGlja2V0KSkKKworICAgICAgICBkYXRhID0ge30KKworICAgICAgICBkYXRhWydvdmVyYWxsX3knXSA9IDAKKyAgICAgICAgZGF0YVsndGlja2V0X2lkJ10gPSByZXEuYXJnc1sndGlja2V0J10KKyAgICAgICAgZGF0YVsndGlja2V0X2hyZWYnXSA9IHJlcS5ocmVmLnRpY2tldChyZXEuYXJnc1sndGlja2V0J10pCisKKyAgICAgICAgdGlja2V0X21nciA9IFRpY2tldE1hbmFnZXIoc2VsZi5jb21wbWdyKQorCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorCisgICAgICAgIHJldnMgPSB0aWNrZXRfbWdyLnRrdDJyZXZzKHNlbGYubG9nLCBkYiwgcmVwb3MsIHJlcSwgcmVxLmFyZ3NbJ3RpY2tldCddKQorICAgICAgICAKKyAgICAgICAgaWYgKG5vdCByZXZzIG9yIGxlbihyZXZzKT09MCk6CisgICAgICAgICAgICAjIG5vdGhpbmcgdG8gcmV2aWV3LiBzaG91bGRuJ3QgaGFwcGVuCisgICAgICAgICAgICByZXR1cm4gKCdub3RoaW5nLmh0bWwnLCBkYXRhLCAndGV4dC9odG1sJykKKyAgICAgICAgZWxpZihsZW4ocmV2cyk9PTEpOgorICAgICAgICAgICAgIyBvbmx5IG9uZSBjaGFuZ2UgLSBqdXN0IGRvIGEgY2hhbmdlc2V0IHZpZXcKKyAgICAgICAgICAgIHJldHVybiByZXEucmVkaXJlY3QocmVxLmhyZWYuY2hhbmdlc2V0KHJldnNbMF0pKQorCisgICAgICAgIHJldmNvdW50ID0gMAorICAgICAgICBicmFuY2hlcyA9IHt9CisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgIyBtYXkgYmUgMCByZXZzLgorICAgICAgICByZXZpc2lvbnMgPSBbXQorICAgICAgICAKKyAgICAgICAgZm9yIHJldiBpbiByZXZzOgorICAgICAgICAgICAgY2hnc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChyZXYpCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL0xvY2FsZS5qYXZhJywgJ2ZpbGUnLCAnYWRkJywgTm9uZSwgdSctMScpICBmcm9tIHIzCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL3V0aWwuYycsICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisgICAgICAgICAgICBtZXNzYWdlID0gY2hnc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAgICAgcmV2Y291bnQgPSByZXZjb3VudCArIDEKKyAgICAgICAgICAgIHJldmlzaW9uID0ge30KKyAgICAgICAgICAgIHJldmlzaW9uWydyZXYnXSA9ICB0YWcuYShyZXYsIHJlcS5ocmVmLmNoYW5nZXNldChyZXYpKQorICAgICAgICAgICAgcmV2aXNpb25bJ2F1dGhvciddID0gY2hnc2V0LmF1dGhvcgorICAgICAgICAgICAgcmV2aXNpb25bJ251bSddID0gIHJldgorICAgICAgICAgICAgcmV2aXNpb25bJ2NvbW1lbnQnXSA9ICBtZXNzYWdlICN3aWtpX3RvX29uZWxpbmVyKCBtZXNzYWdlLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgcmJyYW5jaGVzID0gcmV2aXNpb25bJ2JyYW5jaGVzJ10gPSBbXQorICAgICAgICAgICAgZm9yIGNoZyBpbiBjaGdzZXQuZ2V0X2NoYW5nZXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gY2hnWzBdCisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbGVzW3BhdGhdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW3BhdGhdID0gaXRlbTsKKyAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZChzZWxmLmNoYW5nZVRvUmFuZ2UocmV2LGNoZykpCisgICAgICAgICAgICAgICAgYnJhbmNoX25hbWUgPSBzZWxmLnBhdGhUb0JyYW5jaE5hbWUocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBicmFuY2hfbmFtZSBub3QgaW4gcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICByYnJhbmNoZXMuYXBwZW5kKGJyYW5jaF9uYW1lKQorICAgICAgICAgICAgcmV2aXNpb25zLmFwcGVuZChyZXZpc2lvbikKKyAgICAgICAgZGF0YVsncmV2aXNpb25zJ10gPSByZXZpc2lvbnMKKyAgICAgICAgCisgICAgICAgIGlmKHJldmNvdW50ID4gMCk6CisgICAgICAgICAgICBkYXRhWydyZXZjb3VudCddID0gcmV2Y291bnQKKyAgICAgICAgCisgICAgICAgICMgcHJpbnQgImZpbGVzOiAlZCIgJSBsZW4oZmlsZXMpCisgICAgICAgICMgZ28gdGhyb3VoZyBlYWNoIGZpbGUgYW5kIGNhbGN1bGF0ZSBpdHMgbWluaW11bSByYW5nZQorICAgICAgICBmaWxlbGlzdCA9IGZpbGVzLmtleXMoKQorICAgICAgICBmaWxlbGlzdC5zb3J0KCkKKyMgICAgICAgIHByaW50ICdiYXIgdG8gJWQgbGVuIG9mICVzJyAlIChsZW4oZmlsZWxpc3QpLHN0cihmaWxlbGlzdCkpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgY2hhbmdlcyA9IGZpbGVzW2ZpbGVdCisgICAgICAgICAgICBpID0gMAorIyAgICAgICAgICAgIHByaW50ICIgbG9vcGluZyBmcm9tICVkIHRvICVkIG92ZXIgJWQgIiAlIChpLGxlbihjaGFuZ2VzKS0xLGxlbihjaGFuZ2VzKSkKKyAgICAgICAgICAgIHdoaWxlIGxlbihjaGFuZ2VzKT4xIGFuZCBpPChsZW4oY2hhbmdlcyktMSk6CisgICAgICAgICAgICAgICAgaWYgY2hhbmdlc1tpXVsxXSA9PSBjaGFuZ2VzW2krMV1bMF06CisgICAgICAgICAgICAgICAgICAgIGlmIGNoYW5nZXNbaV1bMF0gPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzW2krMV0gPSAoY2hhbmdlc1tpXVswXSxjaGFuZ2VzW2krMV1bMV0sJ2FkZCtjb21taXRzJykgIyByZXRhaW4gJ2ZpcnN0JyByZXYKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbaSsxXSA9IChjaGFuZ2VzW2ldWzBdLGNoYW5nZXNbaSsxXVsxXSwnbXVsdGlwbGUgY29tbWl0cycpICMgcmV0YWluICdmaXJzdCcgcmV2CisKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXNbOmldICsgY2hhbmdlc1tpKzE6XSAjIGFuZCBzaGlmdCBkb3duCisjICAgICAgICAgICAgICAgICAgICBwcmludCAibWVyZ2VkOiAlcyIgJSBzdHIoY2hhbmdlcykKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbZmlsZV0gPSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgIAorICAgICAgICAjIG5vdywgd3JpdGUgJ2VtIG91dAorICAgICAgICBzZXJhID0gMAorICAgICAgICAjZmlsZXNfZGF0YSA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgc2VyYSA9IHNlcmErMQorICAgICAgICAgICAgZmlsZV9kYXRhID0ge30KKyAgICAgICAgICAgIGZpbGVfZGF0YVsnbmFtZSddID0gTWFya3VwKCc8YSBocmVmPSIlcyI+JXM8L2E+JyAlIChyZXEuaHJlZi5icm93c2VyKGZpbGUpLGZpbGUpKQorICAgICAgICAgICAgYnJhbmNoX25hbWUgPSBzZWxmLnBhdGhUb0JyYW5jaE5hbWUoZmlsZSkKKyAgICAgICAgICAgICNwcmludCAiYnJhbmNoIGlzOiAoJXMpIiAlIChicmFuY2hfbmFtZSkKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGEgPSBicmFuY2hlcy5nZXQoYnJhbmNoX25hbWUsIHt9KQorICAgICAgICAgICAgZmlsZXNfZGF0YSA9IGJyYW5jaGVzX2RhdGEuZ2V0KCdmaWxlcycsW10pCisKKyAgICAgICAgICAgIGNoYW5nZXMgPSBmaWxlc1tmaWxlXQorICAgICAgICAgICAgY2hhID0gMAorICAgICAgICAgICAgY2hhbmdlc19kYXRhID0gW10KKyAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gY2hhbmdlczoKKyAgICAgICAgICAgICAgICBjaGEgPSBjaGEgKyAxCisjICAgICAgICAgICAgICAgIHByaW50ICIlcyBvdXRwdXQgJXMgIiAlIChmaWxlLCBzdHIoY2hhbmdlKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzX2RhdGEuYXBwZW5kKHNlbGYuZGVzY3JpYmVDaGFuZ2UoZmlsZSwgY2hhbmdlLCByZXEsIGRiKSkKKyAgICAgICAgICAgIGZpbGVfZGF0YVsnY2hhbmdlcyddID0gY2hhbmdlc19kYXRhCisgICAgICAgICAgICBpZihsZW4oY2hhbmdlcyk+MSk6CisgICAgICAgICAgICAgICAgd2hhdGh0bWwgPSBzZWxmLmRlc2NyaWJlQ2hhbmdlKGZpbGUsIChjaGFuZ2VzWzBdWzBdLCBjaGFuZ2VzW2xlbihjaGFuZ2VzKS0xXVsxXSwgJ292ZXJhbGwnKSwgcmVxLCBkYikKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGwnXSA9IHdoYXRodG1sCisgICAgICAgICAgICAgICAgZmlsZV9kYXRhWydvdmVyYWxsX3knXSA9IDEKKyAgICAgICAgICAgICAgICBkYXRhWydvdmVyYWxsX3knXSA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhWydvdmVyYWxsX3knXSA9IDAKKyAgICAgICAgICAgIGZpbGVzX2RhdGEuYXBwZW5kKGZpbGVfZGF0YSkKKyAgICAgICAgICAgICMgc2V0cworICAgICAgICAgICAgYnJhbmNoZXNfZGF0YVsnZmlsZXMnXSA9IGZpbGVzX2RhdGEKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGFbJ2xlbiddID0gbGVuKGZpbGVzX2RhdGEpCisgICAgICAgICAgICBicmFuY2hlc19kYXRhWyduYW1lJ10gPSBicmFuY2hfbmFtZQorICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoX25hbWVdID0gYnJhbmNoZXNfZGF0YQorCisgICAgICAgICMgLi4gY29udmVydCBkaWN0IHRvIGFycmF5LgorICAgICAgICBicmFuY2hfbGlzdCA9IFtdCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXM6CisgICAgICAgICAgICBicmFuY2hfbGlzdC5hcHBlbmQoYnJhbmNoZXNbYnJhbmNoXSkKKyAgICAgICAgZGF0YVsnYnJhbmNoZXMnXSA9IGJyYW5jaF9saXN0CisgICAgICAgIGRhdGFbJ2xhc3RicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBkYXRhWydicmFuY2hjb3VudCddID0gbGVuKGJyYW5jaGVzKQorICAgICAgICAKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgYWRkX3NjcmlwdChyZXEsICdpY3Vjb2RldG9vbHMvanMvcmV2aWV3LmpzJykKKyAgICAgICAgcmV0dXJuICdyZXZpZXcuaHRtbCcsIGRhdGEsIGNvbnRlbnRfdHlwZQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE5ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgaHRtbAorICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPCEtLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgICAgIHhtbG5zOnB5PSJodHRwOi8vZ2Vuc2hpLmVkZ2V3YWxsLm9yZy8iCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9ImxheW91dC5odG1sIiAvPgorICA8aGVhZD4KKyAgICA8dGl0bGU+Tm90aGluZyB0byBSZXZpZXcgZm9yIHRpY2tldCAjJHt0aWNrZXRfaWR9PC90aXRsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImN0eHRuYXYiIGNsYXNzPSJuYXYiPjwvZGl2PgorCisgICAgPGRpdiBpZD0iY29udGVudCIgY2xhc3M9ImljdWNvZGVyZXZpZXciPgorICAgICAgPGgxPk5vdGhpbmcgdG8gcmV2aWV3ITwvaDE+CisgICAgICA8cD4KKyAgICAgIAlOb3RoaW5nIHRvIHJldmlldyAtIG5vIGNoYW5nZXNldHMgaW4gdGlja2V0IDxhIGhyZWY9IiR7dGlja2V0X2hyZWZ9Ij4jJHt0aWNrZXRfaWR9PC9hPgorICAgICAgPC9wPgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2NDY0YgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbApAQCAtMCwwICsxLDE0MSBAQAorPCFET0NUWVBFIGh0bWwKKyAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzwhLS0KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgICAgICB4bWxuczpweT0iaHR0cDovL2dlbnNoaS5lZGdld2FsbC5vcmcvIgorICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8eGk6aW5jbHVkZSBocmVmPSJsYXlvdXQuaHRtbCIgLz4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlJldmlldyBmb3IgdGlja2V0ICMke3RpY2tldF9pZH08L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iY3R4dG5hdiIgY2xhc3M9Im5hdiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0iaWN1Y29kZXJldmlldyI+CisKKworIDxoMT5UaWNrZXQgPGEgaHJlZj0nJHtocmVmLnRpY2tldCh0aWNrZXRfaWQpfSc+IyR7dGlja2V0X2lkfTwvYT48L2gxPgorCis8cHk6aWYgdGVzdD0icmV2Y291bnQiPgorCisgIDxoMj4ke3JldmNvdW50fSBDaGFuZ2VzZXRzPC9oMj4KKyAgPHRhYmxlIGlkPSdjaGFuZ2VzZXR0YWJsZScgY2xhc3M9J2ljdXJldmlldyc+CisgICAgPHRoZWFkPgorICAgICAgPHRyPgorCTx0aD5yPC90aD4KKwk8dGg+YXV0aG9yPC90aD4KKwk8dGg+c2VjdGlvbihzKTwvdGg+CisJPHRoPmNvbW1lbnQ8L3RoPgorICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgIDxweTpmb3IgZWFjaD0icmV2IGluIHJldmlzaW9ucyI+CisJPHRyPgorCSAgPHRoPgorCSAgICA8YSBocmVmPSIke2hyZWYuY2hhbmdlc2V0KHJldi5udW0pfSI+ciR7cmV2Lm51bX08L2E+CisJICA8L3RoPgorCSAgPHRkPgorCSAgICAke3Jldi5hdXRob3J9CisJICA8L3RkPgorCSAgPHRkPgorCSAgICA8IS0tIHNlY3Rpb25zIC0tPgorCSAgICA8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiByZXYuYnJhbmNoZXMiPgorCSAgICAgIDxiIGNsYXNzPSdicmFuY2hsaXN0Jz4KKwkJPGEgY2xhc3M9J2JyYW5jaC11bmtub3duJyBocmVmPSIjJHticmFuY2h9Ij4ke2JyYW5jaH08L2E+IAorCSAgICAgIDwvYj4KKwkgICAgPC9weTpmb3I+CisJICA8L3RkPgorCSAgPHRkPgorCSAgICAke3Jldi5jb21tZW50fQorCSAgPC90ZD4KKwk8L3RyPgorICAgICAgPC9weTpmb3I+CisgICAgPC90Ym9keT4KKyAgPC90YWJsZT4KKyAgCis8cHk6aWYgdGVzdD0iYnJhbmNoY291bnQgPiAxIj4KKzxoMj5GaWxlczwvaDI+Cis8aDM+SnVtcCB0byBTZWN0aW9uczwvaDM+Cis8dWw+Cis8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiBicmFuY2hlcyI+CisgIDxsaT48YSBocmVmPSIjJHticmFuY2gubmFtZX0iPiR7YnJhbmNoLm5hbWV9PC9hPiAmbWRhc2g7ICR7YnJhbmNoLmxlbn0gZmlsZXM8L2xpPgorPC9weTpmb3I+Cis8L3VsPgorPC9weTppZj4KKworPHB5OmZvciBlYWNoPSJicmFuY2ggaW4gYnJhbmNoZXMiPgorPGhyLz4KKzxhIG5hbWU9IiR7YnJhbmNoLm5hbWV9Ij4KKyAgPGgzPgorICAgICAgICA8YSBocmVmPSIke2hyZWYuYnJvd3NlcihicmFuY2gubmFtZSl9Ij4ke2JyYW5jaC5uYW1lfTwvYT4gJm1kYXNoOyAoJHticmFuY2gubGVufSBmaWxlcyBjaGFuZ2VkKQorICA8L2gzPgorPC9hPgorCis8YmxvY2txdW90ZT4KKworPHRhYmxlIGNsYXNzPSdpY3VyZXZpZXcnPgorPHRoZWFkPgorPHRyPgorIDx0aD5GaWxlPC90aD4KKyA8dGg+Q2hhbmdlczwvdGg+CisgPHRoPkRldGFpbHM8L3RoPgorIDxweTppZiB0ZXN0PSJvdmVyYWxsX3kgPiAwIj4gCisgIDx0aD5PdmVyYWxsPGJyLz48aT4oaW5jbHVkaW5nIG90aGVyIGNoYW5nZXMpPC9pPjwvdGg+CisgIDx0aD5EZXRhaWxzPC90aD4KKyA8L3B5OmlmPgorPC90cj4KKzwvdGhlYWQ+Cis8dGJvZHk+Cis8cHk6Zm9yIGVhY2g9ImZpbGUgaW4gYnJhbmNoLmZpbGVzIj4KKyA8dHI+CisgICAgPHRoIGNsYXNzPSduYW1lJz4ke2ZpbGUubmFtZX08L3RoPgorICAgIDx0ZCBjbGFzcz0nY2hhbmdlcyc+CisgICAgICA8cHk6Zm9yIGVhY2g9ImNoYW5nZSBpbiBmaWxlLmNoYW5nZXMiPgorICAgICAgICAke2NoYW5nZVswXX08YnIvPgorICAgICAgPC9weTpmb3I+CisgICAgPC90ZD4KKyAgICA8dGQgY2xhc3M9J2RldGFpbHMnPgorICAgICAgPHB5OmZvciBlYWNoPSJjaGFuZ2UgaW4gZmlsZS5jaGFuZ2VzIj4KKyAgICAgICAgJHtjaGFuZ2VbMV19PGJyLz4KKyAgICAgIDwvcHk6Zm9yPgorICAgIDwvdGQ+CisJICAKKyAgICA8cHk6aWYgdGVzdD0ib3ZlcmFsbF95ID4gMCI+IAorICAgICA8cHk6aWYgdGVzdD0iZmlsZS5vdmVyYWxsX3kgPiAwIj4KKyAgICAgIDx0ZCBjbGFzcz0nb3ZlcmFsbCc+JHtmaWxlLm92ZXJhbGxbMF19PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0nb3ZlcmFsbCc+JHtmaWxlLm92ZXJhbGxbMV19PC90ZD4KKyAgICAgPC9weTppZj4KKyAgICA8L3B5OmlmPgorICA8L3RyPgorPC9weTpmb3I+Cis8L3Rib2R5PgorPC90YWJsZT4KKworPC9ibG9ja3F1b3RlPgorCis8L3B5OmZvcj4KKworPGhyLz4KKworPGRpdiBzdHlsZT0nZGlzcGxheTpub25lOyc+Cis8aDI+TWVyZ2UgQ29tbWFuZHM8L2gyPgorVmVyeSBleHBlcmltZW50YWwuICBDaGFuZ2UgPz8/IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUgeW91IHdhbnQgdG8gbWVyZ2UgZnJvbSAoaWN1IG9yIGljdTRqKTxici8+Cis8dGV4dGFyZWE+c3ZuIG1lcmdlIC1jIDw/Y3MgZWFjaDpyZXYgPSByZXZpc2lvbnMgPz48P2NzIHZhcjpyZXYubnVtID8+LDw/Y3MgL2VhY2ggPz4gc3ZuK3NzaDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1Lz8/Py90cnVuazwvdGV4dGFyZWE+CisKKzxoci8+Cis8L2Rpdj4KKzxoci8+Cis8aWZyYW1lIHNyYz0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pY3Vjb2RldG9vbHMvdjEvcmV2aWV3IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI4MDBweCI+Cis8aDE+PGEgaHJlZj0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pY3Vjb2RldG9vbHMvdjEvcmV2aWV3Ij5IZWxwPC9hPjwvaDE+Cis8L2lmcmFtZT4KKworPC9weTppZj4KKzxoci8+Cis8aT4kSWQ6ICQ8L2k+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MmUzMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5CkBAIC0wLDAgKzEsMTcwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBBdXRob3I6IDxzcmxAaWN1LXByb2plY3Qub3JnPgorIworCisjIAorIyBUaWNrZXQgbWFuYWdlbWVudC4KKyMgVGhpcyBjb21wb25lbnQgbWFuYWdlcyB0aGUgcmV2aXNpb24gdG8gdGlja2V0IG1hcC4KKworCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBDb21wb25lbnQsIGltcGxlbWVudHMsIFRyYWNFcnJvcgorZnJvbSB0cmFjLmVudiBpbXBvcnQgSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudAorZnJvbSB0cmFjLmRiIGltcG9ydCBUYWJsZSwgQ29sdW1uLCBJbmRleCwgRGF0YWJhc2VNYW5hZ2VyCitmcm9tIHRyYWMuY29uZmlnIGltcG9ydCBPcHRpb24KK2Zyb20gdHJhYy51dGlsLnRleHQgaW1wb3J0IGV4Y2VwdGlvbl90b191bmljb2RlCisKK2ltcG9ydCByZQorCit0a3RtZ3Jfc2NoZW1hID0gWworICAgIFRhYmxlKCdyZXYydGlja2V0Jywga2V5PSdyZXYnKVsgICAgICAgICAjIG1hcCByZXYtPnRpY2tldAorICAgICAgICBDb2x1bW4oJ3JldicsIHR5cGU9J2ludCcpLCAgICAgICAgICAjIGNoYW5nZXNldCBpZAorICAgICAgICBDb2x1bW4oJ3RpY2tldCcsIHR5cGU9J2ludCcpLCAgICAgICAjIHRpY2tldCAjCisgICAgICAgIEluZGV4KFsndGlja2V0J10pXSwgICAgICAgICAgICAgICAgICMgaW5kZXggYnkgdGlja2V0CitdCisKK2NsYXNzIFRpY2tldE1hbmFnZXIoQ29tcG9uZW50KToKKyAgICBpbXBsZW1lbnRzKElFbnZpcm9ubWVudFNldHVwUGFydGljaXBhbnQpCisjICAgIGltcGxlbWVudHMoSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudCwgSVJlcG9zaXRvcnlPYnNlcnZlcikKKworICAgIHRpY2tldF9wYXR0ZXJuID0gT3B0aW9uKCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnXnRpY2tldDooXGQrKScsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIkEgcmVnZXggbWF0Y2hpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcy4gR3JvdXAgMSBtdXN0IHJldHVybiBhIG51bWJlci4iIiIpCisgICAgCisgICAgZGVmIGljdV90a3RtZ3Ioc2VsZik6CisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIGtub3duX3lvdW5nZXN0ID0gLTEKKworICAgIGRlZiBlbnZpcm9ubWVudF9jcmVhdGVkKHNlbGYpOgorICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICBjb25uZWN0b3IsIF8gPSBEYXRhYmFzZU1hbmFnZXIoc2VsZi5lbnYpLl9nZXRfY29ubmVjdG9yKCkKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgZm9yIHRhYmxlIGluIHRrdG1ncl9zY2hlbWE6CisgICAgICAgICAgICBmb3Igc3RtdCBpbiBjb25uZWN0b3IudG9fc3FsKHRhYmxlKToKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZShzdG10KQorCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJJTlNFUlQgSU5UTyBzeXN0ZW0gKG5hbWUsdmFsdWUpICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoJ2ljdV90a3RtZ3InLCVzKSIsIChzZWxmLmljdV90a3RtZ3IoKSwpKQorICAgICAgICBkYi5jb21taXQoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCdEYXRhYmFzZSB1cGRhdGU6IGljdV90a3RtZ3IgdGFibGVzIHZlcnNpb24gJWQgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pY3VfdGt0bWdyKCkpCisgICAgICAgIHByaW50ICdpY3Vjb2RldG9vbHMudGlja2V0bWdyOiBOb3RlLCBmaXJzdCByZXZpZXcgd2lsbCB0YWtlIGEgd2hpbGUuXG4nCisgICAgCisgICAgZGVmIHlvdW5nZXN0X3JldihzZWxmLGRiKToKKyAgICAgICAgaWYgKHNlbGYua25vd25feW91bmdlc3QgPCAwKToKKyAgICAgICAgICAgICNwcmludCgnRGlkIG5vdCBrbm93IHlvdW5nZXN0IHZhbHVlLicpCisgICAgICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NIHN5c3RlbSBXSEVSRSBuYW1lPSdpY3VfdGt0bWdyX3lvdW5nZXN0JyIpCisgICAgICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgbm90IHJvdzoKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiSU5TRVJUIElOVE8gc3lzdGVtIChuYW1lLHZhbHVlKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoJ2ljdV90a3RtZ3JfeW91bmdlc3QnLCctMScpIikKKyAgICAgICAgICAgICAgICBkYi5jb21taXQoKQorICAgICAgICAgICAgICAgIHNlbGYua25vd25feW91bmdlc3QgPSAtMgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrbm93bl95b3VuZ2VzdCA9IGludChyb3dbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5rbm93bl95b3VuZ2VzdCA9IGtub3duX3lvdW5nZXN0CisgICAgICAgIHJldHVybiBzZWxmLmtub3duX3lvdW5nZXN0CisgICAgICAgIAorICAgIGRlZiBjaGVja19zeW5jKHNlbGYsIGxvZywgZGIsIHJlcG9zKToKKyAgICAgICAgb3VyWW91bmdlc3QgPSBzZWxmLnlvdW5nZXN0X3JldihkYikKKyAgICAgICAgdGhlaXJZb3VuZ2VzdCA9IHJlcG9zLmdldF95b3VuZ2VzdF9yZXYoKQorICAgICAgICAjbG9nLmluZm8oIlRLVDogY2hlY2tfc3luYyAlZC8lZCIgJSAob3VyWW91bmdlc3QsdGhlaXJZb3VuZ2VzdCkpCisgICAgICAgIGlmKG91cllvdW5nZXN0IDw9IHRoZWlyWW91bmdlc3QpOgorICAgICAgICAgICAgc2VsZi5yZXN5bmMobG9nLCBkYiwgcmVwb3MsIG91cllvdW5nZXN0LCB0aGVpcllvdW5nZXN0KQorICAgIAorICAgIGRlZiBlbnZpcm9ubWVudF9uZWVkc191cGdyYWRlKHNlbGYsIGRiKToKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NIHN5c3RlbSBXSEVSRSBuYW1lPSdpY3VfdGt0bWdyJyIpCisgICAgICAgIHJvdyA9IGN1cnNvci5mZXRjaG9uZSgpCisgICAgICAgIGlmIG5vdCByb3cgb3IgaW50KHJvd1swXSkgPCBzZWxmLmljdV90a3RtZ3IoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdXBncmFkZV9lbnZpcm9ubWVudChzZWxmLCBkYik6CisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSBzeXN0ZW0gV0hFUkUgbmFtZT0naWN1X3RrdG1nciciKQorICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQorICAgICAgICBpZiBub3Qgcm93OgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudF9jcmVhdGVkKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nLmluZm8oJ0RvIG5vdCBrbm93IGhvdyB0byB1cGdyYWRlIGljdXRyYXhjdG5fdGlja2V0bWdyIHRhYmxlcyB0byAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWN1X3RrdG1ncigpKQorCWN1cnNvci5jbG9zZSgpCisKKyAgICBkZWYgcmVzeW5jKHNlbGYsIGxvZywgZGIsIHJlcG9zLCBvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCk6CisgICAgICAgIHNlbGYubG9nLmluZm8oJ3Jlc3luYzogb3VyWW91bmdlc3Q9JWQgdGhlaXJZb3VuZ2VzdD0lZCcgJSAob3VyWW91bmdlc3QsIHRoZWlyWW91bmdlc3QpKQorICAgICAgICBpZiAob3VyWW91bmdlc3QgPCAwKToKKyAgICAgICAgICAgICMgc3RhcnQgYXQgcmV2IDEKKyAgICAgICAgICAgIG91cllvdW5nZXN0ID0gMQorICAgICAgICAKKyAgICAgICAgI3NlbGYudGlja2V0X3BhdHRlcm4gPSBzZWxmLmVudi5jb25maWcuZ2V0KCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnXmNsZHJidWcgKFxkKyk6JykKKworICAgICAgICAjICAgICAgICBsb2cuaW5mbygiUGF0OiAlcyIgJSAoc2VsZi50aWNrZXRfcGF0dGVybikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGlja2V0X21hdGNoID0gcmUuY29tcGlsZShzZWxmLnRpY2tldF9wYXR0ZXJuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmVudi5jb25maWcuZ2V0KCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnTm9uZUZvdW5kJykKKyAgICAgICAgICAgIHJhaXNlIFRyYWNFcnJvcignQ291bGQgbm90IGNvbXBpbGUgaWN1Y29kZXRvb2xzLnRpY2tldF9wYXR0ZXJuPS8lcy8gYnV0IC8lcy86ICVzJyAlIChzZWxmLnRpY2tldF9wYXR0ZXJuLCBmb3VuZCwgZXhjZXB0aW9uX3RvX3VuaWNvZGUoZSwgdHJhY2ViYWNrPVRydWUpKSkKKworIyAgICAgICAgc2VsZi50aWNrZXRfbWF0Y2ggPSByZS5jb21waWxlKHNlbGYudGlja2V0X3BhdHRlcm4uZ2V0KCkpCisjICAgICAgICBzZWxmLnRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUoJy4qJykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uob3VyWW91bmdlc3QsIHRoZWlyWW91bmdlc3QrMSk6CisgICAgICAgICAgICAjbG9nLndhcm5pbmcoJ3N5bmNpbmc6ICVkIFslZC8lZCsxXScsIGksIHRoZWlyWW91bmdlc3QpCisgICAgICAgICAgICBjc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChpKQorICAgICAgICAgICAgc2VsZi5yZXZpc2lvbl9jaGFuZ2VkKGxvZywgY3NldCwgaSwgZGIuY3Vyc29yKCkpCisgICAgICAgIGRiLmNvbW1pdCgpCisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpOworICAgICAgICBjdXJzb3IuZXhlY3V0ZSgidXBkYXRlIHN5c3RlbSBzZXQgdmFsdWU9JyVzJyB3aGVyZSBuYW1lPSdpY3VfdGt0bWdyX3lvdW5nZXN0JyIgJSAodGhlaXJZb3VuZ2VzdCkpCisgICAgICAgIGRiLmNvbW1pdCgpCisgICAgICAgICNsb2cud2Fybigic2VsZi5rbm93bl95b3VuZ2VzdCB3YXMgJWQgWyVkLyVkXSIgJSAoc2VsZi5rbm93bl95b3VuZ2VzdCxvdXJZb3VuZ2VzdCx0aGVpcllvdW5nZXN0KSkgCisgICAgICAgICMgdXBkYXRlIGtub3duIHlvdW5nZXN0LgorICAgICAgICBzZWxmLmtub3duX3lvdW5nZXN0ID0gdGhlaXJZb3VuZ2VzdAorICAgICAgICAjbG9nLndhcm4oInNlbGYua25vd25feW91bmdlc3Qgbm93ICVkIFslZC8lZF0iICUgKHNlbGYua25vd25feW91bmdlc3Qsb3VyWW91bmdlc3QsdGhlaXJZb3VuZ2VzdCkpIAorICAgICAgICByZXR1cm4KKworICAgICMgSVJlcG9zaXRvcnlPYnNlcnZlciBtZXRob2RzCisgICAgZGVmIHJldmlzaW9uX2NoYW5nZWQoc2VsZiwgbG9nLCBjc2V0LCBuZXh0X3lvdW5nZXN0LCBjdXJzb3IpOgorICAgICAgICAjIHN5bmMgdGhlICdyZXYydGlja2V0JyB0YWJsZQorICAgICAgICBtZXNzYWdlID0gY3NldC5tZXNzYWdlIG9yICctLScKKyAgICAgICAgIyBjYW4gd2UgbG9hZCBhIHRpY2tldCBmcm9tIGl0PyAgICJ0aWNrZXQ6MTIzNDogTWVzc2FnZSIKKyAgICAgICAgcmVzID0gc2VsZi50aWNrZXRfbWF0Y2gubWF0Y2gobWVzc2FnZSkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgdGlja25hbWUgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbnQocmVzLmdyb3VwKDEpKSAjIHNob3VsZCBiZSBpbnQKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoJ1JldmlzaW9uIFslc10gaGFkIHVucGFyc2VhYmxlIHRpY2tldCBudW1iZXIgWyVzXTogWyVzXScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRfeW91bmdlc3QsIHRpY2tuYW1lLCBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHRyeToKKwkJI2xvZy53YXJuaW5nKCdyJXM9IyVzJyAlIChzdHIobmV4dF95b3VuZ2VzdCksIHRpY2tuYW1lKSkKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIHJldjJ0aWNrZXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHJldix0aWNrZXQpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFMVUVTICglcywlcykgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG5leHRfeW91bmdlc3QpLCB0aWNrbmFtZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOiAjICphbm90aGVyKiAxLjEuIHJlc3luYyBhdHRlbXB0IHdvbiAKKyAgICAgICAgICAgICAgICBsb2cud2FybmluZygncmV2MnRpY2tldCAlcyBjb3VsZCBub3QgY2FjaGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dF95b3VuZ2VzdCwgZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoJ1JldmlzaW9uICVzIGhhZCB1bm1hdGNoZWQgbWVzc2FnZSAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRfeW91bmdlc3QsIGNzZXQubWVzc2FnZSkpCisgICAgCisgICAgZGVmIHJlcG9zaXRvcnlfcmVzeW5jKHNlbGYsIGN1cnNvcik6CisgICAgICAgIGN1cnNvci5leGVjdXRlKCJERUxFVEUgRlJPTSByZXYydGlja2V0Iik7CisgICAgICAgIAorICAgIGRlZiB0a3QycmV2cyhzZWxmLCBsb2csIGRiLCByZXBvcywgcmVxLCB0aWNrZXQpOgorICAgICAgICAiIiJHaXZlbiBhIHRpY2tldCwgcmV0dXJuIGEgbGlzdCBvZiByZXZzLgorICAgICAgICAiIiIKKyAgICAgICAgCisgICAgICAgIHNlbGYuY2hlY2tfc3luYyhsb2csIGRiLCByZXBvcykKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBydC5yZXYgZnJvbSByZXYydGlja2V0IGFzIHJ0IHdoZXJlIHJ0LnRpY2tldCA9ICVkIG9yZGVyIGJ5IHJ0LnJldiIgJSBpbnQodGlja2V0KSkKKyAgICAgICAgcmV2cyA9IFtdCisgICAgICAgIGZvciByZXYsIGluIGN1cnNvcjoKKyAgICAgICAgICAgIHJldiA9IGludChyZXYpCisgICAgICAgICAgICByZXZzLmFwcGVuZChyZXYpCisJY3Vyc29yLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHJldnMKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RrdGxpc3QucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90a3RsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZGU0OTYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90a3RsaXN0LnB5CkBAIC0wLDAgKzEsMTcxIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK2ltcG9ydCByZQorCitpbXBvcnQgc3lzCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCAqCitmcm9tIHRyYWMudXRpbCBpbXBvcnQgTWFya3VwCitmcm9tIHRyYWMud2ViIGltcG9ydCBJUmVxdWVzdEhhbmRsZXIKK2Zyb20gdHJhYy53ZWIuY2hyb21lIGltcG9ydCBhZGRfc3R5bGVzaGVldCwgSU5hdmlnYXRpb25Db250cmlidXRvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZW1wbGF0ZVByb3ZpZGVyCitmcm9tIHRyYWMud2ViLmhyZWYgaW1wb3J0IEhyZWYKKyNmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wud2ViX3VpLmNoYW5nZXNldCBpbXBvcnQgSUNoYW5nZXNldFJhbmdlTGluaworZnJvbSB0cmFjLndpa2kgaW1wb3J0IHdpa2lfdG9faHRtbCwgd2lraV90b19vbmVsaW5lciwgSVdpa2lTeW50YXhQcm92aWRlciwgXAorICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlcgorZnJvbSB0cmFjLnRpY2tldCBpbXBvcnQgVGlja2V0CisKKworCitjbGFzcyBUaWNrZXRsaXN0TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcikKKyMgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIsSUNoYW5nZXNldFJhbmdlTGluaykKKworICAgIGRlZiByZXZpc2lvbl9yYW5nZV9saW5rKHNlbGYsIHJlcSwgYmFzZSwgc3RhcnQsIGVuZCk6CisgICAgICAgIHJldHVybiAoJ1RpY2tldCBMaXN0JywgcmVxLmhyZWYoJ3RrdGxpc3QnLG9sZF9wYXRoPWJhc2UsbmV3X3BhdGg9YmFzZSxvbGQ9c3RhcnQsbmV3PWVuZCkpCisKKyAgICBfcmVxdWVzdF9yZSA9IHJlLmNvbXBpbGUociIvdGt0bGlzdCg/Oi8oW14vXSspKT8oLy4qKT8kIikKKworICAgIGRlZiBtYXRjaF9yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5fcmVxdWVzdF9yZSwgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICAjb2ssIHdoYXQgYXJlIHdlIGFib3V0LgorICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICB0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICByZXZsaXN0ID0ge30gIyBkaWN0IG9mIHJldmlzaW9uLT4KKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeShyZXEuYXV0aG5hbWUpCisKKyAgICAgICAgaWYgbm90IHJlcS5wZXJtLmhhc19wZXJtaXNzaW9uKCdUSUNLRVRfTU9ESUZZJyk6CisgICAgICAgICAgICByZXR1cm4gcmVxLnJlZGlyZWN0KHJlcS5ocmVmLmJyb3dzZXIoKSkKKworICAgICAgICAjIHNob3J0Y3V0IC0gaWYgInJldnMiIGlzIHNldCwganVzdCB1c2UgdGhhdAorICAgICAgICByZXZzID0gcmVxLmFyZ3MuZ2V0KCdyZXZzJykKKyAgICAgICAgaWYgcmV2cyBhbmQgbGVuKHJldnMpPjA6CisgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICJ0ZXh0L2h0bWwiCisgICAgICAgICAgIGFkZF9zdHlsZXNoZWV0KHJlcSwgJ2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgICAgcmVxLmhkZlsndGl4LnJldnMnXSA9IHJldnMKKyAgICAgICAgICAgaXRlbXMgPSByZXZzLnNwbGl0KCkKKyAgICAgICAgICAgb3V0c3RyID0gJzE9MCAnCisgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgcmV2ID0gaW50KGl0ZW0pICMgbWF5IGZhaWwKKyAgICAgICAgICAgICAgIG91dHN0ciA9ICdydC5yZXY9JWQnJShyZXYpCisgICAgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXSA9IG91dHN0ciAgCisgICAgICAgICAgICMgdGVzdCAtIGdldCByZWxldmFudCByZXZzCisgICAjICAgICAgICBwcmludCAib3RpbWU9JXMsIG50aW1lPSVzIiUodHlwZShvdGltZSksdHlwZShudGltZSkpCisgICAgICAgICAgICNjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IGRpc3RpbmN0IHQuaWQsdC5zdW1tYXJ5IGZyb20gdGlja2V0IGFzIHQscmV2aXNpb24gYXMgciwgcmV2MnRpY2tldCBhcyBydCAiCisgICAgICAgICAgICMgICAgICAgICAgICAgICAiIHdoZXJlIHQuaWQgPSBydC50aWNrZXQgYW5kICglcykgb3JkZXIgYnkgdC5pZCIlKG91dHN0cikpCisgICAgICAgICAgIGFsbHNxbCA9ICJzZWxlY3QgZGlzdGluY3QgdGlja2V0IGZyb20gcmV2MnRpY2tldCBhcyBydCB3aGVyZSAlcyBvcmRlciBieSBydC50aWNrZXQiJShvdXRzdHIpCisgICAgICAgICAgIGFsbHNxbCA9ICJzZWxlY3QgdGlja2V0IGZyb20gcmV2MnRpY2tldCB3aGVyZSByZXY9JXMgb3JkZXIgYnkgdGlja2V0IgorICAgICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICAgICMgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCB0aWNrZXQgZnJvbSByZXYydGlja2V0IHdoZXJlIHJldj0lcyBvcmRlciBieSB0aWNrZXQiLCgiMjI5MTMiLCkpCisgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJzZWxlY3QgcnQucmV2IGZyb20gcmV2MnRpY2tldCBhcyBydCB3aGVyZSBydC50aWNrZXQgPSAlZCBvcmRlciBieSBydC5yZXYiICUgaW50KDYwMTApKQorICAgICAgICAgICB0aWNrZXQgPSAwCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXSA9IGFsbHNxbCAgCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXT0iemVybyIKKyAgICAgICAgICAgZm9yIHRrdCBpbiBjdXJzb3I6CisgICAgICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ109dGt0CisgICAgICAgICAgICAgICBzdW1tID0gIiI7CisgICAgICAgICAgICAgICAjc3lzLnN0ZGVyci53cml0ZSgiIHRrdCAlcyBzdW1tICVzIGZyb20gKGQtZCkiICUgKHRrdCxzdW1tKSkKKyAgICAgICAgICAgICAgIHRpY2tldCA9IHRpY2tldCArIDEKKyAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9IHN1bW0KKyAgICAgICAgICAgICAgICAgICAjcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggc3VtbSwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPVRydWUgKQorICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXT1lCisgICAgICAgICAgICAgICAgICAgI3JlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRrdAorICAgICAgICAgICAgICAgI2FhID0gTWFya3VwKCI8YSBjbGFzcz1cIm5ldyB0aWNrZXRcIiBocmVmPVwiJXNcIiB0aXRsZT1cIlRpY2tldCB4IChuZXcpXCI+IyVzPC9hPiIlKHJlcS5ocmVmLnRpY2tldCh0a3QpLHRrdCkpCisgICAgICAgICAgICAgICAjcmVxLmhkZlsndGlja2V0cy4lZC5odG1sJyAlIHRpY2tldF0gPSBhYQorICAgICAgICAgICAjIHNldCBSREYgaGVyZQorICAgICAgICAgICByZXR1cm4gJ3RrdHJldnMuY3MnLCBjb250ZW50X3R5cGUKKworICAgICAgICBuZXdfcGF0aCA9IHJlcS5hcmdzLmdldCgnbmV3X3BhdGgnKQorICAgICAgICBuZXdfcmV2ID0gcmVxLmFyZ3MuZ2V0KCduZXcnKQorICAgICAgICBvbGRfcGF0aCA9IHJlcS5hcmdzLmdldCgnb2xkX3BhdGgnKQorICAgICAgICBvbGRfcmV2ID0gcmVxLmFyZ3MuZ2V0KCdvbGQnKQorCisgICAgICAgIG5ld19wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgobmV3X3BhdGgpCisgICAgICAgIG5ld19yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG5ld19yZXYpCisgICAgICAgIG9sZF9wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgob2xkX3BhdGgpCisgICAgICAgIG9sZF9yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG9sZF9yZXYpCisKKworICAgICAgICBvbGRfcmV2ID0gaW50KG9sZF9yZXYpCisgICAgICAgIG5ld19yZXYgPSBpbnQobmV3X3JldikKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5kaWZmX2hyZWYnXSA9IHJlcS5ocmVmKCdjaGFuZ2VzZXQnLG9sZF9wYXRoPW9sZF9wYXRoLG5ldz1uZXdfcmV2LG5ld19wYXRoPW5ld19wYXRoLG9sZD1vbGRfcmV2KQorCisgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3JldiddID0gb2xkX3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3JldiddID0gbmV3X3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3BhdGgnXSA9IG9sZF9wYXRoCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcGF0aCddID0gbmV3X3BhdGgKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAjIGZpcnN0LCBnZXQgcmVsZXZhbnQgY2hhbmdlcy4KKyAgICAgICAgcmVxLmhkZlsndGFyZ2V0X3BhdGgnXSA9ICcuJzsKKyAgICAgICAgIyBva2F5LiBtYW51YWxseSB0cm9tcCB0aHJvdWdoICdlbQorICAgICAgICBvc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChvbGRfcmV2KTsKKyAgICAgICAgbnNldCA9IHJlcG9zLmdldF9jaGFuZ2VzZXQobmV3X3Jldik7CisgICAgICAgIG90aW1lID0gaW50KG9zZXQuZGF0ZSkKKyAgICAgICAgbnRpbWUgPSBpbnQobnNldC5kYXRlKQorICAgICAgICAKKyAgICAgICAgbm9ybV90cj0ic3R5bGU9J2JvcmRlcjogMXB4IGRhc2hlZCBncmVlbjsgYmFja2dyb3VuZC1jb2xvcjogI0NGQzsnIgorICAgICAgICBjbG9zZWRfdHI9InN0eWxlPSdjb2xvcjogIzY2NjsnIgorICAgICAgICBub3Jldl90cj0ic3R5bGU9J2JhY2tncm91bmQtY29sb3I6I0ZERDsgYm9yZGVyOiAxcHggc29saWQgI0Y5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7JyIKKworICAgICAgICByZXEuaGRmWydzYW1wbGUubm9ybS50ciddID0gbm9ybV90cgorICAgICAgICByZXEuaGRmWydzYW1wbGUuY2xvc2VkLnRyJ10gPSBjbG9zZWRfdHIKKyAgICAgICAgcmVxLmhkZlsnc2FtcGxlLm5vcmV2LnRyJ10gPSBub3Jldl90cgorICAgICAgICAKKyMgICAgICAgIHByaW50ICIgc2VhcmNoaW5nIGluICAoJXMtJXMpIiAlIChvdGltZSwgbnRpbWUpCisKKyAgICAgICAgIyB0ZXN0IC0gZ2V0IHJlbGV2YW50IHJldnMKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyMgICAgICAgIHByaW50ICJvdGltZT0lcywgbnRpbWU9JXMiJSh0eXBlKG90aW1lKSx0eXBlKG50aW1lKSkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBkaXN0aW5jdCB0LmlkLHQuc3VtbWFyeSx0Lm93bmVyLCB0Lm1pbGVzdG9uZSwgdC5zdGF0dXMgIgorICAgICAgICAgICAgICAgICAgICAgICAiICwgYy52YWx1ZSAiICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIiBmcm9tIHRpY2tldCBhcyB0LHJldmlzaW9uIGFzIHIsIHJldjJ0aWNrZXQgYXMgcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAiIGxlZnQgam9pbiB0aWNrZXRfY3VzdG9tIGFzIGMgIgorICAgICAgICAgICAgICAgICAgICAgICAiIG9uICAoIGMubmFtZSA9ICdyZXZ3JyBBTkQgYy50aWNrZXQgPSB0LmlkICkgIgorIyAgICAgICAgICAgICAgICAgICAgICAgIiAsIHRpY2tldF9jdXN0b20gYXMgYyAiCisgICAgICAgICAgICAgICAgICAgICAgICIgd2hlcmUgdC5pZCA9IHJ0LnRpY2tldCBhbmQgcnQucmV2ID0gci5yZXYgYW5kIHIudGltZSA+ICVzIGFuZCByLnRpbWUgPD0gJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGV4aXN0cyAoIHNlbGVjdCBuYy5yZXYgZnJvbSBub2RlX2NoYW5nZSBhcyBuYyB3aGVyZSBuYy5yZXY9ci5yZXYgYW5kIG5jLnBhdGggbGlrZSAlcyApICIKKyAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIGJ5IHQuaWQiLCAoc3RyKG90aW1lKSwgc3RyKG50aW1lKSwgKG9sZF9wYXRoICsgIiUiKSkpCisgICAgICAgIHRpY2tldCA9IDAKKyAgICAgICAgZm9yIHRrdCxzdW1tLG93bnIsbWlsZXN0b25lLHN0YXR1cywgcmV2dyBpbiBjdXJzb3I6CisjICAgICAgICAgICAgcHJpbnQgIiB0a3QgJXMgc3VtbSAlcyBmcm9tICglZC0lZCkiICUgKHRrdCxzdW1tLCBvdGltZSwgbnRpbWUpCisgICAgICAgICAgICB0aWNrZXQgPSB0aWNrZXQgKyAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSBzdW1tCisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggc3VtbSwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPVRydWUgKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRrdAorICAgICAgICAgICAgYWEgPSBNYXJrdXAoIjxhIGNsYXNzPVwibmV3IHRpY2tldFwiIGhyZWY9XCIlc1wiIHRpdGxlPVwiVGlja2V0IHggKG5ldylcIj4jJXM8L2E+IiUocmVxLmhyZWYudGlja2V0KHRrdCksdGt0KSkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuaHRtbCcgJSB0aWNrZXRdID0gYWEKKyAgICAgICAgICAgIGFhID0gTWFya3VwKCI8YSBjbGFzcz1cIm5ldyB0aWNrZXRcIiBocmVmPVwiJXNcIiB0aXRsZT1cIlRpY2tldCB4IChuZXcpXCI+IyVzPC9hPiIlKHJlcS5ocmVmLnRpY2tldCh0a3QpLHRrdCkpCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm93bmVyJyAlIHRpY2tldF0gPSBvd25yCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm1pbGVzdG9uZScgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggIm1pbGVzdG9uZTolcyIlbWlsZXN0b25lICwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPUZhbHNlICkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQucmV2aWV3ZXInICUgdGlja2V0XSA9IHJldncKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuc3RhdHVzaHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggIiMlcyIlKHRrdCksIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1GYWxzZSApCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmh0bWwnICUgdGlja2V0XSA9IGFhCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBub3JtX3RyCisgICAgICAgICAgICBpZiBzdGF0dXMgYW5kIHN0YXR1cy5zdGFydHN3aXRoKCdjbG9zZWQnKToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBjbG9zZWRfdHIKKyAgICAgICAgICAgIGlmICggbm90IHJldncgKSBvciBsZW4ocmV2dyk8MToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBub3Jldl90cgorICAgICAgICAKKyAgICAgICAgcmV0dXJuICd0a3RsaXN0LmNzJywgY29udGVudF90eXBlCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvbGljZW5zZS5odG1sIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlMDI1MgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzxodG1sPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj48L21ldGE+Cis8dGl0bGU+SUNVIExpY2Vuc2UgLSBJQ1UgMS44LjEgYW5kIGxhdGVyPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgQkdDT0xPUj0iI2ZmZmZmZiI+Cis8aDI+SUNVIExpY2Vuc2UgLSBJQ1UgMS44LjEgYW5kIGxhdGVyPC9oMj4KKworPHA+Q09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRTwvcD4KKworPHA+CitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxMCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKzwvcD4KKzxwPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzwvcD4KKzxwPgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucwordG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCis8L3A+Cis8cD4KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIAorSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4gTk8gRVZFTlQgU0hBTEwKK1RIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKK1JFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1VTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorPC9wPgorPHA+CitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4KK3RoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCis8L3A+CisKKzxocj4KKzxwPjxzbWFsbD4KK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL3JlYWRtZS50eHQgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0OWQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvcmVhZG1lLnR4dApAQCAtMCwwICsxLDc0IEBACitJQ1UgQ29kZSBUb29scyBwbHVnaW4KKworQ29weXJpZ2h0IChDKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorU2VlIGxpY2Vuc2UuaHRtbCBmb3IgdGhlIGxpY2Vuc2UgZmlsZS4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlCitJQ1UgcHJvamVjdCBhbmQgaXMgdW5kZXIgdGhlIHNhbWUgbGljZW5zZS4KKworUmVxdWlyZW1lbnRzOgorCVRyYWMgKDAuMTEgb3IgMC4xMis/KQorCVJlcG9zaXRvcnkKKworSW5zdGFsbGluZzoKKwkxLiBpbnN0YWxsIHRoZSBwbHVnaW4gLSBhdCBsZWFzdCB0aGUgdGlja2V0bWFuYWdlciBhbmQgcmV2aWV3IHBvcnRpb24uCisKKyAgICAgICAgIGEuIFRoZXJlIGlzIG5vIHNvdXJjZSByZWxlYXNlIGF0IHRoaXMgdGltZTogSSByZWNvbW1lbmQKKyAgICAgICAgICAgICB0aGF0IHlvdSBjaGVjayBvdXQgdGhpcyBjb2RlIHdpdGggc3ZuCisgICAgICAgICAgICAgYW5kIGluIHRoaXMgZGlyZWN0b3J5LCBydW46IAorICAgICAgICAgICAgICAgICJweXRob24gc2V0dXAucHkgZGV2ZWxvcCIKKwkKKwkgYi4gSW4gdHJhYy5pbmkgdW5kZXIgJ1tjb21wb25lbnRzXScgYWRkOgorCQlpY3Vjb2RldG9vbHMucmV2aWV3LnJldmlld21vZHVsZSA9IGVuYWJsZWQKKwkJaWN1Y29kZXRvb2xzLnRpY2tldG1nci50aWNrZXRtYW5hZ2VyID0gZW5hYmxlZAorCQorCU5PVEU6IERDVVQgYW5kIFRLVExJU1QgcGFydHMgYXJlIG5vdCB3b3JraW5nIHlldC4gCisJRG9uJ3QgYm90aGVyIHRvIGVuYWJsZSB0aGVtLgorCisJMi4gaW4geW91ciB0cmFjLmluaSBkZXNjcmliZSBob3cgeW91ciBjaGFuZ2VzZXRzIGRlc2NyaWJlIGEgdGlja2V0LiAKKwlPdXIgY2hhbmdlc2V0cyBsb29rIGxpa2UgdGhpczogICJ0aWNrZXQ6MTIzNDogZml4ZWQgdGhlIGJyb2tlbiBjb2RlIgorCVdlIHVzZSB0aGlzIHJlZ2V4OgorCisJICAgW2ljdWNvZGV0b29sc10KKwkgICB0aWNrZXRfcGF0dGVybiA9IF50aWNrZXQ6KFxkKykKKworCTMuIHlvdSBtYXkgbmVlZCB0byBydW4gdHJhYy1hZG1pbiA8ZW52aXJvbm1lbnQ+IHVwZ3JhZGUgCisKKwk0LiBHcmFudCBwZXJtaXNzaW9uIG9mIElDVVJFVklFV19WSUVXIHRvIHdob21ldmVyIHlvdSB3YW50IHRvIAorCSAgIGJlIGFibGUgdG8gcmV2aWV3IHRpY2tldHMuIAorCisJNS4gTm93LCBhbnkgdGlja2V0IHdpbGwgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHRvcCByaWdodCBjb3JuZXIgd2hpY2ggc2F5czoKKwkgICAgICJObyBjb21taXRzIiAtIG5vIGNvbW1pdHMgYWdhaW5zdCB0aGlzIHRpY2tldAorCisJICAgICAiUmV2aWV3IDEgY29tbWl0cyIgIC0gdGhlcmUgaXMgb25seSBvbmUgY29tbWl0LiBDbGlja2luZyB0aGlzIGxpbmsKKwkgICAgICAgICAgICAgd2lsbCBqdXN0IHRha2UgeW91IHRvIHRoYXQgc2luZ2xlIGNoYW5nZXNldC4KKworCSAgICAgICJSZXZpZXcgbiBjb21taXRzIiAgLSB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBjb21taXRzIGFnYWluc3QgdGhpcworCSAgICAgICAgICAgICB0aWNrZXQuCisKKyAKK1Ryb3VibGVzaG9vdGluZzoKKworUTogTXkgY29tbWl0cyBhcmVuJ3QgYmVpbmcgZm91bmQhCitBOiBDaGVjayB0aGUgZGVidWcgbG9nLiBJdCB3aWxsIG5vdGUgY29tbWl0cyB3aXRoIHVucGFyc2VhYmxlIG1lc3NhZ2VzCisKK1E6IEhvdyBkbyBJIHJlc3luYyB0aGUgY29tbWl0cz8KK0E6IFVudGlsIHdlIGltcGxlbWVudCB0cmFjIDAuMTIgY2hhbmdlc2V0IGxpc3RlbmVycywgeW91IGNhbiBkbyB0aGlzOgorCisgICAgMC4gIGJhY2sgdXAgeW91ciBwYXRoL3RvL2Vudi9kYi90cmFjLmRiCisKKyAgICAxLiAkIHNxbGl0ZTMgIHBhdGgvdG8vZW52L2RiL3RyYWMuZGIKKyAgICAKKyAgICAyLiBzcWxpdGU+IGRlbGV0ZSBmcm9tIHJldjJ0aWNrZXQ7CisKKyAgICAzLiBzcWxpdGU+IHVwZGF0ZSBzeXN0ZW0gc2V0IHZhbHVlPSctMScgd2hlcmUgbmFtZT0naWN1X3RrdG1ncl95b3VuZ2VzdCc7CisKKyAgICA0LiBzcWxpdGU+ICAucXVpdAorCitOb3cgdGhlIHRpY2tldCBtYW5hZ2VyIHdpbGwgcmUtc3luYyB0aGUgZmlyc3QgdGltZSB5b3UgaGl0IGEgdGlja2V0LgorCitGSUxJTkcgQlVHUy9GRUFUVVJFIFJFUVVFU1RTOgorIC0gVXNlIElDVSdzIHRyYWMgcmVwb3NpdG9yeSBhdCBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYworIC0gVXNlIHRoZSAnaW5mcmFzdHJ1Y3R1cmUnIGNvbXBvbmVudCBhbmQgY2xlYXJseSBpZGVudGlmeSB0aGUgJ0lDVSBDb2RlIFRvb2xzCisgICBmb3IgVHJhYycgd2hlbiB5b3UgZmlsZSB0aGUgYnVnLgorCisKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5jZmcgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjIzZjJiCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5jZmcKQEAgLTAsMCArMSw0IEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitbZWdnX2luZm9dCit0YWdfYnVpbGQgPSBkZXYKK3RhZ19zdm5fcmV2aXNpb24gPSB0cnVlCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGJkZDAzCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5weQpAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworCitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzCisKK1BBQ0tBR0UgPSAnSWN1Q29kZVRvb2xzJworVkVSU0lPTiA9ICcwLjAuMScKKworc2V0dXAoCisgICAgbmFtZT1QQUNLQUdFLCB2ZXJzaW9uPVZFUlNJT04sCisgICAgZGVzY3JpcHRpb249J01pc2NlbGxhbmVvdXMgSUNVIEV4dGVuc2lvbnMgdG8gVHJhYycsCisgICAgYXV0aG9yPSJTdGV2ZW4gUi4gTG9vbWlzIiwgYXV0aG9yX2VtYWlsPSJzcmxAaWN1LXByb2plY3Qub3JnIiwKKyAgICBsaWNlbnNlPSdCU0QnLCB1cmw9J2h0dHA6Ly9pY3UtcHJvamVjdC5vcmcnLAorICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1bJ2V6X3NldHVwJywgJyoudGVzdHMqJ10pLAorICAgIHBhY2thZ2VfZGF0YT17CisgICAgICAgICdpY3Vjb2RldG9vbHMnOiBbCisgICAgICAgICAgICAnaHRkb2NzL2Nzcy8qLmNzcycsCisgICAgICAgICAgICAndGVtcGxhdGVzLyouaHRtbCcsCisjIyAgICAgICAgICAgICdodGRvY3MvaW1nLyoucG5nJywKKyAgICAgICAgICAgJ2h0ZG9jcy9qcy8qLmpzJywKKyAgICAgICAgXQorICAgIH0sCisgICAgZW50cnlfcG9pbnRzID0geworICAgICAgICAndHJhYy5wbHVnaW5zJzogWworICAgICAgICAgICAgJ2ljdWNvZGV0b29scy50aWNrZXRtZ3IgPSBpY3Vjb2RldG9vbHMudGlja2V0bWdyJywKKyAgICAgICAgICAgICdpY3Vjb2RldG9vbHMucmV2aWV3ID0gaWN1Y29kZXRvb2xzLnJldmlldycsCisgICAgICAgICAgICAnaWN1Y29kZXRvb2xzLnRrdGxpc3QgPSBpY3Vjb2RldG9vbHMudGt0bGlzdCcsCisgICAgICAgICAgICAnaWN1Y29kZXRvb2xzLmRjdXQgPSBpY3Vjb2RldG9vbHMuZGN1dCcKKyAgICAgICAgXQorICAgIH0KKykKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL19faW5pdF9fLnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODJkNjc1NgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMKKyNmcm9tIGljdXRyYWN4dG4ud2ViX3VpIGltcG9ydCAqCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9kY3V0LnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvZGN1dC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjc0ODZmCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvZGN1dC5weQpAQCAtMCwwICsxLDE1MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitpbXBvcnQgcmUKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0ICoKK2Zyb20gdHJhYy51dGlsIGltcG9ydCBNYXJrdXAKK2Zyb20gdHJhYy53ZWIgaW1wb3J0IElSZXF1ZXN0SGFuZGxlcgorZnJvbSB0cmFjLndlYi5jaHJvbWUgaW1wb3J0IGFkZF9zdHlsZXNoZWV0LCBJTmF2aWdhdGlvbkNvbnRyaWJ1dG9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRlbXBsYXRlUHJvdmlkZXIKK2Zyb20gdHJhYy53ZWIuaHJlZiBpbXBvcnQgSHJlZgorI2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC53ZWJfdWkuY2hhbmdlc2V0IGltcG9ydCBJQ2hhbmdlc2V0UmFuZ2VMaW5rCitmcm9tIHRyYWMud2lraSBpbXBvcnQgd2lraV90b19odG1sLCB3aWtpX3RvX29uZWxpbmVyLCBJV2lraVN5bnRheFByb3ZpZGVyLCBcCisgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVyCisKKworY2xhc3MgRGN1dE1vZHVsZShDb21wb25lbnQpOgorCisgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIpCisjICAgIGltcGxlbWVudHMoSVJlcXVlc3RIYW5kbGVyLElDaGFuZ2VzZXRSYW5nZUxpbmspCisKKyAgICBkZWYgcmV2aXNpb25fcmFuZ2VfbGluayhzZWxmLCByZXEsIGJhc2UsIHN0YXJ0LCBlbmQpOgorICAgICAgICByZXR1cm4gKCdEQ1VUIEhlbHBlcicsIHJlcS5ocmVmKCdkY3V0JyxvbGRfcGF0aD1iYXNlLG5ld19wYXRoPWJhc2Usb2xkPXN0YXJ0LG5ldz1lbmQpKQorCisgICAgX3JlcXVlc3RfcmUgPSByZS5jb21waWxlKHIiL2RjdXQoPzovKFteL10rKSk/KC8uKik/JCIpCisKKyAgICBkZWYgbWF0Y2hfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHNlbGYuX3JlcXVlc3RfcmUsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxKToKKworICAgICAgICBpZHggPSAwCisgICAgICAgICMgc3JsCisjICAgICAgICBzaG93X2ZpbGVzID0gc2VsZi50aW1lbGluZV9zaG93X2ZpbGVzCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHRpY2tldGxpc3QgPSB7fSAgIyBkaWN0IG9mIHRpY2tldC0+Pz8/CisgICAgICAgIHJldmxpc3QgPSB7fSAjIGRpY3Qgb2YgcmV2aXNpb24tPgorICAgICAgICAjIHdlbGwuIGNoZWNrIGl0IGFnYWluLC4KKyAgICAgICAgICAgIAorICAgICAgICBzcmxkZWJ1Zz1GYWxzZQorICAgICAgICAKKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeShyZXEuYXV0aG5hbWUpCisgICAgICAgIAorICAgICAgICBuZXdfcGF0aCA9IHJlcS5hcmdzLmdldCgnbmV3X3BhdGgnKQorICAgICAgICBuZXdfcmV2ID0gcmVxLmFyZ3MuZ2V0KCduZXcnKQorICAgICAgICBvbGRfcGF0aCA9IHJlcS5hcmdzLmdldCgnb2xkX3BhdGgnKQorICAgICAgICBvbGRfcmV2ID0gcmVxLmFyZ3MuZ2V0KCdvbGQnKQorCisgICAgICAgIG5ld19wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgobmV3X3BhdGgpCisgICAgICAgIG5ld19yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG5ld19yZXYpCisgICAgICAgIG9sZF9wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgob2xkX3BhdGgpCisgICAgICAgIG9sZF9yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG9sZF9yZXYpCisKKyAgICAgICAgb2xkX3JldiA9IGludChvbGRfcmV2KQorICAgICAgICBuZXdfcmV2ID0gaW50KG5ld19yZXYpCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQuZGlmZl9ocmVmJ10gPSByZXEuaHJlZignY2hhbmdlc2V0JyxvbGRfcGF0aD1vbGRfcGF0aCxuZXc9bmV3X3JldixuZXdfcGF0aD1uZXdfcGF0aCxvbGQ9b2xkX3JldikKKworICAgICAgICByZXEuaGRmWydpc19kY3V0J109MQorICAgICAgICAKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm9sZF9yZXYnXSA9IG9sZF9yZXYKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm5ld19yZXYnXSA9IG5ld19yZXYKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm9sZF9wYXRoJ10gPSBvbGRfcGF0aAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3BhdGgnXSA9IG5ld19wYXRoCisKKyAgICAgICAgaWYgVHJ1ZToKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RhcmdldF9wYXRoJ10gPSAnLic7CisgICAgICAgICAgICAjIG9rYXkuIG1hbnVhbGx5IHRyb21wIHRocm91Z2ggJ2VtCisgICAgICAgICAgICBucmV2ID0gb2xkX3JldisxCisgICAgICAgICAgICB3aGlsZSBucmV2IDw9IG5ld19yZXY6CisgICAgICAgICAgICAgICAgY2hnc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChucmV2KQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBjaGdzZXQubWVzc2FnZSBvciAnLS0nCisgICAgICAgICAgICAgICAgIyBjYW4gd2UgbG9hZCBhIHRpY2tldCBmcm9tIGl0PworICAgICAgICAgICAgICAgIHNwbGl0cz1tZXNzYWdlLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlLnN0YXJ0c3dpdGgoJ3RpY2tldDonKSBhbmQgbGVuKHNwbGl0cyk+MjoKKyAgICAgICAgICAgICAgICAgICAgdGlja25hbWU9c3BsaXRzWzFdCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tudW09aW50KHRpY2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICAgICAgICAgICAgICBucmV2ID0gbnJldisxCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAjIHllcywgd2UgaGF2ZSBhIHRpY2tldCAjCisgICAgICAgICAgICAgICAgICAgIGZpbGVzPVtdCisgICAgICAgICAgICAgICAgICAgIGZvciBjaGcgaW4gY2hnc2V0LmdldF9jaGFuZ2VzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hnWzBdLnN0YXJ0c3dpdGgob2xkX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZmlsZXMpPT0wOgorICAgICAgICAgICAgICAgICAgICAgICAgbnJldiA9IG5yZXYrMQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgIyBubyByZWxldmFudCBmaWxlcworICAgICAgICAgICAgICAgICAgICB0aXRlbT0odGlja251bSxmaWxlcyxjaGdzZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIHRpY2tudW0gaW4gdGlja2V0bGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldGxpc3RbdGlja251bV0uYXBwZW5kKCB0aXRlbSApCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRsaXN0W3RpY2tudW1dPVsgdGl0ZW0gXQorICAgICAgICAgICAgICAgICAgICByZXZsaXN0W25yZXZdPXRpdGVtCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIm1hbGZvcm1lZCB0aWNrZXQ/ICVzIGF0ICVkIiAlIChtZXNzYWdlLG5yZXYpICMgZG9uJ3Qga25vdyB0aGUgc3ludGF4IGZvciBkaWUuLgorICAgICAgICAgICAgICAgIG5yZXYgPSBucmV2KzEKKyAgICAgICAgICAgIGlmIGxlbih0aWNrZXRsaXN0KToKKyAgICAgICAgICAgICAgICB0aWNrZXRzPXRpY2tldGxpc3Qua2V5cygpCisgICAgICAgICAgICAgICAgdGlja2V0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGlja2V0IGluIHRpY2tldHM6CisgICAgICAgICAgICAgICAgICAgIGF0aWNrZXQ9dGlja2V0bGlzdFt0aWNrZXRdICAjICh0aWNrZXQsZmlsZXMsY2hnKQorICAgICAgICAgICAgICAgICAgICBjbXQgPSAndGlja2V0OiVkIC0gJWQgcmV2czogJyAlICh0aWNrZXQsbGVuKGF0aWNrZXQpKQorICAgICAgICAgICAgICAgICAgICBmb3IgcmV2IGluIGF0aWNrZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXZuID0gcmV2WzJdLnJldgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWNvdW50ID0gbGVuKHJldlsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICdyJWQgLSAlZCBmaWxlcyAoJyAlIChyZXZuLGZpbGVjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHJldlsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyBmaWxlWzBdICsgJyAnCisgICAgICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyAnKSAnCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lcihjbXQsIHNlbGYuZW52LCBkYiwgIHNob3J0ZW49RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQubnVtYmVyJyAlIHRpY2tldF0gPSB0aWNrZXQKKyAgICAgICAgICAgIGlmIGxlbihyZXZsaXN0KToKKyAgICAgICAgICAgICAgICByZXZzPXJldmxpc3Qua2V5cygpCisgICAgICAgICAgICAgICAgcmV2cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgcmV2IGluIHJldnM6CisgICAgICAgICAgICAgICAgICAgIGFyZXY9cmV2bGlzdFtyZXZdICAjICh0aWNrZXQsZmlsZXMsY2hnKQorICAgICAgICAgICAgICAgICAgICBjbXQgPSAnciVkIHRpY2tldDolZCAnICUgKGFyZXZbMl0ucmV2LGFyZXZbMF0pCisgICAgICAgICAgICAgICAgICAgIGZpbGVjb3VudCA9IGxlbihhcmV2WzFdKQorICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyAnIC0gJWQgZmlsZXMgKCcgJSBmaWxlY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRmaWxlcz0nJworICAgICAgICAgICAgICAgICAgICBqID0gMAorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBhcmV2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5maWxlcy4lZC5wYXRoJyAlIChyZXYsaildID0gZmlsZVswXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5maWxlcy4lZC5raW5kJyAlIChyZXYsaildID0gZmlsZVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5maWxlcy4lZC5jaGFuZ2UnICUgKHJldixqKV0gPSBmaWxlWzJdCisgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydHBhdGg9ZmlsZVswXVtsZW4ob2xkX3BhdGgpKzE6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5maWxlcy4lZC5zaG9ydHBhdGgnICUgKHJldixqKV0gPSBzaG9ydHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArIGZpbGVbMF0gKyAnICcKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ZmlsZXMgPSBzaG9ydGZpbGVzICsgJyAnICsgc2hvcnRwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICBqPWorMQorICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyAnKSAnCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuY29tbWVudCcgJSByZXZdID0gd2lraV90b19vbmVsaW5lcihjbXQsIHNlbGYuZW52LCBkYiwgIHNob3J0ZW49RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQubnVtYmVyJyAlIHJldl0gPSByZXYKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5zaG9ydGZpbGVzJyAlIHJldl0gPSBzaG9ydGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuYmFja251bWJlcicgJSByZXZdID0gKHJldi0xKQorICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLnRpY2tldCcgJSByZXZdID0gYXJldlswXQorCisKKyMgICAgICAgIGlmIGlzaW5zdGFuY2UodGVtcGxhdGUsIGJhc2VzdHJpbmcpOgorIyAgICAgICAgICAgIHJlcS5oZGZbJ2FkbWluLnBhZ2VfdGVtcGxhdGUnXSA9IHRlbXBsYXRlCisjICAgICAgICBlbHNlOgorIyAgICAgICAgICAgIHJlcS5oZGZbJ2FkbWluLnBhZ2VfY29udGVudCddID0gTWFya3VwKHRlbXBsYXRlLnJlbmRlcigpKQorCisgICAgICAgIGNvbnRlbnRfdHlwZSA9ICJ0ZXh0L2h0bWwiCisgICAgICAgIGFkZF9zdHlsZXNoZWV0KHJlcSwgJ2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgcmV0dXJuICdkY3V0LmNzJywgY29udGVudF90eXBlCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9jc3MvaWN1eHRuLmNzcyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9jc3MvaWN1eHRuLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM5N2RlCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzCkBAIC0wLDAgKzEsNTYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gKi8KKworLyogQG92ZXJyaWRlIGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvY2hyb21lL2ljdWNvZGV0b29scy9jc3MvaWN1eHRuLmNzcyAqLworCit0YWJsZS5pY3VyZXZpZXcgdHI6aG92ZXIsCit0YWJsZS5pY3VyZXZpZXcgdHI6aG92ZXIgdGQsCit0YWJsZS5pY3VyZXZpZXcgdHI6aG92ZXIgdGggeworICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdyAhaW1wb3J0YW50OworfQorCit0YWJsZS5pY3VyZXZpZXcgeworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisJYm9yZGVyOiAgMXB4IHNvbGlkIGdyYXk7Cit9CisKK3RhYmxlLmljdXJldmlldyB0aCwgdGFibGUuaWN1cmV2aWV3IHRkIHsKKwl0ZXh0LWFsaWduOiBsZWZ0OworCWJvcmRlcjogIDFweCBzb2xpZCBncmF5OworCXBhZGRpbmc6ICAycHg7Cit9CisKK3RhYmxlLmljdXJldmlldyB0aGVhZCB0aCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RhYmxlLmljdXJldmlldyB0ZC5jaGFuZ2VzIHsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKwordGFibGUuaWN1cmV2aWV3IHRkLm92ZXJhbGwgIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7CisJZm9udC1zdHlsZTogaXRhbGljOworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisuYnJhbmNoLXVua25vd24geworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJZm9udC1zdHlsZTogIGl0YWxpYzsKK30KKy5icmFuY2gtdGFncyB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CisJY29sb3I6ICB3aGl0ZTsKKwliYWNrZ3JvdW5kLWNvbG9yOiBuYXZ5OworCXBhZGRpbmc6ICAxcHg7Cit9CisuYnJhbmNoLWJyYW5jaGVzIHsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWNvbG9yOiAgIzM1MzsKK30KKworLmJyYW5jaC10cnVuayB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2pzL3Jldmlldy5qcyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkYjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMKQEAgLTAsMCArMSwyNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworICB2YXIgc2V0QnJhbmNoTmFtZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgdmFyIGNzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VzZXR0YWJsZSIpOworICAgICB2YXIgdHJzPWNzdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKKyAgICAgZm9yKCBpPTEgOyBpIDwgdHJzLmxlbmd0aCA7IGkrKyApIHsKKwl2YXIgc2VjID0gdHJzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpWzFdOyAvLyBbMF0gaXMgJ2F1dGhvcicsIFsxXSBpcyBzZWN0aW9uLgorICAgICAgICB2YXIgYnJrID0gc2VjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7CisgICAgICAgIGZvcihqPTA7ajxicmsubGVuZ3RoO2orKykgeworICAgICAgICAgICB2YXIgYnJpID0gYnJrW2pdOworICAgICAgICAgICB2YXIgc3RyID0gYnJpLmlubmVySFRNTDsKKyAgICAgICAgICAgaWYoc3RyLmluZGV4T2YoInRydW5rIik+LTEpIHsKKyAgICAgICAgICAgICAgYnJpLmNsYXNzTmFtZSA9ICdicmFuY2gtdHJ1bmsnOworICAgICAgICAgICB9IGVsc2UgaWYoc3RyLmluZGV4T2YoImJyYW5jaGVzIik+LTEpIHsKKyAgICAgICAgICAgICAgYnJpLmNsYXNzTmFtZSA9ICdicmFuY2gtYnJhbmNoZXMnOworICAgICAgICAgICB9IGVsc2UgaWYoc3RyLmluZGV4T2YoInRhZ3MiKT4tMSkgeworCSAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLXRhZ3MnOworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgfQorICB9CisKKy8vIGh0dHA6Ly9ja29uLndvcmRwcmVzcy5jb20vMjAwOC8wNy8yNS9zdG9wLXVzaW5nLXdpbmRvd29ubG9hZC1pbi1qYXZhc2NyaXB0LworaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkge3dpbmRvdy5hdHRhY2hFdmVudCgnb25sb2FkJywgc2V0QnJhbmNoTmFtZXMpO30KK2Vsc2UgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzZXRCcmFuY2hOYW1lcywgZmFsc2UpO30KK2Vsc2Uge2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzZXRCcmFuY2hOYW1lcywgZmFsc2UpO30KKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwYmJlZmMKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9yZXZpZXcucHkKQEAgLTAsMCArMSwzOTcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTUgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisjIFJldmlldyBtb2R1bGUuCisjIFRPRE86IHJlZmFjdG9yIHRpY2tldCBtYW5pcHVsYXRpb24gaXRlbXMgaW50byB0aWNrZXRtZ3IuCisKK2ltcG9ydCByZQorCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBDb21wb25lbnQsIGltcGxlbWVudHMKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBDb21wb25lbnRNYW5hZ2VyCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgVHJhY0Vycm9yCitmcm9tIHRyYWMudXRpbCBpbXBvcnQgTWFya3VwCitmcm9tIHRyYWMud2ViIGltcG9ydCBJUmVxdWVzdEhhbmRsZXIKK2Zyb20gdHJhYy53ZWIuY2hyb21lIGltcG9ydCBhZGRfc3R5bGVzaGVldCwgYWRkX3NjcmlwdCwgSVRlbXBsYXRlUHJvdmlkZXIsIGFkZF9jdHh0bmF2Citmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wgaW1wb3J0IENoYW5nZXNldAorZnJvbSB0cmFjLndlYi5hcGkgaW1wb3J0IElSZXF1ZXN0RmlsdGVyCitmcm9tIHRyYWMud2lraSBpbXBvcnQgd2lraV90b19odG1sLCBmb3JtYXRfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIKK2Zyb20gdHJhYy5taW1ldmlldyBpbXBvcnQgQ29udGV4dAorICAgICAgICAgICAgCitmcm9tIGdlbnNoaS5idWlsZGVyIGltcG9ydCB0YWcKKyNmcm9tIHRyYWMuZW52IGltcG9ydCBJRW52aXJvbm1lbnRTZXR1cFBhcnRpY2lwYW50Citmcm9tIHRyYWMucGVybSBpbXBvcnQgSVBlcm1pc3Npb25SZXF1ZXN0b3IKK2Zyb20gdHJhYy5jb25maWcgaW1wb3J0IExpc3RPcHRpb24KK2Zyb20gaWN1Y29kZXRvb2xzLnRpY2tldG1nciBpbXBvcnQgVGlja2V0TWFuYWdlcgorZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCByZXNvdXJjZV9maWxlbmFtZSAjQFVucmVzb2x2ZWRJbXBvcnQKKworY2xhc3MgUmV2aWV3TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElUZW1wbGF0ZVByb3ZpZGVyLCBJUmVxdWVzdEZpbHRlciwgSVJlcXVlc3RIYW5kbGVyLCBJUGVybWlzc2lvblJlcXVlc3RvcikKKworICAgICMgcGF0aCB0byBtYXRjaCBmb3IgcmV2aWV3CisgICAgcGF0aF9tYXRjaCA9IHJlLmNvbXBpbGUocicvaWN1cmV2aWV3LyhbMC05XSspJykKKworICAgIHZvdGVhYmxlX3BhdGhzID0gTGlzdE9wdGlvbignaWN1Y29kZXRvb2xzJywgJ3BhdGhzJywgJy90aWNrZXQqJywKKyAgICAgICAgZG9jPSdMaXN0IG9mIFVSTCBwYXRocyB0byBzaG93IHJldmlld3Mgb24uIEdsb2JzIGFyZSBzdXBwb3J0ZWQuJykKKworICAgICMgIHNlYXJjaCBmb3IgZWFybGllc3QgbWF0Y2gsIGFuZCBob3cgbWFueSBzZWdtZW50cyB0byBpbmNsdWRlIGZvbGxvd2luZworICAgICMgICAgdHJ1bmsKKyAgICAjICAgIGJyYW5jaGVzL21haW50L21haW50LTQtOAorICAgICMgICAgdGFncy9yZWxlYXNlLTItMAorICAgIGJyYW5jaExpc3QgPSBbWyd0cnVuaycsMF0sWydicmFuY2hlcycsMl0sWyd0YWdzJywxXV0KKworICAgICMgSVBlcm1pc3Npb25SZXF1ZXN0b3IgbWV0aG9kcworICAgIGRlZiBnZXRfcGVybWlzc2lvbl9hY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gWydJQ1VSRVZJRVdfVklFVyddCisKKyAgICAjIElUZW1wbGF0ZVByb3ZpZGVyIG1ldGhvZHMKKyAgICBkZWYgZ2V0X3RlbXBsYXRlc19kaXJzKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAJcmV0dXJuIFtyZXNvdXJjZV9maWxlbmFtZShfX25hbWVfXywgJ3RlbXBsYXRlcycpXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogCisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygnQ291bGQgbm90IGdldCB0ZW1wbGF0ZSBkaXI6ICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoZSksIGUpKQorCQlyZXR1cm4gIiIKKworCisgICAgZGVmIGdldF9odGRvY3NfZGlycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsoJ2ljdWNvZGV0b29scycsIHJlc291cmNlX2ZpbGVuYW1lKF9fbmFtZV9fLCAnaHRkb2NzJykpXQorCisgICAgIyBJUmVxdWVzdEZpbHRlciBtZXRob2RzCisgICAgZGVmIHByZV9wcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxLCBoYW5kbGVyKToKKyAgICAgICAgaWYgJ0lDVVJFVklFV19WSUVXJyBub3QgaW4gcmVxLnBlcm06CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlcgorCisgICAgICAgIGlmIHNlbGYubWF0Y2hfdGlja2V0cGFnZShyZXEpOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfcmV2aWV3bGluayhyZXEpCisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIKKworICAgIGRlZiBwb3N0X3Byb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEsIHRlbXBsYXRlLCBkYXRhLCBjb250ZW50X3R5cGUpOgorICAgICAgICByZXR1cm4gKHRlbXBsYXRlLCBkYXRhLCBjb250ZW50X3R5cGUpCisKKyAgICBkZWYgcmVuZGVyX3Jldmlld2xpbmsoc2VsZiwgcmVxKToKKyAgICAgICAgIiIiUmVuZGVyIHRoZSAiMTQzIGNvbW1pdHMuIiBib3ggdGhhdCBzaG93cyBpbiB0aGUgdG9wbmF2LiIiIgorICAgICAgICAjYWRkX3N0eWxlc2hlZXQocmVxLCAnaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzJykKKworICAgICAgICBlbHMgPSBbXQorCisgICAgICAgIHRpY2tldF9tZ3IgPSBUaWNrZXRNYW5hZ2VyKHNlbGYuY29tcG1ncikKKworICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICByZXBvcyA9IHNlbGYuZW52LmdldF9yZXBvc2l0b3J5KCkKKyAgICAgICAgaWYgbm90IHJlcG9zOgorICAgICAgICAgICAgcmFpc2UgVHJhY0Vycm9yKCJDb3VsZCBub3QgZ2V0IHJlcG9zaXRvcnkgZm9yICVzIiAlIChyZXEuYXV0aG5hbWUpKQorCisgICAgICAgIHJldnMgPSB0aWNrZXRfbWdyLnRrdDJyZXZzKHNlbGYubG9nLCBkYiwgcmVwb3MsIHJlcSwgcmVxLmFyZ3NbJ3RpY2tldCddKQorCisgICAgICAgIGlmIG5vdCByZXZzOgorICAgICAgICAgICAgc3RyID0gJ05vIGNvbW1pdHMuJworICAgICAgICAgICAgbGkgPSB0YWcubGkoc3RyKQorICAgICAgICAgICAgZWxzLmFwcGVuZChsaSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ciA9ICcgJWQgY29tbWl0cy4nICUgbGVuKHJldnMpCisgICAgICAgICAgICBocmVmID0gcmVxLmhyZWYucmV2aWV3KHJlcS5hcmdzWyd0aWNrZXQnXSkKKyAgICAgICAgICAgIGEgPSB0YWcuYSgnUmV2aWV3JyArIHN0ciwgaHJlZj1ocmVmKQorICAgICAgICAgICAgbGkgPSB0YWcubGkoYSkKKyAgICAgICAgICAgIGVscy5hcHBlbmQobGkpICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICB1bCA9IHRhZy51bChlbHMsIGNsYXNzXz0ncmV2aWV3JykKKyAgICAgICAgY2xhc3NOYW1lID0gJycKKyAgICAgICAgdGl0bGUgPSAiUmV2aWV3cyIKKyAgICAgICAgYWRkX2N0eHRuYXYocmVxLCB0YWcuc3Bhbih1bCwgaWQ9J2ljdXJldmlldycsIHRpdGxlPXRpdGxlLCBjbGFzc189Y2xhc3NOYW1lKSkKKworCisgICAgZGVmIG1hdGNoX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgIiIiSXMgdGhpcyBhIHJldmlldyBVUkw/IiIiCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJy9yZXZpZXcoPzovKFteL10rKSk/KD86LyhbXi9dKykpPyg/Oi8oLiopJCk/JywgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXEuYXJnc1sndGlja2V0J10gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBtYXRjaF90aWNrZXRwYWdlKHNlbGYsIHJlcSk6CisgICAgICAgICIiIklzIHRoaXMgdGhlIHRpY2tldCBVUkw/IiIiCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJy90aWNrZXQoPzovKFteL10rKSk/KD86LyhbXi9dKykpPyg/Oi8oLiopJCk/JywgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXEuYXJnc1sndGlja2V0J10gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwYXRoVG9CcmFuY2hOYW1lKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJjb252ZXJ0IGEgZnVsbCBwYXRoIG5hbWUgdG8gdGhlICdicmFuY2gnIGl0IGFwcGxpZXMgdG8uIiIiCisgICAgICAgICNyZXR1cm4gJy8nLmpvaW4ocGF0aC5zcGxpdCgnLycpWzA6Ml0pCisgICAgICAgIHdpbmRleCA9IE5vbmUKKyAgICAgICAgd2luID0gTm9uZQorICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYuYnJhbmNoTGlzdDoKKyAgICAgICAgICAgIGlmKHBhdGggPT0gYnJhbmNoWzBdKTogICMgY2F0Y2ggY2hhbmdlcyB0byBqdXN0ICd0cnVuaycKKyAgICAgICAgICAgICAgICBpZHggPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlkeCA9IHBhdGguZmluZChicmFuY2hbMF0rJy8nKQorICAgICAgICAgICAgaWYoaWR4ID4gLTEgYW5kICh3aW5kZXggPT0gTm9uZSBvciB3aW5kZXggPiBpZHgpKToKKyAgICAgICAgICAgICAgICB3aW5kZXggPSBpZHgKKyAgICAgICAgICAgICAgICB3aW4gPSBicmFuY2gKKyAgICAgICAgaWYgd2luZGV4ID09IE5vbmU6CisgICAgICAgICAgICBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKQorICAgICAgICAgICAgcmV0dXJuICcvJy5qb2luKHNlZ21lbnRzWzA6Ml0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjcHJpbnQgImZvdW5kICVzIGZvbGwgJXMgQCAlZCIgJSAod2luWzBdLHdpblsxXSx3aW5kZXgpCisgICAgICAgICAgICBzZWdtZW50cyA9IHBhdGhbd2luZGV4Ol0uc3BsaXQoJy8nKQorICAgICAgICAgICAgcmV0dXJuIHBhdGhbOndpbmRleF0gKyAoJy8nLmpvaW4oc2VnbWVudHNbMDp3aW5bMV0rMV0pKSAjIHVzZSBzcGVjaWZpZWQgIyBvZiBmb2xsb3dpbmcgc2VnbWVudHMKKworICAgIGRlZiBjaGFuZ2VUb1JhbmdlKHNlbGYsIGNfbmV3LCBjaGFuZ2UsIHJlcG9zKToKKyAgICAgICAgIiIicHJlcHJvY2VzcyBhIGNoZ3NldC5nZXRfY2hhbmdlc1tuXSBlbnRyeS4gIFJldHVybnMgIChzcmNyZXYsZHN0cmV2LHR5cGUpICsgY2hhbmdlLiAgVGhlIHNwZWNpYWxseSBwcm9jZXNzZWQgc3JjcmV2IGFuZCBkc3RyZXYgYXJlIC0xIGZvciBub25lLCBhbmQgdGhlIHR5cGUgZ2V0cyBtdW5nZWQgYSBiaXQuIiIiCisgICAgICAgICMgcTogKHUndHJ1bmsvTG9jYWxlLmphdmEnLCAnZmlsZScsICdhZGQnLCBOb25lLCB1Jy0xJykgIGZyb20gcjMKKyAgICAgICAgIyBxOiAodSd0cnVuay91dGlsLmMnLCAgICAgICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisgICAgICAgIGNfcGF0aCA9IGNoYW5nZVswXSAgIyBuZXcgcGF0aAorIyAgICAgICAgY19pdGVtdHlwZSA9IGNoYW5nZVsxXSAjICdmaWxlJyBvciA/CisgICAgICAgIGNfdHlwZSA9IGNoYW5nZVsyXQorICAgICAgICBjX29sZHBhdGggPSBjaGFuZ2VbM10KKyAgICAgICAgY19kc3RyZXYgPSBjX25ldworICAgICAgICBjX3NyY3JldiA9IGNfb2xkID0gaW50KGNoYW5nZVs0XSBvciAtMSkKKyAgICAgICAgaWYoY190eXBlIGluIChDaGFuZ2VzZXQuQ09QWSxDaGFuZ2VzZXQuTU9WRSkpOgorICAgICAgICAgICAgY19zcmNyZXYgPSAtMQorICAgICAgICBlbGlmKGNfdHlwZSBpbiAoQ2hhbmdlc2V0LkRFTEVURSkpOgorICAgICAgICAgICAgY19kc3RyZXYgPSAtMQorICAgICAgICBlbGlmKGNfdHlwZSBpbiAoQ2hhbmdlc2V0LkVESVQsIENoYW5nZXNldC5BREQpKToKKyAgICAgICAgICAgIGlmIGNfcGF0aCAhPSBjX29sZHBhdGggYW5kIGNfb2xkcGF0aCAhPSBOb25lIGFuZCBjX3BhdGggIT0gTm9uZTogIyBkaWQgdGhlIHBhdGggY2hhbmdlPyAoY29weSBvciBtb3ZlKQorICAgICAgICAgICAgICAgIGlmKGNfb2xkICE9IC0xKTogIyBpZiB3ZSBoYXZlIGFuIG9sZCByZXYsIHRyYWNrIGl0CisgICAgICAgICAgICAgICAgICAgICMjIFNIT1VMRCBjYWxsIHJlcG9zLmdldF9wYXRoX2hpc3RvcnkoY19wYXRoLCBjX25ldywgY19vbGQpIAorICAgICAgICAgICAgICAgICAgICAjIyBhbmQgdGhlbiBsb29rIGZvciAnY29weScgb3IgJ21vdmUnIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICMjIENvZGUgYmVsb3cgd2lsbCBvbmx5IHJldHVybiB0aGUgRURJVCAoZXRjKSBvcGVyYXRpb24gKmJlZm9yZSogdGhlIGNvcHkvbW92ZS4KKyAgICAgICAgICAgICAgICAgICAgIyBvbGRjaGFuZ2UgPSByZXBvcy5nZXRfY2hhbmdlc2V0KGNfb2xkKSAjIG9sZCByZXYKKyAgICAgICAgICAgICAgICAgICAgIyBmb3VuZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyBmb3Igb2xkY2hnIGluIG9sZGNoYW5nZS5nZXRfY2hhbmdlcygpOgorICAgICAgICAgICAgICAgICAgICAjICAgICBpZiBvbGRjaGdbMF0gPT0gY19wYXRoIG9yIG9sZGNoZ1szXSA9PSBjX29sZHBhdGg6CisgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBmb3VuZCA9IG9sZGNoZworICAgICAgICAgICAgICAgICAgICAjIGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAgICAjICAgICAjICJmb3VuZCIgaXMgdGhlIHNvdXJjZSBsb2NhdGlvbiAocHJlIGNvcHkpIAorICAgICAgICAgICAgICAgICAgICAjICAgICAjIGhvd2V2ZXIsIGNoYW5nZVtdIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBmcm9tL3RvCisgICAgICAgICAgICAgICAgICAgICMgICAgICMgCisgICAgICAgICAgICAgICAgICAgICMgICAgIGNfdHlwZSA9ICJbIitzdHIoY19vbGQpKyI6IitzdHIoY19uZXcpKyJdIitmb3VuZFsyXSArICIrIiArY190eXBlCisgICAgICAgICAgICAgICAgICAgICMgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICAgY190eXBlID0gIj8/PysiICsgY190eXBlCisgICAgICAgICAgICAgICAgICAgIGNfdHlwZSA9ICIoY29weS9tb3ZlKSsiICsgY190eXBlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY190eXBlID0gIig/Pz8pKyIgKyBjX3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNfdHlwZSA9IGNfdHlwZSArIiA/Pz8iCisgICAgICAgIHJldHVybiAoY19zcmNyZXYsIGNfZHN0cmV2LCBjX3R5cGUpICsgY2hhbmdlICsgKDEsKSAjIHByZXByb2Nlc3NlZCArIChjaGFuZ2UpICsgKG1lcmdlY291bnQpCisgICAgICAgIAorICAgIGRlZiBkZXNjcmliZUNoYW5nZShzZWxmLCBmaWxlLCBjaGFuZ2UsIHJlcSwgZGIpOgorICAgICAgICAiIiJIVE1MaXplIGEgY2hhbmdlc2V0ICh0aGUgJ2RldGFpbHMnIGNvbHVtbikiIiIKKyAgICAgICAgd2hhdCA9IGNoYW5nZVsyXSBvciAnY2hhbmdlJworICAgICAgICB3aGVyZSA9ICdyJWQ6JWQnICUgKGNoYW5nZVswXSxjaGFuZ2VbMV0pCisgICAgICAgIGlmKGNoYW5nZVsyXSA9PSAnbW92ZScpOgorICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuY2hhbmdlc2V0KGNoYW5nZVsxXSkKKyAgICAgICAgICAgIHdoZXJlID0gJ3IlZCcgJSBjaGFuZ2VbMV0KKyAgICAgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0KKyAgICAgICAgZWxpZihjaGFuZ2VbMF0gPT0gLTEpOgorICAgICAgICAgICAgaWYoY2hhbmdlWzFdID09IC0xKToKKyAgICAgICAgICAgICAgICB1cmwgPSBOb25lCisgICAgICAgICAgICAgICAgd2hhdCA9ICJub29wIgorICAgICAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjaWYgY2hhbmdlWzJdID09ICdhZGQrY29tbWl0cyc6CisgICAgICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuYnJvd3NlcihmaWxlLCByZXY9Y2hhbmdlWzFdKSAjICdhZGQnCisgICAgICAgICAgICAgICAgd2hlcmUgPSAnciVkJyAlIGNoYW5nZVsxXQorICAgICAgICAgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0KKyAgICAgICAgZWxpZihjaGFuZ2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgdXJsID0gTm9uZSAjIGRlbGV0ZWQKKyAgICAgICAgICAgIHdoYXQgPSAiZGVsZXRlZCIKKyAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuY2hhbmdlc2V0KG9sZF9wYXRoPWNoYW5nZVs2XSBvciBmaWxlLCBvbGQ9Y2hhbmdlWzBdLCBuZXdfcGF0aD1jaGFuZ2VbM10gb3IgZmlsZSwgbmV3PWNoYW5nZVsxXSkKKworICAgICAgICAjIG11bHRpIGNoYW5nZQorICAgICAgICBpZihjaGFuZ2VbOF0+MSk6CisgICAgICAgICAgICB3aGF0ID0gdSIlc1x1MDBkNyVkIiAlICh3aGF0LCBjaGFuZ2VbOF0pCisKKyAgICAgICAgIyB1cmxpemUKKyAgICAgICAgaWYgdXJsOgorICAgICAgICAgICAgd2hhdCA9IE1hcmt1cCgnPGEgaHJlZj0iJXMiPiVzPC9hPicgJSAodXJsLHdoYXQpKQorCisgICAgICAgIGlmIHdoZXJlOgorICAgICAgICAgICAgIyBzZWFyY2ggcXVlcnk/CisgICAgICAgICAgICByZXR1cm4gKHdoYXQsIHRhZy5hKHdoZXJlLCBocmVmPXJlcS5ocmVmLnNlYXJjaChxPXdoZXJlKSkpCisgICAgICAgICAgICAjcmV0dXJuICh3aGF0LCB3aGVyZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgc3BlY2lmaWMgdXJsCisgICAgICAgICAgICByZXR1cm4gKHdoYXQsICcnKQorCisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgICIiIlRoaXMgaXMgdGhlICdtYWluJyBvZiB0aGlzIG1vZHVsZS4iIiIKKyAgICAgICAgI2RiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgICN0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICAjcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorICAgICAgICBjb250ZXh0ID0gQ29udGV4dC5mcm9tX3JlcXVlc3QocmVxLCBGYWxzZSkKKworICAgICAgICBuZXdfcGF0aCA9IHJlcS5hcmdzLmdldCgnbmV3X3BhdGgnKQorICAgICAgICBuZXdfcmV2ID0gcmVxLmFyZ3MuZ2V0KCduZXcnKQorICAgICAgICBvbGRfcGF0aCA9IHJlcS5hcmdzLmdldCgnb2xkX3BhdGgnKQorICAgICAgICBvbGRfcmV2ID0gcmVxLmFyZ3MuZ2V0KCdvbGQnKQorCisgICAgICAgIG5ld19wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgobmV3X3BhdGgpCisgICAgICAgIG5ld19yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG5ld19yZXYpCisgICAgICAgIG9sZF9wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgob2xkX3BhdGgpCisgICAgICAgIG9sZF9yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG9sZF9yZXYpCisgICAgICAgIAorCisjICAgICAgICBpZiBub3QgcmVxLnBlcm0uaGFzX3Blcm1pc3Npb24oJ1RJQ0tFVF9NT0RJRlknKToKKyMgICAgICAgICAgICByZXR1cm4gcmVxLnJlZGlyZWN0KHJlcS5ocmVmLmJyb3dzZXIoKSkKKworICAgICAgICBvbGRfcmV2ID0gaW50KG9sZF9yZXYpCisgICAgICAgIG5ld19yZXYgPSBpbnQobmV3X3JldikKKyAgICAgICAgCisgICAgICAgIHRpY2tldCA9IHJlcS5hcmdzLmdldCgndGlja2V0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGlja2V0ID0gaW50KHRpY2tldCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRpY2tldCA9IDAKKyMgICAgICAgIHJlcS5oZGZbJ3Jldmlldy50aWNrZXQnXSA9IHRpY2tldAorIyAgICAgICAgcmVxLmhkZlsncmV2aWV3LnRpY2tldGh0bWwnXSA9IHRhZy5hKHRpY2tldCwgcmVxLmhyZWYudGlja2V0KHRpY2tldCkpCisKKyAgICAgICAgZGF0YSA9IHt9CisKKyAgICAgICAgZGF0YVsnb3ZlcmFsbF95J10gPSAwCisgICAgICAgIGRhdGFbJ3RpY2tldF9pZCddID0gcmVxLmFyZ3NbJ3RpY2tldCddCisgICAgICAgIGRhdGFbJ3RpY2tldF9zdW1tYXJ5J10gPSAnJworICAgICAgICBkYXRhWyd0aWNrZXRfaHJlZiddID0gcmVxLmhyZWYudGlja2V0KHJlcS5hcmdzWyd0aWNrZXQnXSkKKworICAgICAgICB0aWNrZXRfbWdyID0gVGlja2V0TWFuYWdlcihzZWxmLmNvbXBtZ3IpCisKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeSgpCisKKyAgICAgICAgcmV2cyA9IHRpY2tldF9tZ3IudGt0MnJldnMoc2VsZi5sb2csIGRiLCByZXBvcywgcmVxLCByZXEuYXJnc1sndGlja2V0J10pCisgICAgICAgIAorICAgICAgICBpZiAobm90IHJldnMgb3IgbGVuKHJldnMpPT0wKToKKyAgICAgICAgICAgICMgbm90aGluZyB0byByZXZpZXcuIHNob3VsZG4ndCBoYXBwZW4KKyAgICAgICAgICAgIHJldHVybiAoJ25vdGhpbmcuaHRtbCcsIGRhdGEsICd0ZXh0L2h0bWwnKQorICAgICAgICBlbGlmKGxlbihyZXZzKT09MSk6CisgICAgICAgICAgICAjIG9ubHkgb25lIGNoYW5nZSAtIGp1c3QgZG8gYSBjaGFuZ2VzZXQgdmlldworICAgICAgICAgICAgcmV0dXJuIHJlcS5yZWRpcmVjdChyZXEuaHJlZi5jaGFuZ2VzZXQocmV2c1swXSkpCisKKyAgICAgICAgcmV2Y291bnQgPSAwCisgICAgICAgIGJyYW5jaGVzID0ge30gICAgICAgICAjIHRyYWNrIGVhY2ggYnJhbmNoIHNlcGFyYXRlbHkuCisgICAgICAgIGZpbGVzID0ge30gICAgICAgICAgICAjIHRyYWNrIGFsbCBvZiB0aGUgZmlsZXMgd2hpY2ggYXJlIGFmZmVjdGVkCisgICAgICAgICMgbWF5IGJlIDAgcmV2cy4KKyAgICAgICAgcmV2aXNpb25zID0gW10gICAgICAgICMgYXJyYXkgb2YgbXVuZ2VkIHJldmlzaW9ucworICAgICAgICAKKyAgICAgICAgZm9yIHJldiBpbiByZXZzOgorICAgICAgICAgICAgY2hnc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChyZXYpCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL0xvY2FsZS5qYXZhJywgJ2ZpbGUnLCAnYWRkJywgTm9uZSwgdSctMScpICBmcm9tIHIzCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL3V0aWwuYycsICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisgICAgICAgICAgICBtZXNzYWdlID0gY2hnc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAgICAgcmV2Y291bnQgPSByZXZjb3VudCArIDEKKyAgICAgICAgICAgIHJldmlzaW9uID0ge30KKyAgICAgICAgICAgIHJldmlzaW9uWydyZXYnXSA9ICB0YWcuYShyZXYsIHJlcS5ocmVmLmNoYW5nZXNldChyZXYpKQorICAgICAgICAgICAgcmV2aXNpb25bJ2F1dGhvciddID0gY2hnc2V0LmF1dGhvcgorICAgICAgICAgICAgcmV2aXNpb25bJ251bSddID0gIHJldgorICAgICAgICAgICAgcmV2aXNpb25bJ2NvbW1lbnQnXSA9ICBtZXNzYWdlICN3aWtpX3RvX29uZWxpbmVyKCBtZXNzYWdlLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldmlzaW9uWydjb21tZW50X3dpa2knXSA9IGZvcm1hdF90b19vbmVsaW5lciggc2VsZi5lbnYsIGNvbnRleHQsIG1lc3NhZ2UsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5sb2cud2FybihlKQorICAgICAgICAgICAgICAgIHJldmlzaW9uWydjb21tZW50X3dpa2knXSA9ICIlcyAoY291bGQgbm90IGZvcm1hdCAtICVzKSIgJSAobWVzc2FnZSwgc3RyKGUpKQorCisgICAgICAgICAgICByYnJhbmNoZXMgPSByZXZpc2lvblsnYnJhbmNoZXMnXSA9IFtdCisgICAgICAgICAgICAjIHdhbGsgdGhyb3VnaCBhbGwgY2hhbmdlcyBpbiB0aGlzIENoYW5nZXNldCBhbmQgYXBwbHkgdGhlbSB0byB0aGUgZmlsZXNbXSBhcnJheQorICAgICAgICAgICAgZm9yIGNoZyBpbiBjaGdzZXQuZ2V0X2NoYW5nZXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gY2hnWzBdICMgbmV3IHBhdGgKKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmlsZXNbcGF0aF0gIyBrbm93biBmaWxlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW3BhdGhdID0gaXRlbTsgIyBuZXcgZmlsZQorICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kKHNlbGYuY2hhbmdlVG9SYW5nZShyZXYsY2hnLHJlcG9zKSkKKyAgICAgICAgICAgICAgICBicmFuY2hfbmFtZSA9IHNlbGYucGF0aFRvQnJhbmNoTmFtZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaF9uYW1lIG5vdCBpbiByYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgdGltZSB3ZSBoYXZlIHNlZW4gdGhpcyBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgcmJyYW5jaGVzLmFwcGVuZChicmFuY2hfbmFtZSkKKyAgICAgICAgICAgIHJldmlzaW9ucy5hcHBlbmQocmV2aXNpb24pCisgICAgICAgIGRhdGFbJ3JldmlzaW9ucyddID0gcmV2aXNpb25zCisgICAgICAgIAorICAgICAgICBpZihyZXZjb3VudCA+IDApOgorICAgICAgICAgICAgZGF0YVsncmV2Y291bnQnXSA9IHJldmNvdW50CisgICAgICAgIAorICAgICAgICAjIHByaW50ICJmaWxlczogJWQiICUgbGVuKGZpbGVzKQorICAgICAgICAjIGdvIHRocm91aGcgZWFjaCBmaWxlIGFuZCBjYWxjdWxhdGUgaXRzIG1pbmltdW0gcmFuZ2UKKyAgICAgICAgZmlsZWxpc3QgPSBmaWxlcy5rZXlzKCkKKyAgICAgICAgZmlsZWxpc3Quc29ydCgpCisjICAgICAgICBwcmludCAnYmFyIHRvICVkIGxlbiBvZiAlcycgJSAobGVuKGZpbGVsaXN0KSxzdHIoZmlsZWxpc3QpKQorICAgICAgICAjIHNlZSBjaGFuZ2VUb1JhbmdlKCkgZm9yIGRlZmluaXRpb24gb2YgdGhlIGVsZW1lbnRzIGhlcmUuCisgICAgICAgICMgKG9sZHJldiwgbmV3cmV2LCB0eXBlLCAoY2hhbmdlLi4uKSApCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgY2hhbmdlcyA9IGZpbGVzW2ZpbGVdCisgICAgICAgICAgICBpID0gMAorIyAgICAgICAgICAgIHByaW50ICIgbG9vcGluZyBmcm9tICVkIHRvICVkIG92ZXIgJWQgIiAlIChpLGxlbihjaGFuZ2VzKS0xLGxlbihjaGFuZ2VzKSkKKyAgICAgICAgICAgIHdoaWxlIGxlbihjaGFuZ2VzKT4xIGFuZCBpPChsZW4oY2hhbmdlcyktMSk6CisgICAgICAgICAgICAgICAgbWVyZ2UgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlc1tpXVsxXSA9PSBjaGFuZ2VzW2krMV1bMF06ICMgaWYgdGhpcyBjaGFuZ2UgaXMgZXhhY3RseSBzdWJzZXF1ZW50IHRvIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICBpZiBjaGFuZ2VzW2ldWzBdID09IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhbmdlc1tpXVsyXSA9PSBDaGFuZ2VzZXQuQUREIGFuZCBjaGFuZ2VzW2krMV1bMl0gPT0gQ2hhbmdlc2V0LkVESVQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UgPSAoY2hhbmdlc1tpXVswXSxjaGFuZ2VzW2krMV1bMV0sJ2FkZCtjb21taXRzJykgIyBtZXJnZSwgcmV0YWluICdmaXJzdCcgcmV2CisgICAgICAgICAgICAgICAgICAgIGVsaWYgY2hhbmdlc1tpXVsyXSA9PSAnKGNvcHkvbW92ZSkrZWRpdCcgYW5kIGNoYW5nZXNbaSsxXVsyXSA9PSBDaGFuZ2VzZXQuRURJVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlID0gKGNoYW5nZXNbaV1bMF0sY2hhbmdlc1tpKzFdWzFdLCcoY29weS9tb3ZlKStlZGl0JykgIyByZXRhaW4gJ2ZpcnN0JyByZXYKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjaGFuZ2VzW2ldWzJdID09IENoYW5nZXNldC5FRElUIGFuZCBjaGFuZ2VzW2krMV1bMl0gPT0gQ2hhbmdlc2V0LkVESVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZSA9IChjaGFuZ2VzW2ldWzBdLGNoYW5nZXNbaSsxXVsxXSwnZWRpdCcpICMgcmV0YWluICdmaXJzdCcgcmV2CisgICAgICAgICAgICAgICAgaWYgbWVyZ2U6CisgICAgICAgICAgICAgICAgICAgICMgcHJlc2VydmUgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1tpKzFdID0gbWVyZ2UgKyAoY2hhbmdlc1tpKzFdWzNdLCBjaGFuZ2VzW2krMV1bNF0sIGNoYW5nZXNbaV1bNV0rIisiK2NoYW5nZXNbaSsxXVs1XSwgY2hhbmdlc1tpXVs2XSwgY2hhbmdlc1tpKzFdWzddLCBjaGFuZ2VzW2ldWzhdKzEpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzWzppXSArIGNoYW5nZXNbaSsxOl0gIyBhbmQgc2hpZnQgZG93bgorIyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIm1lcmdlZDogJXMiICUgc3RyKGNoYW5nZXMpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW2ZpbGVdID0gY2hhbmdlcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMQorICAgICAgICAKKyAgICAgICAgIyBub3csIHdyaXRlICdlbSBvdXQKKyAgICAgICAgc2VyYSA9IDAKKyAgICAgICAgI2ZpbGVzX2RhdGEgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgIHNlcmEgPSBzZXJhKzEKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IHt9CisgICAgICAgICAgICBmaWxlX2RhdGFbJ25hbWUnXSA9IE1hcmt1cCgnPGEgaHJlZj0iJXMiPiVzPC9hPicgJSAocmVxLmhyZWYuYnJvd3NlcihmaWxlKSxmaWxlKSkKKyAgICAgICAgICAgIGJyYW5jaF9uYW1lID0gc2VsZi5wYXRoVG9CcmFuY2hOYW1lKGZpbGUpCisgICAgICAgICAgICAjcHJpbnQgImJyYW5jaCBpczogKCVzKSIgJSAoYnJhbmNoX25hbWUpCisgICAgICAgICAgICBicmFuY2hlc19kYXRhID0gYnJhbmNoZXMuZ2V0KGJyYW5jaF9uYW1lLCB7fSkKKyAgICAgICAgICAgIGZpbGVzX2RhdGEgPSBicmFuY2hlc19kYXRhLmdldCgnZmlsZXMnLFtdKQorCisgICAgICAgICAgICBjaGFuZ2VzID0gZmlsZXNbZmlsZV0KKyAgICAgICAgICAgIGNoYSA9IDAKKyAgICAgICAgICAgIGNoYW5nZXNfZGF0YSA9IFtdCisgICAgICAgICAgICBmb3IgY2hhbmdlIGluIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgY2hhID0gY2hhICsgMQorIyAgICAgICAgICAgICAgICBwcmludCAiJXMgb3V0cHV0ICVzICIgJSAoZmlsZSwgc3RyKGNoYW5nZSkpCisgICAgICAgICAgICAgICAgY2hhbmdlc19kYXRhLmFwcGVuZChzZWxmLmRlc2NyaWJlQ2hhbmdlKGZpbGUsIGNoYW5nZSwgcmVxLCBkYikpCisgICAgICAgICAgICBmaWxlX2RhdGFbJ2NoYW5nZXMnXSA9IGNoYW5nZXNfZGF0YQorICAgICAgICAgICAgaWYobGVuKGNoYW5nZXMpPjEpOgorICAgICAgICAgICAgICAgIHdoYXRodG1sID0gc2VsZi5kZXNjcmliZUNoYW5nZShmaWxlLCAoaW50KGNoYW5nZXNbMF1bN10gb3IgLTEpLCBpbnQoY2hhbmdlc1tsZW4oY2hhbmdlcyktMV1bMV0gb3IgLTEpLCAnb3ZlcmFsbCcsIGNoYW5nZXNbbGVuKGNoYW5nZXMpLTFdWzNdLCBOb25lLCBOb25lLCBjaGFuZ2VzWzBdWzZdLCBOb25lLCBsZW4oY2hhbmdlcykpLCByZXEsIGRiKQorICAgICAgICAgICAgICAgIGZpbGVfZGF0YVsnb3ZlcmFsbCddID0gd2hhdGh0bWwKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGxfeSddID0gMQorICAgICAgICAgICAgICAgIGRhdGFbJ292ZXJhbGxfeSddID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGxfeSddID0gMAorICAgICAgICAgICAgZmlsZXNfZGF0YS5hcHBlbmQoZmlsZV9kYXRhKQorICAgICAgICAgICAgIyBzZXRzCisgICAgICAgICAgICBicmFuY2hlc19kYXRhWydmaWxlcyddID0gZmlsZXNfZGF0YQorICAgICAgICAgICAgYnJhbmNoZXNfZGF0YVsnbGVuJ10gPSBsZW4oZmlsZXNfZGF0YSkKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGFbJ25hbWUnXSA9IGJyYW5jaF9uYW1lCisgICAgICAgICAgICBicmFuY2hlc1ticmFuY2hfbmFtZV0gPSBicmFuY2hlc19kYXRhCisKKyAgICAgICAgIyAuLiBjb252ZXJ0IGRpY3QgdG8gYXJyYXkuCisgICAgICAgIGJyYW5jaF9saXN0ID0gW10KKyAgICAgICAgYnJhbmNoX2tleXMgPSBicmFuY2hlcy5rZXlzKCkKKyAgICAgICAgYnJhbmNoX2tleXMuc29ydCgpCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoX2tleXM6CisgICAgICAgICAgICBicmFuY2hfbGlzdC5hcHBlbmQoYnJhbmNoZXNbYnJhbmNoXSkKKyAgICAgICAgZGF0YVsnYnJhbmNoZXMnXSA9IGJyYW5jaF9saXN0CisgICAgICAgIGRhdGFbJ2xhc3RicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBkYXRhWydicmFuY2hjb3VudCddID0gbGVuKGJyYW5jaGVzKQorICAgICAgICAKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgYWRkX3NjcmlwdChyZXEsICdpY3Vjb2RldG9vbHMvanMvcmV2aWV3LmpzJykKKyAgICAgICAgcmV0dXJuICdyZXZpZXcuaHRtbCcsIGRhdGEsIGNvbnRlbnRfdHlwZQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE5ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgaHRtbAorICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPCEtLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgICAgIHhtbG5zOnB5PSJodHRwOi8vZ2Vuc2hpLmVkZ2V3YWxsLm9yZy8iCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9ImxheW91dC5odG1sIiAvPgorICA8aGVhZD4KKyAgICA8dGl0bGU+Tm90aGluZyB0byBSZXZpZXcgZm9yIHRpY2tldCAjJHt0aWNrZXRfaWR9PC90aXRsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImN0eHRuYXYiIGNsYXNzPSJuYXYiPjwvZGl2PgorCisgICAgPGRpdiBpZD0iY29udGVudCIgY2xhc3M9ImljdWNvZGVyZXZpZXciPgorICAgICAgPGgxPk5vdGhpbmcgdG8gcmV2aWV3ITwvaDE+CisgICAgICA8cD4KKyAgICAgIAlOb3RoaW5nIHRvIHJldmlldyAtIG5vIGNoYW5nZXNldHMgaW4gdGlja2V0IDxhIGhyZWY9IiR7dGlja2V0X2hyZWZ9Ij4jJHt0aWNrZXRfaWR9PC9hPgorICAgICAgPC9wPgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmODc0NwotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbApAQCAtMCwwICsxLDE0MyBAQAorPCFET0NUWVBFIGh0bWwKKyAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzwhLS0KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgICAgICB4bWxuczpweT0iaHR0cDovL2dlbnNoaS5lZGdld2FsbC5vcmcvIgorICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8eGk6aW5jbHVkZSBocmVmPSJsYXlvdXQuaHRtbCIgLz4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlJldmlldyBmb3IgdGlja2V0ICMke3RpY2tldF9pZH08L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iY3R4dG5hdiIgY2xhc3M9Im5hdiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0iaWN1Y29kZXJldmlldyI+CisKKworIDxoMT5UaWNrZXQgPGEgaHJlZj0nJHtocmVmLnRpY2tldCh0aWNrZXRfaWQpfSc+IyR7dGlja2V0X2lkfTwvYT48L2gxPgorIDxwPgorICAgPHNwYW4gY2xhc3M9ImljdXJldmlld19zdW1tYXJ5Ij4ke3RpY2tldF9zdW1tYXJ5fTwvc3Bhbj4KKyA8L3A+Cis8cHk6aWYgdGVzdD0icmV2Y291bnQiPgorCisgIDxoMj4ke3JldmNvdW50fSBDaGFuZ2VzZXRzPC9oMj4KKyAgPHRhYmxlIGlkPSdjaGFuZ2VzZXR0YWJsZScgY2xhc3M9J2ljdXJldmlldyc+CisgICAgPHRoZWFkPgorICAgICAgPHRyPgorCTx0aD5yPC90aD4KKwk8dGg+YXV0aG9yPC90aD4KKwk8dGg+c2VjdGlvbihzKTwvdGg+CisJPHRoPmNvbW1lbnQ8L3RoPgorICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgIDxweTpmb3IgZWFjaD0icmV2IGluIHJldmlzaW9ucyI+CisJPHRyPgorCSAgPHRoPgorCSAgICA8YSBocmVmPSIke2hyZWYuY2hhbmdlc2V0KHJldi5udW0pfSI+ciR7cmV2Lm51bX08L2E+CisJICA8L3RoPgorCSAgPHRkPgorCSAgICAke3Jldi5hdXRob3J9CisJICA8L3RkPgorCSAgPHRkPgorCSAgICA8IS0tIHNlY3Rpb25zIC0tPgorCSAgICA8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiByZXYuYnJhbmNoZXMiPgorCSAgICAgIDxiIGNsYXNzPSdicmFuY2hsaXN0Jz4KKwkJPGEgY2xhc3M9J2JyYW5jaC11bmtub3duJyBocmVmPSIjJHticmFuY2h9Ij4ke2JyYW5jaH08L2E+IAorCSAgICAgIDwvYj4KKwkgICAgPC9weTpmb3I+CisJICA8L3RkPgorCSAgPHRkPgorCSAgICAke3Jldi5jb21tZW50X3dpa2l9CisJICA8L3RkPgorCTwvdHI+CisgICAgICA8L3B5OmZvcj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorICAKKzxweTppZiB0ZXN0PSJicmFuY2hjb3VudCA+IDEiPgorPGgyPkZpbGVzPC9oMj4KKzxoMz5KdW1wIHRvIFNlY3Rpb25zPC9oMz4KKzx1bD4KKzxweTpmb3IgZWFjaD0iYnJhbmNoIGluIGJyYW5jaGVzIj4KKyAgPGxpPjxhIGhyZWY9IiMke2JyYW5jaC5uYW1lfSI+JHticmFuY2gubmFtZX08L2E+ICZtZGFzaDsgJHticmFuY2gubGVufSBmaWxlczwvbGk+Cis8L3B5OmZvcj4KKzwvdWw+Cis8L3B5OmlmPgorCis8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiBicmFuY2hlcyI+Cis8aHIvPgorPGEgbmFtZT0iJHticmFuY2gubmFtZX0iPgorICA8aDM+CisgICAgICAgIDxhIGhyZWY9IiR7aHJlZi5icm93c2VyKGJyYW5jaC5uYW1lKX0iPiR7YnJhbmNoLm5hbWV9PC9hPiAmbWRhc2g7ICgke2JyYW5jaC5sZW59IGZpbGVzIGNoYW5nZWQpCisgIDwvaDM+Cis8L2E+CisKKzxibG9ja3F1b3RlPgorCis8dGFibGUgY2xhc3M9J2ljdXJldmlldyc+Cis8dGhlYWQ+Cis8dHI+CisgPHRoPkZpbGU8L3RoPgorIDx0aD5DaGFuZ2VzPC90aD4KKyA8dGg+RGV0YWlsczwvdGg+CisgPHB5OmlmIHRlc3Q9Im92ZXJhbGxfeSA+IDAiPiAKKyAgPHRoPk92ZXJhbGw8YnIvPjxpPihpbmNsdWRpbmcgb3RoZXIgY2hhbmdlcyk8L2k+PC90aD4KKyAgPHRoPkRldGFpbHM8L3RoPgorIDwvcHk6aWY+Cis8L3RyPgorPC90aGVhZD4KKzx0Ym9keT4KKzxweTpmb3IgZWFjaD0iZmlsZSBpbiBicmFuY2guZmlsZXMiPgorIDx0cj4KKyAgICA8dGggY2xhc3M9J25hbWUnPiR7ZmlsZS5uYW1lfTwvdGg+CisgICAgPHRkIGNsYXNzPSdjaGFuZ2VzJz4KKyAgICAgIDxweTpmb3IgZWFjaD0iY2hhbmdlIGluIGZpbGUuY2hhbmdlcyI+CisgICAgICAgICR7Y2hhbmdlWzBdfTxici8+CisgICAgICA8L3B5OmZvcj4KKyAgICA8L3RkPgorICAgIDx0ZCBjbGFzcz0nZGV0YWlscyc+CisgICAgICA8cHk6Zm9yIGVhY2g9ImNoYW5nZSBpbiBmaWxlLmNoYW5nZXMiPgorICAgICAgICAke2NoYW5nZVsxXX08YnIvPgorICAgICAgPC9weTpmb3I+CisgICAgPC90ZD4KKwkgIAorICAgIDxweTppZiB0ZXN0PSJvdmVyYWxsX3kgPiAwIj4gCisgICAgIDxweTppZiB0ZXN0PSJmaWxlLm92ZXJhbGxfeSA+IDAiPgorICAgICAgPHRkIGNsYXNzPSdvdmVyYWxsJz4ke2ZpbGUub3ZlcmFsbFswXX08L3RkPgorICAgICAgPHRkIGNsYXNzPSdvdmVyYWxsJz4ke2ZpbGUub3ZlcmFsbFsxXX08L3RkPgorICAgICA8L3B5OmlmPgorICAgIDwvcHk6aWY+CisgIDwvdHI+Cis8L3B5OmZvcj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorCis8L2Jsb2NrcXVvdGU+CisKKzwvcHk6Zm9yPgorCis8aHIvPgorCis8ZGl2IHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KKzxoMj5NZXJnZSBDb21tYW5kczwvaDI+CitWZXJ5IGV4cGVyaW1lbnRhbC4gIENoYW5nZSA/Pz8gdG8gdGhlIHRvcCBvZiB0aGUgdHJlZSB5b3Ugd2FudCB0byBtZXJnZSBmcm9tIChpY3Ugb3IgaWN1NGopPGJyLz4KKzx0ZXh0YXJlYT5zdm4gbWVyZ2UgLWMgPD9jcyBlYWNoOnJldiA9IHJldmlzaW9ucyA/Pjw/Y3MgdmFyOnJldi5udW0gPz4sPD9jcyAvZWFjaCA/PiBzdm4rc3NoOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvPz8/L3RydW5rPC90ZXh0YXJlYT4KKworPGhyLz4KKzwvZGl2PgorPGhyLz4KKzxpZnJhbWUgc3JjPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2ljdWNvZGV0b29scy92MS9yZXZpZXciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwMHB4Ij4KKzxoMT48YSBocmVmPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2ljdWNvZGV0b29scy92MS9yZXZpZXciPkhlbHA8L2E+PC9oMT4KKzwvaWZyYW1lPgorCis8L3B5OmlmPgorPGhyLz4KKzxpPiRJZDogJDwvaT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYTZlY2UKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90aWNrZXRtZ3IucHkKQEAgLTAsMCArMSwxOTQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjIEF1dGhvcjogPHNybEBpY3UtcHJvamVjdC5vcmc+CisjCisKKyMgCisjIFRpY2tldCBtYW5hZ2VtZW50LgorIyBUaGlzIGNvbXBvbmVudCBtYW5hZ2VzIHRoZSByZXZpc2lvbiB0byB0aWNrZXQgbWFwLgorIworIyAyMDExLWphbi0yNwlzcmwJYWRkaW5nIElSZXBvc2l0b3J5Q2hhbmdlTGlzdGVuZXIgZnVuY3Rpb25hbGl0eSAocmVxdWlyZXMgdHJhYyAwLjEyKQorCisKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudCwgaW1wbGVtZW50cywgVHJhY0Vycm9yCitmcm9tIHRyYWMuZW52IGltcG9ydCBJRW52aXJvbm1lbnRTZXR1cFBhcnRpY2lwYW50Citmcm9tIHRyYWMuZGIgaW1wb3J0IFRhYmxlLCBDb2x1bW4sIEluZGV4LCBEYXRhYmFzZU1hbmFnZXIKK2Zyb20gdHJhYy5jb25maWcgaW1wb3J0IE9wdGlvbgorZnJvbSB0cmFjLnV0aWwudGV4dCBpbXBvcnQgZXhjZXB0aW9uX3RvX3VuaWNvZGUKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC5hcGkgaW1wb3J0IElSZXBvc2l0b3J5Q2hhbmdlTGlzdGVuZXIKKworaW1wb3J0IHJlCisKK3RrdG1ncl9zY2hlbWEgPSBbCisgICAgVGFibGUoJ3JldjJ0aWNrZXQnLCBrZXk9J3JldicpWyAgICAgICAgICMgbWFwIHJldi0+dGlja2V0CisgICAgICAgIENvbHVtbigncmV2JywgdHlwZT0naW50JyksICAgICAgICAgICMgY2hhbmdlc2V0IGlkCisgICAgICAgIENvbHVtbigndGlja2V0JywgdHlwZT0naW50JyksICAgICAgICMgdGlja2V0ICMKKyAgICAgICAgSW5kZXgoWyd0aWNrZXQnXSldLCAgICAgICAgICAgICAgICAgIyBpbmRleCBieSB0aWNrZXQKK10KKworY2xhc3MgVGlja2V0TWFuYWdlcihDb21wb25lbnQpOgorICAgIGltcGxlbWVudHMoSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudCwgSVJlcG9zaXRvcnlDaGFuZ2VMaXN0ZW5lcikKKworICAgIHRpY2tldF9wYXR0ZXJuID0gT3B0aW9uKCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnXnRpY2tldDooXGQrKScsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIkEgcmVnZXggbWF0Y2hpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcy4gR3JvdXAgMSBtdXN0IHJldHVybiBhIG51bWJlci4iIiIpCisgICAgCisgICAgZGVmIGljdV90a3RtZ3Ioc2VsZik6CisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIGtub3duX3lvdW5nZXN0ID0gLTEKKworICAgIGRlZiBlbnZpcm9ubWVudF9jcmVhdGVkKHNlbGYpOgorICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICBjb25uZWN0b3IsIF8gPSBEYXRhYmFzZU1hbmFnZXIoc2VsZi5lbnYpLl9nZXRfY29ubmVjdG9yKCkKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgZm9yIHRhYmxlIGluIHRrdG1ncl9zY2hlbWE6CisgICAgICAgICAgICBmb3Igc3RtdCBpbiBjb25uZWN0b3IudG9fc3FsKHRhYmxlKToKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZShzdG10KQorCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJJTlNFUlQgSU5UTyBzeXN0ZW0gKG5hbWUsdmFsdWUpICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoJ2ljdV90a3RtZ3InLCVzKSIsIChzZWxmLmljdV90a3RtZ3IoKSwpKQorICAgICAgICBkYi5jb21taXQoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCdEYXRhYmFzZSB1cGRhdGU6IGljdV90a3RtZ3IgdGFibGVzIHZlcnNpb24gJWQgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pY3VfdGt0bWdyKCkpCisgICAgICAgIHByaW50ICdpY3Vjb2RldG9vbHMudGlja2V0bWdyOiBOb3RlLCBmaXJzdCByZXZpZXcgd2lsbCB0YWtlIGEgd2hpbGUuXG4nCisgICAgCisgICAgZGVmIHlvdW5nZXN0X3JldihzZWxmLGRiKToKKyAgICAgICAgaWYgKHNlbGYua25vd25feW91bmdlc3QgPCAwKToKKyAgICAgICAgICAgICNwcmludCgnRGlkIG5vdCBrbm93IHlvdW5nZXN0IHZhbHVlLicpCisgICAgICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NIHN5c3RlbSBXSEVSRSBuYW1lPSdpY3VfdGt0bWdyX3lvdW5nZXN0JyIpCisgICAgICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgbm90IHJvdzoKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiSU5TRVJUIElOVE8gc3lzdGVtIChuYW1lLHZhbHVlKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoJ2ljdV90a3RtZ3JfeW91bmdlc3QnLCctMScpIikKKyAgICAgICAgICAgICAgICBkYi5jb21taXQoKQorICAgICAgICAgICAgICAgIHNlbGYua25vd25feW91bmdlc3QgPSAtMgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrbm93bl95b3VuZ2VzdCA9IGludChyb3dbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5rbm93bl95b3VuZ2VzdCA9IGtub3duX3lvdW5nZXN0CisgICAgICAgIHJldHVybiBzZWxmLmtub3duX3lvdW5nZXN0CisgICAgICAgIAorICAgIGRlZiBjaGVja19zeW5jKHNlbGYsIGxvZywgZGIsIHJlcG9zKToKKyAgICAgICAgb3VyWW91bmdlc3QgPSBzZWxmLnlvdW5nZXN0X3JldihkYikKKyAgICAgICAgdGhlaXJZb3VuZ2VzdCA9IHJlcG9zLmdldF95b3VuZ2VzdF9yZXYoKQorICAgICAgICAjbG9nLmluZm8oIlRLVDogY2hlY2tfc3luYyAlZC8lZCIgJSAob3VyWW91bmdlc3QsdGhlaXJZb3VuZ2VzdCkpCisgICAgICAgIGlmKG91cllvdW5nZXN0IDw9IHRoZWlyWW91bmdlc3QpOgorICAgICAgICAgICAgc2VsZi5yZXN5bmMobG9nLCBkYiwgcmVwb3MsIG91cllvdW5nZXN0LCB0aGVpcllvdW5nZXN0KQorICAgIAorICAgIGRlZiBlbnZpcm9ubWVudF9uZWVkc191cGdyYWRlKHNlbGYsIGRiKToKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NIHN5c3RlbSBXSEVSRSBuYW1lPSdpY3VfdGt0bWdyJyIpCisgICAgICAgIHJvdyA9IGN1cnNvci5mZXRjaG9uZSgpCisgICAgICAgIGlmIG5vdCByb3cgb3IgaW50KHJvd1swXSkgPCBzZWxmLmljdV90a3RtZ3IoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdXBncmFkZV9lbnZpcm9ubWVudChzZWxmLCBkYik6CisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSBzeXN0ZW0gV0hFUkUgbmFtZT0naWN1X3RrdG1nciciKQorICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQorICAgICAgICBpZiBub3Qgcm93OgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudF9jcmVhdGVkKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nLmluZm8oJ0RvIG5vdCBrbm93IGhvdyB0byB1cGdyYWRlIGljdXRyYXhjdG5fdGlja2V0bWdyIHRhYmxlcyB0byAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWN1X3RrdG1ncigpKQorCWN1cnNvci5jbG9zZSgpCisKKyAgICBkZWYgcmVzeW5jKHNlbGYsIGxvZywgZGIsIHJlcG9zLCBvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCk6CisgICAgICAgIHNlbGYubG9nLmluZm8oJ3Jlc3luYzogb3VyWW91bmdlc3Q9JWQgdGhlaXJZb3VuZ2VzdD0lZCcgJSAob3VyWW91bmdlc3QsIHRoZWlyWW91bmdlc3QpKQorICAgICAgICBpZiAob3VyWW91bmdlc3QgPCAwKToKKyAgICAgICAgICAgICMgc3RhcnQgYXQgcmV2IDEKKyAgICAgICAgICAgIG91cllvdW5nZXN0ID0gMQorICAgICAgICAKKyAgICAgICAgI3NlbGYudGlja2V0X3BhdHRlcm4gPSBzZWxmLmVudi5jb25maWcuZ2V0KCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnXmNsZHJidWcgKFxkKyk6JykKKworICAgICAgICAjbG9nLmluZm8oIlBhdDogJXMiICUgKHNlbGYudGlja2V0X3BhdHRlcm4pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUoc2VsZi50aWNrZXRfcGF0dGVybikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5lbnYuY29uZmlnLmdldCgnaWN1Y29kZXRvb2xzJywgJ3RpY2tldF9wYXR0ZXJuJywgJ05vbmVGb3VuZCcpCisgICAgICAgICAgICByYWlzZSBUcmFjRXJyb3IoJ0NvdWxkIG5vdCBjb21waWxlIGljdWNvZGV0b29scy50aWNrZXRfcGF0dGVybj0vJXMvIGJ1dCAvJXMvOiAlcycgJSAoc2VsZi50aWNrZXRfcGF0dGVybiwgZm91bmQsIGV4Y2VwdGlvbl90b191bmljb2RlKGUsIHRyYWNlYmFjaz1UcnVlKSkpCisKKyMgICAgICAgIHNlbGYudGlja2V0X21hdGNoID0gcmUuY29tcGlsZShzZWxmLnRpY2tldF9wYXR0ZXJuLmdldCgpKQorIyAgICAgICAgc2VsZi50aWNrZXRfbWF0Y2ggPSByZS5jb21waWxlKCcuKicpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG91cllvdW5nZXN0LCB0aGVpcllvdW5nZXN0KzEpOgorICAgICAgICAgICAgI2xvZy53YXJuaW5nKCdzeW5jaW5nOiAlZCBbJWQvJWQrMV0nLCBpLCB0aGVpcllvdW5nZXN0KQorICAgICAgICAgICAgY3NldCA9IHJlcG9zLmdldF9jaGFuZ2VzZXQoaSkKKyAgICAgICAgICAgIHNlbGYucmV2aXNpb25fY2hhbmdlZChsb2csIGNzZXQsIGksIGRiLmN1cnNvcigpKQorICAgICAgICBkYi5jb21taXQoKQorICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKTsKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInVwZGF0ZSBzeXN0ZW0gc2V0IHZhbHVlPSclcycgd2hlcmUgbmFtZT0naWN1X3RrdG1ncl95b3VuZ2VzdCciICUgKHRoZWlyWW91bmdlc3QpKQorICAgICAgICBkYi5jb21taXQoKQorICAgICAgICAjbG9nLndhcm4oInNlbGYua25vd25feW91bmdlc3Qgd2FzICVkIFslZC8lZF0iICUgKHNlbGYua25vd25feW91bmdlc3Qsb3VyWW91bmdlc3QsdGhlaXJZb3VuZ2VzdCkpIAorICAgICAgICAjIHVwZGF0ZSBrbm93biB5b3VuZ2VzdC4KKyAgICAgICAgc2VsZi5rbm93bl95b3VuZ2VzdCA9IHRoZWlyWW91bmdlc3QKKyAgICAgICAgI2xvZy53YXJuKCJzZWxmLmtub3duX3lvdW5nZXN0IG5vdyAlZCBbJWQvJWRdIiAlIChzZWxmLmtub3duX3lvdW5nZXN0LG91cllvdW5nZXN0LHRoZWlyWW91bmdlc3QpKSAKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElSZXBvc2l0b3J5Q2hhbmdlTGlzdGVuZXIgbWV0aG9kcworICAgICMgTXVzdCBjYWxsIHdpdGg6IHRyYWMtYWRtaW4gL2hvbWUvaWN1dHJhYyBjaGFuZ2VzZXQgbW9kaWZpZWQgJyhkZWZhdWx0KScgMjkzMzAgMjkzMzMgIC0gdWdseSwgaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3RyYWMtZGV2QGdvb2dsZWdyb3Vwcy5jb20vbXNnMDQ1NjguaHRtbAorICAgIGRlZiBjaGFuZ2VzZXRfbW9kaWZpZWQoc2VsZiwgcmVwb3MsIGNoYW5nZXNldCwgb2xkX2NoYW5nZXNldCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGlja2V0X21hdGNoID0gcmUuY29tcGlsZShzZWxmLnRpY2tldF9wYXR0ZXJuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmVudi5jb25maWcuZ2V0KCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnTm9uZUZvdW5kJykKKyAgICAgICAgICAgIHJhaXNlIFRyYWNFcnJvcignQ291bGQgbm90IGNvbXBpbGUgaWN1Y29kZXRvb2xzLnRpY2tldF9wYXR0ZXJuPS8lcy8gYnV0IC8lcy86ICVzJyAlIChzZWxmLnRpY2tldF9wYXR0ZXJuLCBmb3VuZCwgZXhjZXB0aW9uX3RvX3VuaWNvZGUoZSwgdHJhY2ViYWNrPVRydWUpKSkKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIkRFTEVURSBGUk9NIHJldjJ0aWNrZXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUgcmV2PSAlcyAiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoY2hhbmdlc2V0LnJldikpCisgICAgICAgIHNlbGYucmV2aXNpb25fY2hhbmdlZChzZWxmLmxvZywgY2hhbmdlc2V0LCBjaGFuZ2VzZXQucmV2LCBkYi5jdXJzb3IoKSkKKwlkYi5jb21taXQoKQorCSNzZWxmLmxvZy5lcnJvcigiY2hhbmdlc2V0X2FkZGVkOiAlc1xuIiAlIGNoYW5nZXNldC5yZXYpCisKKyAgICBkZWYgY2hhbmdlc2V0X2FkZGVkKHNlbGYsIHJlcG9zLCBjaGFuZ2VzZXQpOgorICAgICAgICBtZXNzYWdlID0gY2hhbmdlc2V0Lm1lc3NhZ2Ugb3IgJy0tJworCSNzZWxmLmxvZy5lcnJvcigiY2hhbmdlc2V0X2FkZGVkOiAlc1xuIiAlIGNoYW5nZXNldC5yZXYpCisKKyAgICAjIElSZXBvc2l0b3J5T2JzZXJ2ZXIgZnVuY3Rpb24KKyAgICBkZWYgcmV2aXNpb25fY2hhbmdlZChzZWxmLCBsb2csIGNzZXQsIG5leHRfeW91bmdlc3QsIGN1cnNvcik6CisgICAgICAgICMgc3luYyB0aGUgJ3JldjJ0aWNrZXQnIHRhYmxlCisgICAgICAgIG1lc3NhZ2UgPSBjc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAjIGNhbiB3ZSBsb2FkIGEgdGlja2V0IGZyb20gaXQ/ICAgInRpY2tldDoxMjM0OiBNZXNzYWdlIgorICAgICAgICByZXMgPSBzZWxmLnRpY2tldF9tYXRjaC5tYXRjaChtZXNzYWdlLnN0cmlwKCkpCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHRpY2tuYW1lID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW50KHJlcy5ncm91cCgxKSkgIyBzaG91bGQgYmUgaW50CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoJ1JldmlzaW9uIFslc10gaGFkIHVucGFyc2VhYmxlIHRpY2tldCBudW1iZXIgWyVzXTogWyVzXScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRfeW91bmdlc3QsIHRpY2tuYW1lLCBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHRyeToKKwkJI2xvZy53YXJuaW5nKCdyJXM9IyVzJyAlIChzdHIobmV4dF95b3VuZ2VzdCksIHRpY2tuYW1lKSkKKyAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIHJldjJ0aWNrZXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHJldix0aWNrZXQpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFMVUVTICglcywlcykgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG5leHRfeW91bmdlc3QpLCB0aWNrbmFtZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOiAjICphbm90aGVyKiAxLjEuIHJlc3luYyBhdHRlbXB0IHdvbiAKKyAgICAgICAgICAgICAgICBsb2cud2FybmluZygncmV2MnRpY2tldCAlcyBjb3VsZCBub3QgY2FjaGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dF95b3VuZ2VzdCwgZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cud2FybmluZygnUmV2aXNpb24gJXMgaGFkIHVubWF0Y2hlZCBtZXNzYWdlICIlcyIgZm9yIHBhdHRlcm4gLyVzLycgJQorICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRfeW91bmdlc3QsIGNzZXQubWVzc2FnZSwgc2VsZi50aWNrZXRfcGF0dGVybikpCisgICAgCisgICAgZGVmIHJlcG9zaXRvcnlfcmVzeW5jKHNlbGYsIGN1cnNvcik6CisgICAgICAgIGN1cnNvci5leGVjdXRlKCJERUxFVEUgRlJPTSByZXYydGlja2V0Iik7CisgICAgICAgIAorICAgIGRlZiB0a3QycmV2cyhzZWxmLCBsb2csIGRiLCByZXBvcywgcmVxLCB0aWNrZXQpOgorICAgICAgICAiIiJHaXZlbiBhIHRpY2tldCwgcmV0dXJuIGEgbGlzdCBvZiByZXZzLgorICAgICAgICAiIiIKKyAgICAgICAgCisgICAgICAgIHNlbGYuY2hlY2tfc3luYyhsb2csIGRiLCByZXBvcykKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBydC5yZXYgZnJvbSByZXYydGlja2V0IGFzIHJ0IHdoZXJlIHJ0LnRpY2tldCA9ICVkIG9yZGVyIGJ5IHJ0LnJldiIgJSBpbnQodGlja2V0KSkKKyAgICAgICAgcmV2cyA9IFtdCisgICAgICAgIGZvciByZXYsIGluIGN1cnNvcjoKKyAgICAgICAgICAgIHJldiA9IGludChyZXYpCisgICAgICAgICAgICByZXZzLmFwcGVuZChyZXYpCisJY3Vyc29yLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHJldnMKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RrdGxpc3QucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90a3RsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZGU0OTYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90a3RsaXN0LnB5CkBAIC0wLDAgKzEsMTcxIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK2ltcG9ydCByZQorCitpbXBvcnQgc3lzCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCAqCitmcm9tIHRyYWMudXRpbCBpbXBvcnQgTWFya3VwCitmcm9tIHRyYWMud2ViIGltcG9ydCBJUmVxdWVzdEhhbmRsZXIKK2Zyb20gdHJhYy53ZWIuY2hyb21lIGltcG9ydCBhZGRfc3R5bGVzaGVldCwgSU5hdmlnYXRpb25Db250cmlidXRvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZW1wbGF0ZVByb3ZpZGVyCitmcm9tIHRyYWMud2ViLmhyZWYgaW1wb3J0IEhyZWYKKyNmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wud2ViX3VpLmNoYW5nZXNldCBpbXBvcnQgSUNoYW5nZXNldFJhbmdlTGluaworZnJvbSB0cmFjLndpa2kgaW1wb3J0IHdpa2lfdG9faHRtbCwgd2lraV90b19vbmVsaW5lciwgSVdpa2lTeW50YXhQcm92aWRlciwgXAorICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlcgorZnJvbSB0cmFjLnRpY2tldCBpbXBvcnQgVGlja2V0CisKKworCitjbGFzcyBUaWNrZXRsaXN0TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcikKKyMgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIsSUNoYW5nZXNldFJhbmdlTGluaykKKworICAgIGRlZiByZXZpc2lvbl9yYW5nZV9saW5rKHNlbGYsIHJlcSwgYmFzZSwgc3RhcnQsIGVuZCk6CisgICAgICAgIHJldHVybiAoJ1RpY2tldCBMaXN0JywgcmVxLmhyZWYoJ3RrdGxpc3QnLG9sZF9wYXRoPWJhc2UsbmV3X3BhdGg9YmFzZSxvbGQ9c3RhcnQsbmV3PWVuZCkpCisKKyAgICBfcmVxdWVzdF9yZSA9IHJlLmNvbXBpbGUociIvdGt0bGlzdCg/Oi8oW14vXSspKT8oLy4qKT8kIikKKworICAgIGRlZiBtYXRjaF9yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5fcmVxdWVzdF9yZSwgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICAjb2ssIHdoYXQgYXJlIHdlIGFib3V0LgorICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICB0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICByZXZsaXN0ID0ge30gIyBkaWN0IG9mIHJldmlzaW9uLT4KKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeShyZXEuYXV0aG5hbWUpCisKKyAgICAgICAgaWYgbm90IHJlcS5wZXJtLmhhc19wZXJtaXNzaW9uKCdUSUNLRVRfTU9ESUZZJyk6CisgICAgICAgICAgICByZXR1cm4gcmVxLnJlZGlyZWN0KHJlcS5ocmVmLmJyb3dzZXIoKSkKKworICAgICAgICAjIHNob3J0Y3V0IC0gaWYgInJldnMiIGlzIHNldCwganVzdCB1c2UgdGhhdAorICAgICAgICByZXZzID0gcmVxLmFyZ3MuZ2V0KCdyZXZzJykKKyAgICAgICAgaWYgcmV2cyBhbmQgbGVuKHJldnMpPjA6CisgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICJ0ZXh0L2h0bWwiCisgICAgICAgICAgIGFkZF9zdHlsZXNoZWV0KHJlcSwgJ2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgICAgcmVxLmhkZlsndGl4LnJldnMnXSA9IHJldnMKKyAgICAgICAgICAgaXRlbXMgPSByZXZzLnNwbGl0KCkKKyAgICAgICAgICAgb3V0c3RyID0gJzE9MCAnCisgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgcmV2ID0gaW50KGl0ZW0pICMgbWF5IGZhaWwKKyAgICAgICAgICAgICAgIG91dHN0ciA9ICdydC5yZXY9JWQnJShyZXYpCisgICAgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXSA9IG91dHN0ciAgCisgICAgICAgICAgICMgdGVzdCAtIGdldCByZWxldmFudCByZXZzCisgICAjICAgICAgICBwcmludCAib3RpbWU9JXMsIG50aW1lPSVzIiUodHlwZShvdGltZSksdHlwZShudGltZSkpCisgICAgICAgICAgICNjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IGRpc3RpbmN0IHQuaWQsdC5zdW1tYXJ5IGZyb20gdGlja2V0IGFzIHQscmV2aXNpb24gYXMgciwgcmV2MnRpY2tldCBhcyBydCAiCisgICAgICAgICAgICMgICAgICAgICAgICAgICAiIHdoZXJlIHQuaWQgPSBydC50aWNrZXQgYW5kICglcykgb3JkZXIgYnkgdC5pZCIlKG91dHN0cikpCisgICAgICAgICAgIGFsbHNxbCA9ICJzZWxlY3QgZGlzdGluY3QgdGlja2V0IGZyb20gcmV2MnRpY2tldCBhcyBydCB3aGVyZSAlcyBvcmRlciBieSBydC50aWNrZXQiJShvdXRzdHIpCisgICAgICAgICAgIGFsbHNxbCA9ICJzZWxlY3QgdGlja2V0IGZyb20gcmV2MnRpY2tldCB3aGVyZSByZXY9JXMgb3JkZXIgYnkgdGlja2V0IgorICAgICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICAgICMgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCB0aWNrZXQgZnJvbSByZXYydGlja2V0IHdoZXJlIHJldj0lcyBvcmRlciBieSB0aWNrZXQiLCgiMjI5MTMiLCkpCisgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJzZWxlY3QgcnQucmV2IGZyb20gcmV2MnRpY2tldCBhcyBydCB3aGVyZSBydC50aWNrZXQgPSAlZCBvcmRlciBieSBydC5yZXYiICUgaW50KDYwMTApKQorICAgICAgICAgICB0aWNrZXQgPSAwCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXSA9IGFsbHNxbCAgCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXT0iemVybyIKKyAgICAgICAgICAgZm9yIHRrdCBpbiBjdXJzb3I6CisgICAgICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ109dGt0CisgICAgICAgICAgICAgICBzdW1tID0gIiI7CisgICAgICAgICAgICAgICAjc3lzLnN0ZGVyci53cml0ZSgiIHRrdCAlcyBzdW1tICVzIGZyb20gKGQtZCkiICUgKHRrdCxzdW1tKSkKKyAgICAgICAgICAgICAgIHRpY2tldCA9IHRpY2tldCArIDEKKyAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9IHN1bW0KKyAgICAgICAgICAgICAgICAgICAjcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggc3VtbSwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPVRydWUgKQorICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXT1lCisgICAgICAgICAgICAgICAgICAgI3JlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRrdAorICAgICAgICAgICAgICAgI2FhID0gTWFya3VwKCI8YSBjbGFzcz1cIm5ldyB0aWNrZXRcIiBocmVmPVwiJXNcIiB0aXRsZT1cIlRpY2tldCB4IChuZXcpXCI+IyVzPC9hPiIlKHJlcS5ocmVmLnRpY2tldCh0a3QpLHRrdCkpCisgICAgICAgICAgICAgICAjcmVxLmhkZlsndGlja2V0cy4lZC5odG1sJyAlIHRpY2tldF0gPSBhYQorICAgICAgICAgICAjIHNldCBSREYgaGVyZQorICAgICAgICAgICByZXR1cm4gJ3RrdHJldnMuY3MnLCBjb250ZW50X3R5cGUKKworICAgICAgICBuZXdfcGF0aCA9IHJlcS5hcmdzLmdldCgnbmV3X3BhdGgnKQorICAgICAgICBuZXdfcmV2ID0gcmVxLmFyZ3MuZ2V0KCduZXcnKQorICAgICAgICBvbGRfcGF0aCA9IHJlcS5hcmdzLmdldCgnb2xkX3BhdGgnKQorICAgICAgICBvbGRfcmV2ID0gcmVxLmFyZ3MuZ2V0KCdvbGQnKQorCisgICAgICAgIG5ld19wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgobmV3X3BhdGgpCisgICAgICAgIG5ld19yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG5ld19yZXYpCisgICAgICAgIG9sZF9wYXRoID0gcmVwb3Mubm9ybWFsaXplX3BhdGgob2xkX3BhdGgpCisgICAgICAgIG9sZF9yZXYgPSByZXBvcy5ub3JtYWxpemVfcmV2KG9sZF9yZXYpCisKKworICAgICAgICBvbGRfcmV2ID0gaW50KG9sZF9yZXYpCisgICAgICAgIG5ld19yZXYgPSBpbnQobmV3X3JldikKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5kaWZmX2hyZWYnXSA9IHJlcS5ocmVmKCdjaGFuZ2VzZXQnLG9sZF9wYXRoPW9sZF9wYXRoLG5ldz1uZXdfcmV2LG5ld19wYXRoPW5ld19wYXRoLG9sZD1vbGRfcmV2KQorCisgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3JldiddID0gb2xkX3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3JldiddID0gbmV3X3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3BhdGgnXSA9IG9sZF9wYXRoCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcGF0aCddID0gbmV3X3BhdGgKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAjIGZpcnN0LCBnZXQgcmVsZXZhbnQgY2hhbmdlcy4KKyAgICAgICAgcmVxLmhkZlsndGFyZ2V0X3BhdGgnXSA9ICcuJzsKKyAgICAgICAgIyBva2F5LiBtYW51YWxseSB0cm9tcCB0aHJvdWdoICdlbQorICAgICAgICBvc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChvbGRfcmV2KTsKKyAgICAgICAgbnNldCA9IHJlcG9zLmdldF9jaGFuZ2VzZXQobmV3X3Jldik7CisgICAgICAgIG90aW1lID0gaW50KG9zZXQuZGF0ZSkKKyAgICAgICAgbnRpbWUgPSBpbnQobnNldC5kYXRlKQorICAgICAgICAKKyAgICAgICAgbm9ybV90cj0ic3R5bGU9J2JvcmRlcjogMXB4IGRhc2hlZCBncmVlbjsgYmFja2dyb3VuZC1jb2xvcjogI0NGQzsnIgorICAgICAgICBjbG9zZWRfdHI9InN0eWxlPSdjb2xvcjogIzY2NjsnIgorICAgICAgICBub3Jldl90cj0ic3R5bGU9J2JhY2tncm91bmQtY29sb3I6I0ZERDsgYm9yZGVyOiAxcHggc29saWQgI0Y5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7JyIKKworICAgICAgICByZXEuaGRmWydzYW1wbGUubm9ybS50ciddID0gbm9ybV90cgorICAgICAgICByZXEuaGRmWydzYW1wbGUuY2xvc2VkLnRyJ10gPSBjbG9zZWRfdHIKKyAgICAgICAgcmVxLmhkZlsnc2FtcGxlLm5vcmV2LnRyJ10gPSBub3Jldl90cgorICAgICAgICAKKyMgICAgICAgIHByaW50ICIgc2VhcmNoaW5nIGluICAoJXMtJXMpIiAlIChvdGltZSwgbnRpbWUpCisKKyAgICAgICAgIyB0ZXN0IC0gZ2V0IHJlbGV2YW50IHJldnMKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyMgICAgICAgIHByaW50ICJvdGltZT0lcywgbnRpbWU9JXMiJSh0eXBlKG90aW1lKSx0eXBlKG50aW1lKSkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBkaXN0aW5jdCB0LmlkLHQuc3VtbWFyeSx0Lm93bmVyLCB0Lm1pbGVzdG9uZSwgdC5zdGF0dXMgIgorICAgICAgICAgICAgICAgICAgICAgICAiICwgYy52YWx1ZSAiICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIiBmcm9tIHRpY2tldCBhcyB0LHJldmlzaW9uIGFzIHIsIHJldjJ0aWNrZXQgYXMgcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAiIGxlZnQgam9pbiB0aWNrZXRfY3VzdG9tIGFzIGMgIgorICAgICAgICAgICAgICAgICAgICAgICAiIG9uICAoIGMubmFtZSA9ICdyZXZ3JyBBTkQgYy50aWNrZXQgPSB0LmlkICkgIgorIyAgICAgICAgICAgICAgICAgICAgICAgIiAsIHRpY2tldF9jdXN0b20gYXMgYyAiCisgICAgICAgICAgICAgICAgICAgICAgICIgd2hlcmUgdC5pZCA9IHJ0LnRpY2tldCBhbmQgcnQucmV2ID0gci5yZXYgYW5kIHIudGltZSA+ICVzIGFuZCByLnRpbWUgPD0gJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGV4aXN0cyAoIHNlbGVjdCBuYy5yZXYgZnJvbSBub2RlX2NoYW5nZSBhcyBuYyB3aGVyZSBuYy5yZXY9ci5yZXYgYW5kIG5jLnBhdGggbGlrZSAlcyApICIKKyAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIGJ5IHQuaWQiLCAoc3RyKG90aW1lKSwgc3RyKG50aW1lKSwgKG9sZF9wYXRoICsgIiUiKSkpCisgICAgICAgIHRpY2tldCA9IDAKKyAgICAgICAgZm9yIHRrdCxzdW1tLG93bnIsbWlsZXN0b25lLHN0YXR1cywgcmV2dyBpbiBjdXJzb3I6CisjICAgICAgICAgICAgcHJpbnQgIiB0a3QgJXMgc3VtbSAlcyBmcm9tICglZC0lZCkiICUgKHRrdCxzdW1tLCBvdGltZSwgbnRpbWUpCisgICAgICAgICAgICB0aWNrZXQgPSB0aWNrZXQgKyAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSBzdW1tCisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggc3VtbSwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPVRydWUgKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRrdAorICAgICAgICAgICAgYWEgPSBNYXJrdXAoIjxhIGNsYXNzPVwibmV3IHRpY2tldFwiIGhyZWY9XCIlc1wiIHRpdGxlPVwiVGlja2V0IHggKG5ldylcIj4jJXM8L2E+IiUocmVxLmhyZWYudGlja2V0KHRrdCksdGt0KSkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuaHRtbCcgJSB0aWNrZXRdID0gYWEKKyAgICAgICAgICAgIGFhID0gTWFya3VwKCI8YSBjbGFzcz1cIm5ldyB0aWNrZXRcIiBocmVmPVwiJXNcIiB0aXRsZT1cIlRpY2tldCB4IChuZXcpXCI+IyVzPC9hPiIlKHJlcS5ocmVmLnRpY2tldCh0a3QpLHRrdCkpCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm93bmVyJyAlIHRpY2tldF0gPSBvd25yCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm1pbGVzdG9uZScgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggIm1pbGVzdG9uZTolcyIlbWlsZXN0b25lICwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPUZhbHNlICkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQucmV2aWV3ZXInICUgdGlja2V0XSA9IHJldncKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuc3RhdHVzaHRtbCcgJSB0aWNrZXRdID0gd2lraV90b19vbmVsaW5lciggIiMlcyIlKHRrdCksIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1GYWxzZSApCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmh0bWwnICUgdGlja2V0XSA9IGFhCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBub3JtX3RyCisgICAgICAgICAgICBpZiBzdGF0dXMgYW5kIHN0YXR1cy5zdGFydHN3aXRoKCdjbG9zZWQnKToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBjbG9zZWRfdHIKKyAgICAgICAgICAgIGlmICggbm90IHJldncgKSBvciBsZW4ocmV2dyk8MToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnRyJyAlIHRpY2tldF0gPSBub3Jldl90cgorICAgICAgICAKKyAgICAgICAgcmV0dXJuICd0a3RsaXN0LmNzJywgY29udGVudF90eXBlCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RyYWNjaGVjay5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RyYWNjaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTVkMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdHJhY2NoZWNrLnB5CkBAIC0wLDAgKzEsNzUgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE0IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworCisjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBpbnZva2VkIGZyb20gdGhlIHN1YnZlcnNpb24gcHJlLWNvbW1pdCBob29rIGp1c3QgbGlrZSB0aGUgdHJhYyBwbHVnaW4KKyMKKyMgIFJFUE9TPSIkMSIKKyMgIFRYTj0iJDIiCisjICBUUkFDX0VOVj0iL3NvbWV3aGVyZS90cmFjL3Byb2plY3QvIgorIyAgTE9HPWAvdXNyL2Jpbi9zdm5sb29rIGxvZyAtdCAiJFRYTiIgIiRSRVBPUyJgCisjICAvcGF0aC90by90cmFjY2hlY2sgIiRUUkFDX0VOViIgIiRMT0ciID4mMiB8fCBleGl0IDEKKworaW1wb3J0IHN5cywgcmUKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBUcmFjRXJyb3IKK2Zyb20gdHJhYy5lbnYgaW1wb3J0IG9wZW5fZW52aXJvbm1lbnQKK2Zyb20gdHJhYy5yZXNvdXJjZSBpbXBvcnQgUmVzb3VyY2VOb3RGb3VuZAorZnJvbSB0cmFjLnRpY2tldC5tb2RlbCBpbXBvcnQgVGlja2V0Citmcm9tIHRyYWMudXRpbC50ZXh0IGltcG9ydCBleGNlcHRpb25fdG9fdW5pY29kZQorCitva3N0YXR1cyA9IFsnbmV3JywnYWNjZXB0ZWQnLCdyZXZpZXdpbmcnXQorCitkZWYgcnVuKGFyZ3M9Tm9uZSk6CisgICAgIiIidHJhYyBjaGVjayBzY3JpcHQiIiIKKyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICBlbnYgPSBvcGVuX2Vudmlyb25tZW50KGFyZ3NbMF0pCisKKyAgICB0aWNrZXRfcGF0dGVybiA9IGVudi5jb25maWcuZ2V0KCdpY3Vjb2RldG9vbHMnLCAndGlja2V0X3BhdHRlcm4nLCAnTm9uZUZvdW5kJykKKyAgICB0aWNrZXRfbWF0Y2ggPSBOb25lCisKKyAgICBkZWYgbHVzYWdlKCk6CisgICAgICAgIHByaW50ICJQbGVhc2UgbWFrZSB5b3VyIG1lc3NhZ2UgbWF0Y2ggLyVzL1xuIGFuZCB1c2UgYW4gb3BlbiB0aWNrZXQgKE9uZSBvZiB0aGVzZTogJXMpIiAlICh0aWNrZXRfcGF0dGVybiwgc3RyKG9rc3RhdHVzKSkKKyAgICAgICAgcHJpbnQgIlNlZSAlcy93aWtpL1RyYWNDaGVjayBmb3IgbW9yZSBkZXRhaWxzLiIgICUgZW52LmJhc2VfdXJsCisKKyAgICB0cnk6CisgICAgICAgIHRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUodGlja2V0X3BhdHRlcm4pCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgIyBub3Qgc29ycnk/CisgICAgICAgIHJhaXNlIFRyYWNFcnJvcignKioqIElOVEVSTkFMIEVSUk9SOiBDb3VsZCBub3QgY29tcGlsZSBpY3Vjb2RldG9vbHMudGlja2V0X3BhdHRlcm49LyVzLzogJXMnICUgKHRpY2tldF9wYXR0ZXJuLCBleGNlcHRpb25fdG9fdW5pY29kZShlLCB0cmFjZWJhY2s9VHJ1ZSkpKQorICAgIHJlcyA9IHRpY2tldF9tYXRjaC5tYXRjaChhcmdzWzFdLnN0cmlwKCkpCisgICAgaWYgcmVzOgorICAgICAgICB0aWNrbmFtZSA9IHJlcy5ncm91cCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbnQocmVzLmdyb3VwKDEpKSAjIHNob3VsZCBiZSBpbnQKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50KCcqKiogU29ycnksICIlcyIgaXMgbm90IGEgdmFsaWQgbnVtYmVyIHdoZW4gcGFyc2luZyAiJXMiOiAlcy4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpY2tuYW1lLCBhcmdzWzFdLCBlKSkKKyAgICAgICAgICAgIGx1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCcqKiogU29ycnksIGNvdWxkIG5vdCBwYXJzZSBhIHRpY2tldCBudW1iZXIgZnJvbSB5b3VyIGNvbW1pdCBtZXNzYWdlICIlcyIuJyAlCisgICAgICAgICAgICAgIChhcmdzWzFdKSkKKyAgICAgICAgbHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBpZCA9IGludChyZXMuZ3JvdXAoMSkpCisgICAgdHJ5OgorICAgICAgICB0aWNrZXQgPSBUaWNrZXQoZW52LCBpZCkKKyAgICAgICAgc3RhdHVzID0gdGlja2V0LnZhbHVlc1snc3RhdHVzJ10KKyAgICAgICAgaWYgc3RhdHVzIGluIG9rc3RhdHVzOgorICAgICAgICAgICAgIyBwcmludCAiT2theSEgWW91IGFyZSBjb21taXR0aW5nIGFnYWluc3QgdGlja2V0ICMlZCB3aGljaCBpcyBpbiBzdGF0ZSAnJXMnOiAlcyIgJSAoaWQsc3RhdHVzLHRpY2tldC52YWx1ZXNbJ3N1bW1hcnknXSkgIyAoZmFpbHMgd2l0aCBjb2RlYyBlcnJvci0gYW5kLCB1bm5lZWRlZC4gKQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIqKiogU29ycnksIHRpY2tldCAjJWQgaXMgJyVzJyBhbmQgaXMgbm90IG9wZW4gZm9yIGNvbW1pdHM6ICVzIiAlIChpZCxzdGF0dXMsdGlja2V0LnZhbHVlc1snc3VtbWFyeSddKQorICAgICAgICAgICAgbHVzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgZXhjZXB0IChSZXNvdXJjZU5vdEZvdW5kKToKKyAgICAgICAgcHJpbnQgIioqKiBTb3JyeSwgdGlja2V0ICMlZCBkb2VzIG5vdCBleGlzdC4iICUgKGlkKQorICAgICAgICBsdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHN5cy5leGl0KDApCisKKyMgbWFrZSB0aGlzIGZpbGUgcnVubmFibGUKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQocnVuKCkpCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2xpY2Vuc2UuaHRtbCBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvbGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTAyNTIKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUxIEBACis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+PC9tZXRhPgorPHRpdGxlPklDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlcjwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IEJHQ09MT1I9IiNmZmZmZmYiPgorPGgyPklDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlcjwvaDI+CisKKzxwPkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0U8L3A+CisKKzxwPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMTAgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCis8L3A+Cis8cD4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCis8L3A+Cis8cD4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAordG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgordGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorPC9wPgorPHA+CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCAKK0lOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCitSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK05FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKzwvcD4KKzxwPgorRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZQordXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluCit0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorPC9wPgorCis8aHI+Cis8cD48c21hbGw+CitBbGwgdHJhZGVtYXJrcyBhbmQgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKzwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9yZWFkbWUudHh0IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjRlMTIKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL3JlYWRtZS50eHQKQEAgLTAsMCArMSw3NiBAQAorSUNVIENvZGUgVG9vbHMgcGx1Z2luCisKK0NvcHlyaWdodCAoQykgMjAxMC0yMDE0IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorU2VlIGxpY2Vuc2UuaHRtbCBmb3IgdGhlIGxpY2Vuc2UgZmlsZS4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlCitJQ1UgcHJvamVjdCBhbmQgaXMgdW5kZXIgdGhlIHNhbWUgbGljZW5zZS4KKworRG9jczogIGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2ljdWNvZGV0b29scy9ob21lCisKK1JlcXVpcmVtZW50czoKKwlUcmFjICgwLjExIG9yIDAuMTIrPykKKwlSZXBvc2l0b3J5CisKK0luc3RhbGxpbmc6CisJMS4gaW5zdGFsbCB0aGUgcGx1Z2luIC0gYXQgbGVhc3QgdGhlIHRpY2tldG1hbmFnZXIgYW5kIHJldmlldyBwb3J0aW9uLgorCisgICAgICAgICBhLiBUaGVyZSBpcyBubyBzb3VyY2UgcmVsZWFzZSBhdCB0aGlzIHRpbWU6IEkgcmVjb21tZW5kCisgICAgICAgICAgICAgdGhhdCB5b3UgY2hlY2sgb3V0IHRoaXMgY29kZSB3aXRoIHN2bgorICAgICAgICAgICAgIGFuZCBpbiB0aGlzIGRpcmVjdG9yeSwgcnVuOgorICAgICAgICAgICAgICAgICJweXRob24gc2V0dXAucHkgZGV2ZWxvcCIKKworCSBiLiBJbiB0cmFjLmluaSB1bmRlciAnW2NvbXBvbmVudHNdJyBhZGQ6CisJCWljdWNvZGV0b29scy5yZXZpZXcucmV2aWV3bW9kdWxlID0gZW5hYmxlZAorCQlpY3Vjb2RldG9vbHMudGlja2V0bWdyLnRpY2tldG1hbmFnZXIgPSBlbmFibGVkCisKKwlOT1RFOiBEQ1VUIGFuZCBUS1RMSVNUIHBhcnRzIGFyZSBub3Qgd29ya2luZyB5ZXQuCisJRG9uJ3QgYm90aGVyIHRvIGVuYWJsZSB0aGVtLgorCisJMi4gaW4geW91ciB0cmFjLmluaSBkZXNjcmliZSBob3cgeW91ciBjaGFuZ2VzZXRzIGRlc2NyaWJlIGEgdGlja2V0LgorCU91ciBjaGFuZ2VzZXRzIGxvb2sgbGlrZSB0aGlzOiAgInRpY2tldDoxMjM0OiBmaXhlZCB0aGUgYnJva2VuIGNvZGUiCisJV2UgdXNlIHRoaXMgcmVnZXg6CisKKwkgICBbaWN1Y29kZXRvb2xzXQorCSAgIHRpY2tldF9wYXR0ZXJuID0gXnRpY2tldDooXGQrKQorCisJMy4geW91IG1heSBuZWVkIHRvIHJ1biB0cmFjLWFkbWluIDxlbnZpcm9ubWVudD4gdXBncmFkZQorCisJNC4gR3JhbnQgcGVybWlzc2lvbiBvZiBJQ1VSRVZJRVdfVklFVyB0byB3aG9tZXZlciB5b3Ugd2FudCB0bworCSAgIGJlIGFibGUgdG8gcmV2aWV3IHRpY2tldHMuCisKKwk1LiBOb3csIGFueSB0aWNrZXQgd2lsbCBoYXZlIHNvbWV0aGluZyBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lciB3aGljaCBzYXlzOgorCSAgICAgIk5vIGNvbW1pdHMiIC0gbm8gY29tbWl0cyBhZ2FpbnN0IHRoaXMgdGlja2V0CisKKwkgICAgICJSZXZpZXcgMSBjb21taXRzIiAgLSB0aGVyZSBpcyBvbmx5IG9uZSBjb21taXQuIENsaWNraW5nIHRoaXMgbGluaworCSAgICAgICAgICAgICB3aWxsIGp1c3QgdGFrZSB5b3UgdG8gdGhhdCBzaW5nbGUgY2hhbmdlc2V0LgorCisJICAgICAgIlJldmlldyBuIGNvbW1pdHMiICAtIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGNvbW1pdHMgYWdhaW5zdCB0aGlzCisJICAgICAgICAgICAgIHRpY2tldC4KKworCitUcm91Ymxlc2hvb3Rpbmc6CisKK1E6IE15IGNvbW1pdHMgYXJlbid0IGJlaW5nIGZvdW5kIQorQTogQ2hlY2sgdGhlIGRlYnVnIGxvZy4gSXQgd2lsbCBub3RlIGNvbW1pdHMgd2l0aCB1bnBhcnNlYWJsZSBtZXNzYWdlcworCitROiBIb3cgZG8gSSByZXN5bmMgdGhlIGNvbW1pdHM/CitBOiBVbnRpbCB3ZSBpbXBsZW1lbnQgdHJhYyAwLjEyIGNoYW5nZXNldCBsaXN0ZW5lcnMsIHlvdSBjYW4gZG8gdGhpczoKKworICAgIDAuICBiYWNrIHVwIHlvdXIgcGF0aC90by9lbnYvZGIvdHJhYy5kYgorCisgICAgMS4gJCBzcWxpdGUzICBwYXRoL3RvL2Vudi9kYi90cmFjLmRiCisKKyAgICAyLiBzcWxpdGU+IGRlbGV0ZSBmcm9tIHJldjJ0aWNrZXQ7CisKKyAgICAzLiBzcWxpdGU+IHVwZGF0ZSBzeXN0ZW0gc2V0IHZhbHVlPSctMScgd2hlcmUgbmFtZT0naWN1X3RrdG1ncl95b3VuZ2VzdCc7CisKKyAgICA0LiBzcWxpdGU+ICAucXVpdAorCitOb3cgdGhlIHRpY2tldCBtYW5hZ2VyIHdpbGwgcmUtc3luYyB0aGUgZmlyc3QgdGltZSB5b3UgaGl0IGEgdGlja2V0LgorCitSRVNUUklDVCBDSEVDS0lOUworIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiBpY3Vjb2RldG9vbHMvdHJhY2NoZWNrLnB5LgorIG5vdGUgdGhhdCAvcGF0aC90by90cmFjY2hlY2sgaXMgdGhlIHBhdGggdG8gdGhlIGluc3RhbGxlZCAidHJhY2NoZWNrIiBzY3JpcHQsCisgbm90IHRoZSAndHJhY2NoZWNrLnB5JyBzb3VyY2UgZmlsZS4KKworRklMSU5HIEJVR1MvRkVBVFVSRSBSRVFVRVNUUzoKKyAtIFNlZSBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pY3Vjb2RldG9vbHMvaG9tZSB0byBmaWxlIG9yIHZpZXcgYnVncy4KZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAuY2ZnIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyM2YyYgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAuY2ZnCkBAIC0wLDAgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorW2VnZ19pbmZvXQordGFnX2J1aWxkID0gZGV2Cit0YWdfc3ZuX3JldmlzaW9uID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjExN2E4MAotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAucHkKQEAgLTAsMCArMSwzOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKworZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcworCitQQUNLQUdFID0gJ0ljdUNvZGVUb29scycKK1ZFUlNJT04gPSAnMC4wLjInCisKK3NldHVwKAorICAgIG5hbWU9UEFDS0FHRSwgdmVyc2lvbj1WRVJTSU9OLAorICAgIGRlc2NyaXB0aW9uPSdNaXNjZWxsYW5lb3VzIElDVSBFeHRlbnNpb25zIHRvIFRyYWMnLAorICAgIGF1dGhvcj0iU3RldmVuIFIuIExvb21pcyIsIGF1dGhvcl9lbWFpbD0ic3JsQGljdS1wcm9qZWN0Lm9yZyIsCisgICAgbGljZW5zZT0nQlNEJywgdXJsPSdodHRwOi8vaWN1LXByb2plY3Qub3JnJywKKyAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9Wydlel9zZXR1cCcsICcqLnRlc3RzKiddKSwKKyAgICBwYWNrYWdlX2RhdGE9eworICAgICAgICAnaWN1Y29kZXRvb2xzJzogWworICAgICAgICAgICAgJ2h0ZG9jcy9jc3MvKi5jc3MnLAorICAgICAgICAgICAgJ3RlbXBsYXRlcy8qLmh0bWwnLAorIyMgICAgICAgICAgICAnaHRkb2NzL2ltZy8qLnBuZycsCisgICAgICAgICAgICdodGRvY3MvanMvKi5qcycsCisgICAgICAgIF0KKyAgICB9LAorICAgIGVudHJ5X3BvaW50cyA9IHsKKyAgICAgICAgJ3RyYWMucGx1Z2lucyc6IFsKKyAgICAgICAgICAgICdpY3Vjb2RldG9vbHMudGlja2V0bWdyID0gaWN1Y29kZXRvb2xzLnRpY2tldG1ncicsCisgICAgICAgICAgICAnaWN1Y29kZXRvb2xzLnJldmlldyA9IGljdWNvZGV0b29scy5yZXZpZXcnLAorICAgICAgICAgICAgJ2ljdWNvZGV0b29scy50a3RsaXN0ID0gaWN1Y29kZXRvb2xzLnRrdGxpc3QnLAorICAgICAgICAgICAgJ2ljdWNvZGV0b29scy5kY3V0ID0gaWN1Y29kZXRvb2xzLmRjdXQnCisgICAgICAgIF0sCisgICAgICAgICdjb25zb2xlX3NjcmlwdHMnOiBbCisgICAgICAgICAgICAndHJhY2NoZWNrID0gaWN1Y29kZXRvb2xzLnRyYWNjaGVjazpydW4nCisgICAgICAgIF0KKyAgICB9CispCmRpZmYgLS1naXQgYS91bmljb2RlL2MvQ01ha2VMaXN0cy50eHQgYi91bmljb2RlL2MvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzNjliMAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAoQykgMjAxMC0yMDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBjcmVhdGVkIG9uOiAyMDEwanVuMDMKKyMgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCitwcm9qZWN0KElDVV9VTklfVE9PTFMpCisjIFRoaXMgcmVxdWlyZXMgYW4gaWN1ZGVmcy50eHQgZmlsZSB3aXRoIGNvbnRlbnRzIGxpa2UgdGhlIGZvbGxvd2luZzoKKyMgTG9jYXRpb24gKC0tcHJlZml4KSBvZiB3aGVyZSBJQ1Ugd2FzIGluc3RhbGxlZC4KKyNzZXQoSUNVX0lOU1RfRElSIC9ob21lL21zY2hlcmVyL3N2bi5pY3UvdHJ1bmsvYmxkaW5zdCkKKyMgTG9jYXRpb24gb2YgdGhlIElDVSBzb3VyY2UgdHJlZS4KKyNzZXQoSUNVX1NSQ19ESVIgL2hvbWUvbXNjaGVyZXIvc3ZuLmljdS90cnVuay9zcmMpCitzZXQoQ01BS0VfQlVJTERfVFlQRSBEZWJ1ZykKK2luY2x1ZGUoaWN1ZGVmcy50eHQpCitpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAke0lDVV9JTlNUX0RJUn0vaW5jbHVkZQorICAke0lDVV9TUkNfRElSfS9zb3VyY2UvY29tbW9uCisgICR7SUNVX1NSQ19ESVJ9L3NvdXJjZS9pMThuCisgICR7SUNVX1NSQ19ESVJ9L3NvdXJjZS90b29scy90b29sdXRpbCkKK2xpbmtfZGlyZWN0b3JpZXMoJHtJQ1VfSU5TVF9ESVJ9L2xpYikKK2FkZF9zdWJkaXJlY3RvcnkoZ2VucHJvcHMpCithZGRfc3ViZGlyZWN0b3J5KGdlbnVjYSkKK2FkZF9zdWJkaXJlY3RvcnkoZ2VudXRzNDYpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvQ01ha2VMaXN0cy50eHQgYi91bmljb2RlL2MvZ2VucHJvcHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5NmIyNwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyIEBACisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBjcmVhdGVkIG9uOiAyMDEwanVuMDMKKyMgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyMgZWRpdGVkIG9uOiAyMDEwanVsMjAKKyMgZWRpdGVkIGJ5OiBTdHVhcnQgRy4gR2lsbAorYWRkX2V4ZWN1dGFibGUoZ2VucHJvcHMgZ2VucHJvcHMuY3BwCisgICAgICAgICAgICAgICBwbmFtZXNidWlsZGVyLmNwcCBjb3JlcHJvcHNidWlsZGVyLmNwcAorICAgICAgICAgICAgICAgYmlkaXByb3BzYnVpbGRlci5jcHAgY2FzZXByb3BzYnVpbGRlci5jcHAKKyAgICAgICAgICAgICAgIG5hbWVzcHJvcHNidWlsZGVyLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5wcm9wcyBpY3V1YyBpY3V0dSkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9NYWtlZmlsZS5pbiBiL3VuaWNvZGUvYy9nZW5wcm9wcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU2ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTcgQEAKKyMjIE1ha2VmaWxlLmluIGZvciBJQ1UgLSB0b29scy9nZW5wcm9wcworIyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisjIyBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIyBTdGV2ZW4gUi4gTG9vbWlzCisKKyMjIFNvdXJjZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24KK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKK3RvcF9idWlsZGRpciA9IC4uLy4uCisKK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2ljdWRlZnMubWsKKworIyMgQnVpbGQgZGlyZWN0b3J5IGluZm9ybWF0aW9uCitzdWJkaXIgPSB0b29scy9nZW5wcm9wcworCitUQVJHRVRfU1RVQl9OQU1FID0gZ2VucHJvcHMKKworU0VDVElPTiA9IDgKKworI01BTl9GSUxFUyA9ICQoVEFSR0VUX1NUVUJfTkFNRSkuJChTRUNUSU9OKQorCisKKyMjIEV4dHJhIGZpbGVzIHRvIHJlbW92ZSBmb3IgJ21ha2UgY2xlYW4nCitDTEVBTkZJTEVTID0gKn4gJChERVBTKSAkKE1BTl9GSUxFUykKKworIyMgVGFyZ2V0IGluZm9ybWF0aW9uCitUQVJHRVQgPSAkKEJJTkRJUikvJChUQVJHRVRfU1RVQl9OQU1FKSQoRVhFRVhUKQorCitpZm5lcSAoJCh0b3BfYnVpbGRkaXIpLCQodG9wX3NyY2RpcikpCitDUFBGTEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9jb21tb24KK2VuZGlmCitDUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvY29tbW9uIC1JJChzcmNkaXIpLy4uL3Rvb2x1dGlsCitMSUJTID0gJChMSUJJQ1VUT09MVVRJTCkgJChMSUJJQ1VJMThOKSAkKExJQklDVVVDKSAkKERFRkFVTFRfTElCUykgJChMSUJfTSkKKworT0JKRUNUUyA9IGdlbnByb3BzLm8gcHJvcHMyLm8gc3RvcmUubworCitERVBTID0gJChPQkpFQ1RTOi5vPS5kKQorCisjIyBMaXN0IG9mIHBob255IHRhcmdldHMKKy5QSE9OWSA6IGFsbCBhbGwtbG9jYWwgaW5zdGFsbCBpbnN0YWxsLWxvY2FsIGNsZWFuIGNsZWFuLWxvY2FsCVwKK2Rpc3RjbGVhbiBkaXN0Y2xlYW4tbG9jYWwgZGlzdCBkaXN0LWxvY2FsIGNoZWNrIGNoZWNrLWxvY2FsIGluc3RhbGwtbWFuCisKKyMjIENsZWFyIHN1ZmZpeCBsaXN0CisuU1VGRklYRVMgOgorCisjIyBMaXN0IG9mIHN0YW5kYXJkIHRhcmdldHMKK2FsbDogYWxsLWxvY2FsCitpbnN0YWxsOiBpbnN0YWxsLWxvY2FsCitjbGVhbjogY2xlYW4tbG9jYWwKK2Rpc3RjbGVhbiA6IGRpc3RjbGVhbi1sb2NhbAorZGlzdDogZGlzdC1sb2NhbAorY2hlY2s6IGFsbCBjaGVjay1sb2NhbAorCithbGwtbG9jYWw6ICQoVEFSR0VUKSAkKE1BTl9GSUxFUykKKworaW5zdGFsbC1sb2NhbDogYWxsLWxvY2FsIGluc3RhbGwtbWFuCisjCSQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQoc2JpbmRpcikKKyMJJChJTlNUQUxMKSAkKFRBUkdFVCkgJChERVNURElSKSQoc2JpbmRpcikKKworaW5zdGFsbC1tYW46ICQoTUFOX0ZJTEVTKQorIwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKG1hbmRpcikvbWFuJChTRUNUSU9OKQorIwkkKElOU1RBTExfREFUQSkgJD8gJChERVNURElSKSQobWFuZGlyKS9tYW4kKFNFQ1RJT04pCisKK2Rpc3QtbG9jYWw6CisKK2NsZWFuLWxvY2FsOgorCXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8ICQoUk1WKSAkKENMRUFORklMRVMpCisJJChSTVYpICQoVEFSR0VUKSAkKE9CSkVDVFMpCisKK2Rpc3RjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwKKwkkKFJNVikgTWFrZWZpbGUKKworY2hlY2stbG9jYWw6IGFsbC1sb2NhbAorCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworCiskKFRBUkdFVCkgOiAkKE9CSkVDVFMpCisJJChMSU5LLmNjKSAkKE9VVE9QVCkkQCAkXiAkKExJQlMpIAorCSQoUE9TVF9CVUlMRF9TVEVQKQorCisKKyUuJChTRUNUSU9OKTogJChzcmNkaXIpLyUuJChTRUNUSU9OKS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworCisKK2lmZXEgKCwkKE1BS0VDTURHT0FMUykpCistaW5jbHVkZSAkKERFUFMpCitlbHNlCitpZm5lcSAoJChwYXRzdWJzdCAlY2xlYW4sLCQoTUFLRUNNREdPQUxTKSksKQorLWluY2x1ZGUgJChERVBTKQorZW5kaWYKK2VuZGlmCisKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9iaWRpcHJvcHNidWlsZGVyLmNwcCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9iaWRpcHJvcHNidWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmI0NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL2JpZGlwcm9wc2J1aWxkZXIuY3BwCkBAIC0wLDAgKzEsNjA4IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgYmlkaXByb3BzYnVpbGRlci5jcHAgKHdhcyBnZW5iaWRpL3N0b3JlLmMpCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMjAwNGRlYzMwCisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBTdG9yZSBVbmljb2RlIGJpZGkvc2hhcGluZyBwcm9wZXJ0aWVzIGVmZmljaWVudGx5IGZvcgorKiAgIHJhbmRvbSBhY2Nlc3MuCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNoYXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgImNtZW1vcnkuaCIKKyNpbmNsdWRlICJjc3RyaW5nLmgiCisjaW5jbHVkZSAicHB1Y2QuaCIKKyNpbmNsdWRlICJ1YXJyc29ydC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdGEuaCIKKyNpbmNsdWRlICJ1bmV3ZGF0YS5oIgorI2luY2x1ZGUgInV0cmllMi5oIgorI2luY2x1ZGUgIndyaXRlc3JjLmgiCisjaW5jbHVkZSAidWJpZGlfcHJvcHMuaCIKKyNpbmNsdWRlICJnZW5wcm9wcy5oIgorCisvKiBVbmljb2RlIGJpZGkvc2hhcGluZyBwcm9wZXJ0aWVzIGZpbGUgZm9ybWF0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBmb3JtYXQgcHJlcGFyZWQgYW5kIHdyaXR0ZW4gaGVyZSBjb250YWlucyBzZXZlcmFsIGRhdGEKK3N0cnVjdHVyZXMgdGhhdCBzdG9yZSBpbmRleGVzIG9yIGRhdGEuCisKK0JlZm9yZSB0aGUgZGF0YSBjb250ZW50cyBkZXNjcmliZWQgYmVsb3csIHRoZXJlIGFyZSB0aGUgaGVhZGVycyByZXF1aXJlZCBieQordGhlIHVkYXRhIEFQSSBmb3IgbG9hZGluZyBJQ1UgZGF0YS4gRXNwZWNpYWxseSwgYSBVRGF0YUluZm8gc3RydWN0dXJlCitwcmVjZWRlcyB0aGUgYWN0dWFsIGRhdGEuIEl0IGNvbnRhaW5zIHBsYXRmb3JtIHByb3BlcnRpZXMgdmFsdWVzIGFuZCB0aGUKK2ZpbGUgZm9ybWF0IHZlcnNpb24uCisKK1RoZSBmb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiBmb3JtYXQgdmVyc2lvbiAyLjIgLgorCitUaGUgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXM6CisKKyAgICBjb25zdCBpbnQzMl90IGluZGV4ZXNbaTBdIHdpdGggdmFsdWVzIGkwLCBpMSwgLi4uOgorICAgIChzZWUgVUJJRElfSVhfLi4uIGNvbnN0YW50cyBmb3IgbmFtZXMgb2YgaW5kZXhlcykKKworICAgIGkwIGluZGV4TGVuZ3RoOyAtLSBsZW5ndGggb2YgaW5kZXhlc1tdIChVQklESV9JWF9UT1ApCisgICAgaTEgZGF0YUxlbmd0aDsgLS0gbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBwb3N0LWhlYWRlciBkYXRhIChpbmNsLiBpbmRleGVzW10pCisgICAgaTIgdHJpZVNpemU7IC0tIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJpZGkvc2hhcGluZyBwcm9wZXJ0aWVzIHRyaWUKKyAgICBpMyBtaXJyb3JMZW5ndGg7IC0tIGxlbmd0aCBpbiB1aW50MzJfdCBvZiB0aGUgYmlkaSBtaXJyb3JpbmcgYXJyYXkKKworICAgIGk0IGpnU3RhcnQ7IC0tIGZpcnN0IGNvZGUgcG9pbnQgd2l0aCBKb2luaW5nX0dyb3VwIGRhdGEKKyAgICBpNSBqZ0xpbWl0OyAtLSBsaW1pdCBjb2RlIHBvaW50IGZvciBKb2luaW5nX0dyb3VwIGRhdGEKKworICAgIC0tIGk2LCBpNyBuZXcgaW4gZm9ybWF0IHZlcnNpb24gMi4yOgorICAgIGk2IGpnU3RhcnQyOyAtLSBmaXJzdCBjb2RlIHBvaW50IHdpdGggSm9pbmluZ19Hcm91cCBkYXRhLCBzZWNvbmQgcmFuZ2UKKyAgICBpNyBqZ0xpbWl0MjsgLS0gbGltaXQgY29kZSBwb2ludCBmb3IgSm9pbmluZ19Hcm91cCBkYXRhLCBzZWNvbmQgcmFuZ2UKKworICAgIGk4Li5pMTQgcmVzZXJ2ZWRJbmRleGVzOyAtLSByZXNlcnZlZCB2YWx1ZXM7IDAgZm9yIG5vdworCisgICAgaTE1IG1heFZhbHVlczsgLS0gbWF4aW11bSBjb2RlIHZhbHVlcyBmb3IgZW51bWVyYXRlZCBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgICAgICAgYml0cyAyMy4uMTYgY29udGFpbiB0aGUgbWF4IHZhbHVlIGZvciBKb2luaW5nX0dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0aGUgYml0cyBhcmUgdXNlZCBsaWtlIGVudW0gZmllbGRzIGluIHRoZSB0cmllIHdvcmQKKworICAgIFNlcmlhbGl6ZWQgdHJpZSwgc2VlIHV0cmllMi5oOworCisgICAgY29uc3QgdWludDMyX3QgbWlycm9yc1ttaXJyb3JMZW5ndGhdOworCisgICAgY29uc3QgdWludDhfdCBqZ0FycmF5W2k1LWk0XTsgLS0gKGk1LWk0KSsoaTctaTYpIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQKKyAgICBjb25zdCB1aW50OF90IGpnQXJyYXkyW2k3LWk2XTsgLS0gbmV3IGluIGZvcm1hdCB2ZXJzaW9uIDIuMgorCitUcmllIGRhdGEgd29yZDoKK0JpdHMKKzE1Li4xMyAgc2lnbmVkIGRlbHRhIHRvIGJpZGkgbWlycm9yaW5nIGNvZGUgcG9pbnQKKyAgICAgICAgKGFkZCBkZWx0YSB0byBpbnB1dCBjb2RlIHBvaW50KQorICAgICAgICAwIG5vIHN1Y2ggY29kZSBwb2ludCAoc291cmNlIG1hcHMgdG8gaXRzZWxmKQorICAgICAgICAtMy4uLTEsIDEuLjMgZGVsdGEKKyAgICAgICAgLTQgbG9vayBpbiBtaXJyb3JzIHRhYmxlCisgICAgMTIgIGlzIG1pcnJvcmVkCisgICAgMTEgIEJpZGlfQ29udHJvbAorICAgIDEwICBKb2luX0NvbnRyb2wKKyA5Li4gOCAgQmlkaV9QYWlyZWRfQnJhY2tldF9UeXBlKGJwdCkgLS0gbmV3IGluIGZvcm1hdCB2ZXJzaW9uIDIuMQorIDcuLiA1ICBKb2luaW5nX1R5cGUKKyA0Li4gMCAgQmlEaSBjYXRlZ29yeQorCisKK01pcnJvcnM6CitTdG9yZXMgc29tZSBvZiB0aGUgYmlkaSBtaXJyb3JpbmcgZGF0YSwgd2hlcmUgZWFjaCBjb2RlIHBvaW50IG1hcHMgdG8KK2F0IG1vc3Qgb25lIG90aGVyLgorTW9zdCBjb2RlIHBvaW50cyBkbyBub3QgaGF2ZSBhIG1pcnJvcmluZyBjb2RlIHBvaW50OyBtb3N0IHRoYXQgZG8gaGF2ZSBhIHNpZ25lZAorZGVsdGEgc3RvcmVkIGluIHRoZSB0cmllIGRhdGEgdmFsdWUuIE9ubHkgdGhvc2Ugd2hlcmUgdGhlIGRlbHRhIGRvZXMgbm90IGZpdAoraW50byB0aGUgdHJpZSBkYXRhIGFyZSBzdG9yZWQgaW4gdGhpcyB0YWJsZS4KKworTG9naWNhbGx5LCB0aGlzIGlzIGEgdHdvLWNvbHVtbiB0YWJsZSB3aXRoIHNvdXJjZSBhbmQgbWlycm9yIGNvZGUgcG9pbnRzLgorCitQaHlzaWNhbGx5LCB0aGUgdGFibGUgaXMgY29tcHJlc3NlZCBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgZWFjaAorbWlycm9yIGNvZGUgcG9pbnQgaXMgYWxzbyBhIHNvdXJjZSBjb2RlIHBvaW50CisoZWFjaCBvZiB0aGVtIGlzIGEgbWlycm9yIG9mIHRoZSBvdGhlcikuCitUaGVyZWZvcmUsIGJvdGggbG9naWNhbCBjb2x1bW5zIGNvbnRhaW4gdGhlIHNhbWUgc2V0IG9mIGNvZGUgcG9pbnRzLCB3aGljaCBuZWVkcwordG8gYmUgc3RvcmVkIG9ubHkgb25jZS4KKworVGhlIHRhYmxlIHN0b3JlcyBzb3VyY2UgY29kZSBwb2ludHMsIGFuZCBhbHNvIGZvciBlYWNoIHRoZSBpbmRleCBvZiBpdHMgbWlycm9yCitjb2RlIHBvaW50IGluIHRoZSBzYW1lIHRhYmxlLCBpbiBhIHNpbXBsZSBhcnJheSBvZiB1aW50MzJfdC4KK0JpdHMKKzMxLi4yMSAgaW5kZXggdG8gbWlycm9yIGNvZGUgcG9pbnQgKHVuc2lnbmVkKQorMjAuLiAwICBzb3VyY2UgY29kZSBwb2ludAorCitUaGUgdGFibGUgaXMgc29ydGVkIGJ5IHNvdXJjZSBjb2RlIHBvaW50cy4KKworCitKb2luaW5nX0dyb3VwIGFycmF5OgorVGhlIEpvaW5pbmdfR3JvdXAgdmFsdWVzIGRvIG5vdCBmaXQgaW50byB0aGUgMTYtYml0IHRyaWUsIGJ1dCB0aGUgZGF0YSBpcyBhbHNvCitsaW1pdGVkIHRvIGEgc21hbGwgcmFuZ2Ugb2YgY29kZSBwb2ludHMgKEFyYWJpYyBhbmQgU3lyaWFjKSBhbmQgbm90Cit3ZWxsIGNvbXByZXNzaWJsZS4KKworVGhlIHN0YXJ0IGFuZCBsaW1pdCBjb2RlIHBvaW50cyBmb3IgdGhlIHJhbmdlIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4ZXNbXQorYXJyYXksIGFuZCB0aGUgamdBcnJheVtdIHN0b3JlcyBhIGJ5dGUgZm9yIGVhY2ggb2YgdGhlc2UgY29kZSBwb2ludHMsCitjb250YWluaW5nIHRoZSBKb2luaW5nX0dyb3VwIHZhbHVlLgorCitBbGwgY29kZSBwb2ludHMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIGhhdmUgTm9fSm9pbmluZ19Hcm91cCAoMCkuCisKK0lDVSA1NCBhZGRzIGpnQXJyYXkyW10gZm9yIGEgc2Vjb25kIHJhbmdlLgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiAyLjIgLS0tCisKK0FkZGl0aW9uIG9mIHNlY29uZCByYW5nZSBmb3IgSm9pbmluZ19Hcm91cCB2YWx1ZXMgKGk2LCBpNyksCitmb3IgMTA4MDAuLjEwRkZGLCBpbmNsdWRpbmcgVW5pY29kZSA3LjAgMTBBQzAuLjEwQUZGIE1hbmljaGFlYW4uCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDIuMSAtLS0KKworQWRkaXRpb24gb2YgQmlkaV9QYWlyZWRfQnJhY2tldF9UeXBlKGJwdCkgdmFsdWVzLgorKFRyaWUgZGF0YSBiaXRzIDkuLjggd2VyZSByZXNlcnZlZC4pCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDIgLS0tCisKK0NoYW5nZSBmcm9tIFVUcmllIHRvIFVUcmllMi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworVV9OQU1FU1BBQ0VfVVNFCisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIFVEYXRhSW5mbyBkYXRhSW5mbz17CisgICAgc2l6ZW9mKFVEYXRhSW5mbyksCisgICAgMCwKKworICAgIFVfSVNfQklHX0VORElBTiwKKyAgICBVX0NIQVJTRVRfRkFNSUxZLAorICAgIFVfU0laRU9GX1VDSEFSLAorICAgIDAsCisKKyAgICAvKiBkYXRhRm9ybWF0PSJCaURpIiAqLworICAgIHsgVUJJRElfRk1UXzAsIFVCSURJX0ZNVF8xLCBVQklESV9GTVRfMiwgVUJJRElfRk1UXzMgfSwKKyAgICB7IDIsIDIsIDAsIDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcm1hdFZlcnNpb24gKi8KKyAgICB7IDYsIDAsIDAsIDAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGFWZXJzaW9uICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBCaURpUHJvcHNCdWlsZGVyIDogcHVibGljIFByb3BzQnVpbGRlciB7CitwdWJsaWM6CisgICAgQmlEaVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgfkJpRGlQcm9wc0J1aWxkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BzKGNvbnN0IFVuaVByb3BzICYsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0ZToKKyAgICBpbnQzMl90IGVuY29kZUJpZGlNaXJyb3JpbmdHbHlwaChVQ2hhcjMyIHNyYywgVUNoYXIzMiBlbmQsIFVDaGFyMzIgbWlycm9yLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZvaWQgbWFrZU1pcnJvcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgTUlOX0pHX1NUQVJUPTB4NjAwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIE1BWF9KR19MSU1JVD0weDhmZisxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIE1JTl9KR19TVEFSVDI9MHgxMDgwMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIzMiBNQVhfSkdfTElNSVQyPTB4MTBmZmYrMTsKKworICAgIFVuaWNvZGVTZXQgcmVsZXZhbnRQcm9wczsKKyAgICBVVHJpZTIgKnBUcmllOworICAgIHVpbnQ4X3QgamdBcnJheVtNQVhfSkdfTElNSVQtTUlOX0pHX1NUQVJUXTsKKyAgICB1aW50OF90IGpnQXJyYXkyW01BWF9KR19MSU1JVDItTUlOX0pHX1NUQVJUMl07CisgICAgdWludDMyX3QgbWlycm9yc1tVQklESV9NQVhfTUlSUk9SX0lOREVYKzFdWzJdOworICAgIGludDMyX3QgbWlycm9yVG9wOworfTsKKworQmlEaVByb3BzQnVpbGRlcjo6QmlEaVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpCisgICAgICAgIDogcFRyaWUoTlVMTCksCisgICAgICAgICAgbWlycm9yVG9wKDApIHsKKyAgICAvLyBUaGlzIGJ1aWxkZXIgZW5jb2RlcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMuCisgICAgcmVsZXZhbnRQcm9wcy4KKyAgICAgICAgYWRkKFVDSEFSX0JJRElfQ09OVFJPTCkuCisgICAgICAgIGFkZChVQ0hBUl9CSURJX01JUlJPUkVEKS4KKyAgICAgICAgYWRkKFVDSEFSX0JJRElfQ0xBU1MpLgorICAgICAgICBhZGQoVUNIQVJfQklESV9NSVJST1JJTkdfR0xZUEgpLgorICAgICAgICBhZGQoVUNIQVJfSk9JTl9DT05UUk9MKS4KKyAgICAgICAgYWRkKFVDSEFSX0pPSU5JTkdfR1JPVVApLgorICAgICAgICBhZGQoVUNIQVJfSk9JTklOR19UWVBFKTsKKyAgICBwVHJpZT11dHJpZTJfb3BlbigwLCAwLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBiaWRpcHJvcHNidWlsZGVyIHV0cmllMl9vcGVuKCkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgfQorICAgIHVwcnZfbWVtc2V0KGpnQXJyYXksIFVfSkdfTk9fSk9JTklOR19HUk9VUCwgc2l6ZW9mKGpnQXJyYXkpKTsKKyAgICB1cHJ2X21lbXNldChqZ0FycmF5MiwgVV9KR19OT19KT0lOSU5HX0dST1VQLCBzaXplb2YoamdBcnJheTIpKTsKK30KKworQmlEaVByb3BzQnVpbGRlcjo6fkJpRGlQcm9wc0J1aWxkZXIoKSB7CisgICAgdXRyaWUyX2Nsb3NlKHBUcmllKTsKK30KKwordm9pZAorQmlEaVByb3BzQnVpbGRlcjo6c2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pIHsKKyAgICB1cHJ2X21lbWNweShkYXRhSW5mby5kYXRhVmVyc2lvbiwgdmVyc2lvbiwgNCk7Cit9CisKKy8qIGJpZGkgbWlycm9yaW5nIHRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ludDMyX3QKK0JpRGlQcm9wc0J1aWxkZXI6OmVuY29kZUJpZGlNaXJyb3JpbmdHbHlwaChVQ2hhcjMyIHNyYywgVUNoYXIzMiBlbmQsIFVDaGFyMzIgbWlycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpIHx8IG1pcnJvcjwwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZihzcmMhPWVuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHJhbmdlIFUrJTA0bFguLlUrJTA0bFggYWxsIHdpdGggdGhlIHNhbWUgIgorICAgICAgICAgICAgICAgICJCaWRpX01pcnJvcmluZ19HbHlwaCBVKyUwNGxYXG4iLAorICAgICAgICAgICAgICAgIChsb25nKXNyYywgKGxvbmcpZW5kLCAobG9uZyltaXJyb3IpOworICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50MzJfdCBkZWx0YT1taXJyb3Itc3JjOworICAgIGlmKGRlbHRhPT0wKSB7CisgICAgICAgIHJldHVybiAwOyAvKiBtYXBwaW5nIHRvIHNlbGY9bm8gbWFwcGluZyAqLworICAgIH0KKworICAgIGlmKGRlbHRhPFVCSURJX01JTl9NSVJST1JfREVMVEEgfHwgVUJJRElfTUFYX01JUlJPUl9ERUxUQTxkZWx0YSkgeworICAgICAgICAvKiBkZWx0YSBkb2VzIG5vdCBmaXQgaW50byB0aGUgdHJpZSBwcm9wZXJ0aWVzIHZhbHVlLCBzdG9yZSBpbiB0aGUgbWlycm9yc1tdIHRhYmxlICovCisgICAgICAgIGlmKG1pcnJvclRvcD09TEVOR1RIT0YobWlycm9ycykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHRvbyBtYW55IGxvbmctZGlzdGFuY2UgQmlkaV9NaXJyb3JpbmdfR2x5cGggbWFwcGluZ3M7ICIKKyAgICAgICAgICAgICAgICAgICAgIlVCSURJX01BWF9NSVJST1JfSU5ERVggY2FuIG9ubHkgYmUgaW5jcmVhc2VkIGJ5ICIKKyAgICAgICAgICAgICAgICAgICAgInJlZGVzaWduaW5nIHRoZSB1YmlkaS5pY3UgZGF0YSBiaXQgZmllbGRzXG4iKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLyogcG9zc2libGU6IHNlYXJjaCB0aGUgdGFibGUgc28gZmFyIGFuZCBzZWUgaWYgc3JjIGlzIGFscmVhZHkgbGlzdGVkICovCisKKyAgICAgICAgbWlycm9yc1ttaXJyb3JUb3BdWzBdPSh1aW50MzJfdClzcmM7CisgICAgICAgIG1pcnJvcnNbbWlycm9yVG9wXVsxXT0odWludDMyX3QpbWlycm9yOworICAgICAgICArK21pcnJvclRvcDsKKworICAgICAgICAvKiBzZXQgYW4gZXNjYXBlIG1hcmtlciBpbiBzcmMncyBwcm9wZXJ0aWVzICovCisgICAgICAgIGRlbHRhPVVCSURJX0VTQ19NSVJST1JfREVMVEE7CisgICAgfQorICAgIHJldHVybiBkZWx0YTsKK30KKwordm9pZAorQmlEaVByb3BzQnVpbGRlcjo6c2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJnByb3BzLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSB8fCBuZXdWYWx1ZXMuY29udGFpbnNOb25lKHJlbGV2YW50UHJvcHMpKSB7IHJldHVybjsgfQorCisgICAgVUNoYXIzMiBzdGFydD1wcm9wcy5zdGFydDsKKyAgICBVQ2hhcjMyIGVuZD1wcm9wcy5lbmQ7CisKKyAgICAvLyBUaGUgcnVudGltZSBjb2RlIHJlbGllcyBvbiB0aGlzIGludmFyaWFudCBmb3IgcmV0dXJuaW5nIGJvdGggYm1nIGFuZCBicGIKKyAgICAvLyBmcm9tIHRoZSBzYW1lIGRhdGEuCisgICAgaW50MzJfdCBicHQ9cHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9CSURJX1BBSVJFRF9CUkFDS0VUX1RZUEUpOworICAgIGlmKCEoYnB0PT0wID8gcHJvcHMuYnBiPT1VX1NFTlRJTkVMIDogcHJvcHMuYnBiPT1wcm9wcy5ibWcpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogaW52YXJpYW50IG5vdCB0cnVlOiAiCisgICAgICAgICAgICAgICAgImlmKGJwdD09Tm9uZSkgdGhlbiBicGI9PG5vbmU+IGVsc2UgYnBiPWJtZ1xuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50MzJfdCBkZWx0YT1lbmNvZGVCaWRpTWlycm9yaW5nR2x5cGgoc3RhcnQsIGVuZCwgcHJvcHMuYm1nLCBlcnJvckNvZGUpOworICAgIHVpbnQzMl90IHZhbHVlPSh1aW50MzJfdClkZWx0YTw8VUJJRElfTUlSUk9SX0RFTFRBX1NISUZUOworICAgIGlmKHByb3BzLmJpblByb3BzW1VDSEFSX0JJRElfTUlSUk9SRURdKSB7CisgICAgICAgIHZhbHVlfD1VX01BU0soVUJJRElfSVNfTUlSUk9SRURfU0hJRlQpOworICAgIH0KKyAgICBpZihwcm9wcy5iaW5Qcm9wc1tVQ0hBUl9CSURJX0NPTlRST0xdKSB7CisgICAgICAgIHZhbHVlfD1VX01BU0soVUJJRElfQklESV9DT05UUk9MX1NISUZUKTsKKyAgICB9CisgICAgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfSk9JTl9DT05UUk9MXSkgeworICAgICAgICB2YWx1ZXw9VV9NQVNLKFVCSURJX0pPSU5fQ09OVFJPTF9TSElGVCk7CisgICAgfQorICAgIHZhbHVlfD0odWludDMyX3QpYnB0PDxVQklESV9CUFRfU0hJRlQ7CisgICAgdmFsdWV8PSh1aW50MzJfdClwcm9wcy5nZXRJbnRQcm9wKFVDSEFSX0pPSU5JTkdfVFlQRSk8PFVCSURJX0pUX1NISUZUOworICAgIHZhbHVlfD0odWludDMyX3QpcHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9CSURJX0NMQVNTKTsKKyAgICB1dHJpZTJfc2V0UmFuZ2UzMihwVHJpZSwgc3RhcnQsIGVuZCwgdmFsdWUsIFRSVUUsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IEJpRGlQcm9wc0J1aWxkZXIgdXRyaWUyX3NldFJhbmdlMzIoKSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN0b3JlIEpvaW5pbmdfR3JvdXAgdmFsdWVzIGZyb20gdmVjdG9yIGNvbHVtbiAxIGluIHNpbXBsZSBieXRlIGFycmF5cy4KKyAgICBpbnQzMl90IGpnPXByb3BzLmdldEludFByb3AoVUNIQVJfSk9JTklOR19HUk9VUCk7CisgICAgZm9yKFVDaGFyMzIgYz1zdGFydDsgYzw9ZW5kOyArK2MpIHsKKyAgICAgICAgaW50MzJfdCBqZ1N0YXJ0OworICAgICAgICBpZihNSU5fSkdfU1RBUlQ8PWMgJiYgYzxNQVhfSkdfTElNSVQpIHsKKyAgICAgICAgICAgIGpnQXJyYXlbYy1NSU5fSkdfU1RBUlRdPSh1aW50OF90KWpnOworICAgICAgICB9IGVsc2UgaWYoTUlOX0pHX1NUQVJUMjw9YyAmJiBjPE1BWF9KR19MSU1JVDIpIHsKKyAgICAgICAgICAgIGpnQXJyYXkyW2MtTUlOX0pHX1NUQVJUMl09KHVpbnQ4X3Qpamc7CisgICAgICAgIH0gZWxzZSBpZihqZyE9VV9KR19OT19KT0lOSU5HX0dST1VQKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBKb2luaW5nX0dyb3VwIGZvciBvdXQtb2YtcmFuZ2UgY29kZSBwb2ludHMgVSslMDRseC4uVSslMDRseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3RhcnQsIChsb25nKWVuZCk7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCisvKiBnZW5lcmF0ZSBvdXRwdXQgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50MzJfdCBVX0NBTExDT05WCitjb21wYXJlTWlycm9yKGNvbnN0IHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKmxlZnQsIGNvbnN0IHZvaWQgKnJpZ2h0KSB7CisgICAgVUNoYXIzMiBsLCByOworCisgICAgbD1VQklESV9HRVRfTUlSUk9SX0NPREVfUE9JTlQoKChjb25zdCB1aW50MzJfdCAqKWxlZnQpWzBdKTsKKyAgICByPVVCSURJX0dFVF9NSVJST1JfQ09ERV9QT0lOVCgoKGNvbnN0IHVpbnQzMl90ICopcmlnaHQpWzBdKTsKKyAgICByZXR1cm4gbC1yOworfQorCit2b2lkCitCaURpUHJvcHNCdWlsZGVyOjptYWtlTWlycm9yKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIC8qIHNvcnQgdGhlIG1pcnJvcmluZyB0YWJsZSBieSBzb3VyY2UgY29kZSBwb2ludHMgKi8KKyAgICB1cHJ2X3NvcnRBcnJheShtaXJyb3JzLCBtaXJyb3JUb3AsIDgsCisgICAgICAgICAgICAgICAgICAgY29tcGFyZU1pcnJvciwgTlVMTCwgRkFMU0UsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgLyoKKyAgICAgKiByZWR1Y2UgdGhlIDItY29sdW1uIHRhYmxlIHRvIGEgc2luZ2xlIGNvbHVtbgorICAgICAqIGJ5IHB1dHRpbmcgdGhlIGluZGV4IHRvIHRoZSBtaXJyb3IgZW50cnkgaW50byB0aGUgc291cmNlIGVudHJ5CisgICAgICoKKyAgICAgKiBmaXJzdDoKKyAgICAgKiBmaW5kIGVhY2ggbWlycm9yIGNvZGUgcG9pbnQgaW4gdGhlIHNvdXJjZSBjb2x1bW4gYW5kIHNldCBlYWNoIG90aGVyJ3MgaW5kZXhlcworICAgICAqCisgICAgICogc2Vjb25kOgorICAgICAqIHJlZHVjZSB0aGUgdGFibGUsIGNvbWJpbmUgdGhlIHNvdXJjZSBjb2RlIHBvaW50cyB3aXRoIHRoZWlyIGluZGV4ZXMKKyAgICAgKiBhbmQgc3RvcmUgYXMgYSBzaW1wbGUgYXJyYXkgb2YgdWludDMyX3QKKyAgICAgKi8KKyAgICBmb3IoaW50MzJfdCBpPTA7IGk8bWlycm9yVG9wOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgYz1taXJyb3JzW2ldWzFdOyAvKiBtaXJyb3IgY29kZSBwb2ludCAqLworICAgICAgICBpZihjPjB4MWZmZmZmKSB7CisgICAgICAgICAgICBjb250aW51ZTsgLyogdGhpcyBlbnRyeSBhbHJlYWR5IGhhcyBhbiBpbmRleCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogc2VhcmNoIGZvciB0aGUgbWlycm9yIGNvZGUgcG9pbnQgaW4gdGhlIHNvdXJjZSBjb2x1bW4gKi8KKyAgICAgICAgaW50MzJfdCBzdGFydCwgbGltaXQsIHN0ZXA7CisgICAgICAgIGlmKGM8bWlycm9yc1tpXVswXSkgeworICAgICAgICAgICAgLyogc2VhcmNoIGJlZm9yZSBpICovCisgICAgICAgICAgICBzdGFydD1pLTE7CisgICAgICAgICAgICBsaW1pdD0tMTsKKyAgICAgICAgICAgIHN0ZXA9LTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGFydD1pKzE7CisgICAgICAgICAgICBsaW1pdD1taXJyb3JUb3A7CisgICAgICAgICAgICBzdGVwPTE7CisgICAgICAgIH0KKworICAgICAgICBmb3IoaW50MzJfdCBqPXN0YXJ0Ozsgais9c3RlcCkgeworICAgICAgICAgICAgaWYoaj09bGltaXQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogYmlkaSBtaXJyb3IgZG9lcyBub3Qgcm91bmR0cmlwIC0gJTA0bHgtPiUwNGx4LT4/XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpbWlycm9yc1tpXVswXSwgKGxvbmcpbWlycm9yc1tpXVsxXSk7CisgICAgICAgICAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGM9PW1pcnJvcnNbal1bMF0pIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGZvdW5kIHRoZSBtaXJyb3IgY29kZSBwb2ludCBjIGluIHRoZSBzb3VyY2UgY29sdW1uLAorICAgICAgICAgICAgICAgICAqIHNldCBib3RoIGVudHJpZXMnIGluZGV4ZXMgdG8gZWFjaCBvdGhlcgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmKFVCSURJX0dFVF9NSVJST1JfQ09ERV9QT0lOVChtaXJyb3JzW2ldWzBdKSE9VUJJRElfR0VUX01JUlJPUl9DT0RFX1BPSU5UKG1pcnJvcnNbal1bMV0pKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHJvdW5kdHJpcCBjaGVjayBmYWlscyAqLworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGJpZGkgbWlycm9ycyBkbyBub3Qgcm91bmR0cmlwIC0gJTA0bHgtPiUwNGx4LT4lMDRseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyltaXJyb3JzW2ldWzBdLCAobG9uZyltaXJyb3JzW2ldWzFdLCAobG9uZyltaXJyb3JzW2pdWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaXJyb3JzW2ldWzFdfD0odWludDMyX3Qpajw8VUJJRElfTUlSUk9SX0lOREVYX1NISUZUOworICAgICAgICAgICAgICAgICAgICBtaXJyb3JzW2pdWzFdfD0odWludDMyX3QpaTw8VUJJRElfTUlSUk9SX0lOREVYX1NISUZUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIG5vdyB0aGUgc2Vjb25kIHN0ZXAsIHRoZSBhY3R1YWwgcmVkdWN0aW9uIG9mIHRoZSB0YWJsZSAqLworICAgIHVpbnQzMl90ICpyZWR1Y2VkTWlycm9yPW1pcnJvcnNbMF07CisgICAgZm9yKGludDMyX3QgaT0wOyBpPG1pcnJvclRvcDsgKytpKSB7CisgICAgICAgIHJlZHVjZWRNaXJyb3JbaV09bWlycm9yc1tpXVswXXwobWlycm9yc1tpXVsxXSZ+MHgxZmZmZmYpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgaW5kZXhlc1tVQklESV9JWF9UT1BdPXsKKyAgICBVQklESV9JWF9UT1AsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyB1aW50OF90IHRyaWVCbG9ja1s0MDAwMF07CitzdGF0aWMgaW50MzJfdCB0cmllU2l6ZTsKKwordm9pZAorQmlEaVByb3BzQnVpbGRlcjo6YnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgbWFrZU1pcnJvcihlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgdXRyaWUyX2ZyZWV6ZShwVHJpZSwgVVRSSUUyXzE2X1ZBTFVFX0JJVFMsICZlcnJvckNvZGUpOworICAgIHRyaWVTaXplPXV0cmllMl9zZXJpYWxpemUocFRyaWUsIHRyaWVCbG9jaywgc2l6ZW9mKHRyaWVCbG9jayksICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHV0cmllMl9mcmVlemUoKSt1dHJpZTJfc2VyaWFsaXplKCkgZmFpbGVkOiAlcyAobGVuZ3RoICVsZClcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSwgKGxvbmcpdHJpZVNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmluaXNoIGpnQXJyYXkgJiBqZ0FycmF5Mi4KKyAgICBVQ2hhcjMyIGpnU3RhcnQ7ICAvLyBGaXJzdCBjb2RlIHBvaW50IHdpdGggYSBKb2luaW5nX0dyb3VwLCBmaXJzdCByYW5nZS4KKyAgICBVQ2hhcjMyIGpnTGltaXQ7ICAvLyBPbmUgcGFzdCB0aGUgbGFzdCBvbmUuCisgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSByYW5nZSBmaXJzdCwgc28gdGhhdCBpZiBpdCdzIGVtcHR5IHdlCisgICAgLy8gZ2V0IGpnU3RhcnQ9amdMaW1pdD1NSU5fSkdfU1RBUlQuCisgICAgZm9yKGpnTGltaXQ9TUFYX0pHX0xJTUlUOworICAgICAgICBNSU5fSkdfU1RBUlQ8amdMaW1pdCAmJiBqZ0FycmF5W2pnTGltaXQtTUlOX0pHX1NUQVJULTFdPT1VX0pHX05PX0pPSU5JTkdfR1JPVVA7CisgICAgICAgIC0tamdMaW1pdCkge30KKyAgICBmb3IoamdTdGFydD1NSU5fSkdfU1RBUlQ7CisgICAgICAgIGpnU3RhcnQ8amdMaW1pdCAmJiBqZ0FycmF5W2pnU3RhcnQtTUlOX0pHX1NUQVJUXT09VV9KR19OT19KT0lOSU5HX0dST1VQOworICAgICAgICArK2pnU3RhcnQpIHt9CisKKyAgICBVQ2hhcjMyIGpnU3RhcnQyOyAgLy8gRmlyc3QgY29kZSBwb2ludCB3aXRoIGEgSm9pbmluZ19Hcm91cCwgc2Vjb25kIHJhbmdlLgorICAgIFVDaGFyMzIgamdMaW1pdDI7ICAvLyBPbmUgcGFzdCB0aGUgbGFzdCBvbmUuCisgICAgZm9yKGpnTGltaXQyPU1BWF9KR19MSU1JVDI7CisgICAgICAgIE1JTl9KR19TVEFSVDI8amdMaW1pdDIgJiYgamdBcnJheTJbamdMaW1pdDItTUlOX0pHX1NUQVJUMi0xXT09VV9KR19OT19KT0lOSU5HX0dST1VQOworICAgICAgICAtLWpnTGltaXQyKSB7fQorICAgIGZvcihqZ1N0YXJ0Mj1NSU5fSkdfU1RBUlQyOworICAgICAgICBqZ1N0YXJ0MjxqZ0xpbWl0MiAmJiBqZ0FycmF5MltqZ1N0YXJ0Mi1NSU5fSkdfU1RBUlQyXT09VV9KR19OT19KT0lOSU5HX0dST1VQOworICAgICAgICArK2pnU3RhcnQyKSB7fQorCisgICAgLy8gUGFkIHRoZSB0b3RhbCBKb2luaW5nX0dyb3VwIGFycmF5cyBsZW5ndGggdG8gYSBtdWx0aXBsZSBvZiA0LgorICAgIC8vIFByZWZlciByb3VuZGluZyBkb3duIHN0YXJ0cyBiZWZvcmUgcm91bmRpbmcgdXAgbGltaXRzCisgICAgLy8gc28gdGhhdCB3ZSBhcmUgZ3VhcmFudGVlZCBub3QgdG8gaW5jcmVhc2UgdGhlIGxpbWl0cyBiZXlvbmQKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSBhcnJheXMnIGNvZGUgcG9pbnQgcmFuZ2VzLgorICAgIGludDMyX3QgamdMZW5ndGg9amdMaW1pdC1qZ1N0YXJ0K2pnTGltaXQyLWpnU3RhcnQyOworICAgIHdoaWxlKGpnTGVuZ3RoJjMpIHsKKyAgICAgICAgaWYoKGpnU3RhcnQ8amdMaW1pdCkgJiYgKGpnU3RhcnQmMykpIHsKKyAgICAgICAgICAgIC0tamdTdGFydDsKKyAgICAgICAgfSBlbHNlIGlmKChqZ1N0YXJ0MjxqZ0xpbWl0MikgJiYgKGpnU3RhcnQyJjMpKSB7CisgICAgICAgICAgICAtLWpnU3RhcnQyOworICAgICAgICB9IGVsc2UgaWYoamdTdGFydDxqZ0xpbWl0KSB7CisgICAgICAgICAgICArK2pnTGltaXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICArK2pnTGltaXQyOworICAgICAgICB9CisgICAgICAgICsramdMZW5ndGg7CisgICAgfQorICAgIGluZGV4ZXNbVUJJRElfSVhfSkdfU1RBUlRdPWpnU3RhcnQ7CisgICAgaW5kZXhlc1tVQklESV9JWF9KR19MSU1JVF09amdMaW1pdDsKKyAgICBpbmRleGVzW1VCSURJX0lYX0pHX1NUQVJUMl09amdTdGFydDI7CisgICAgaW5kZXhlc1tVQklESV9JWF9KR19MSU1JVDJdPWpnTGltaXQyOworCisgICAgaW5kZXhlc1tVQklESV9JWF9UUklFX1NJWkVdPXRyaWVTaXplOworICAgIGluZGV4ZXNbVUJJRElfSVhfTUlSUk9SX0xFTkdUSF09bWlycm9yVG9wOworICAgIGluZGV4ZXNbVUJJRElfSVhfTEVOR1RIXT0KKyAgICAgICAgKGludDMyX3Qpc2l6ZW9mKGluZGV4ZXMpKworICAgICAgICB0cmllU2l6ZSsKKyAgICAgICAgNCptaXJyb3JUb3ArCisgICAgICAgIGpnTGVuZ3RoOworCisgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgcHV0cygiKiB1YmlkaS5pY3Ugc3RhdHMgKiIpOworICAgICAgICBwcmludGYoInRyaWUgc2l6ZSBpbiBieXRlczogICAgICAgICAgICAgICAgICAgICU1ZFxuIiwgKGludCl0cmllU2l6ZSk7CisgICAgICAgIHByaW50Zigic2l6ZSBpbiBieXRlcyBvZiBtaXJyb3JpbmcgdGFibGU6ICAgICAgJTVkXG4iLCAoaW50KSg0Km1pcnJvclRvcCkpOworICAgICAgICBwcmludGYoImxlbmd0aCBvZiBKb2luaW5nX0dyb3VwIGFycmF5OiAgICAgICAgICU1ZCAoVSslMDR4Li5VKyUwNHgpXG4iLAorICAgICAgICAgICAgICAgKGludCkoamdMaW1pdC1qZ1N0YXJ0KSwgKGludClqZ1N0YXJ0LCAoaW50KShqZ0xpbWl0LTEpKTsKKyAgICAgICAgcHJpbnRmKCJsZW5ndGggb2YgSm9pbmluZ19Hcm91cCBhcnJheSAyOiAgICAgICAlNWQgKFUrJTA0eC4uVSslMDR4KVxuIiwKKyAgICAgICAgICAgICAgIChpbnQpKGpnTGltaXQyLWpnU3RhcnQyKSwgKGludClqZ1N0YXJ0MiwgKGludCkoamdMaW1pdDItMSkpOworICAgICAgICBwcmludGYoImRhdGEgc2l6ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICU1ZFxuIiwgKGludClpbmRleGVzW1VCSURJX0lYX0xFTkdUSF0pOworICAgIH0KKworICAgIGluZGV4ZXNbVUJJRElfTUFYX1ZBTFVFU19JTkRFWF09CisgICAgICAgICgoaW50MzJfdClVX0NIQVJfRElSRUNUSU9OX0NPVU5ULTEpfAorICAgICAgICAoKChpbnQzMl90KVVfSlRfQ09VTlQtMSk8PFVCSURJX0pUX1NISUZUKXwKKyAgICAgICAgKCgoaW50MzJfdClVX0JQVF9DT1VOVC0xKTw8VUJJRElfQlBUX1NISUZUKXwKKyAgICAgICAgKCgoaW50MzJfdClVX0pHX0NPVU5ULTEpPDxVQklESV9NQVhfSkdfU0hJRlQpOworfQorCit2b2lkCitCaURpUHJvcHNCdWlsZGVyOjp3cml0ZUNTb3VyY2VGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgRklMRSAqZj11c3JjX2NyZWF0ZShwYXRoLCAidWJpZGlfcHJvcHNfZGF0YS5oIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpY3UvdG9vbHMvdW5pY29kZS9jL2dlbnByb3BzL2JpZGlwcm9wc2J1aWxkZXIuY3BwIik7CisgICAgaWYoZj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9GSUxFX0FDQ0VTU19FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmcHV0cygiI2lmbmRlZiBJTkNMVURFRF9GUk9NX1VCSURJX1BST1BTX0NcbiIKKyAgICAgICAgICAiIyAgIGVycm9yIFRoaXMgZmlsZSBtdXN0IGJlICNpbmNsdWRlZCBmcm9tIHViaWRpX3Byb3BzLmMgb25seS5cbiIKKyAgICAgICAgICAiI2VuZGlmXG5cbiIsIGYpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IFVWZXJzaW9uSW5mbyB1YmlkaV9wcm9wc19kYXRhVmVyc2lvbj17IiwKKyAgICAgICAgZGF0YUluZm8uZGF0YVZlcnNpb24sIDgsIDQsCisgICAgICAgICJ9O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBpbnQzMl90IHViaWRpX3Byb3BzX2luZGV4ZXNbVUJJRElfSVhfVE9QXT17IiwKKyAgICAgICAgaW5kZXhlcywgMzIsIFVCSURJX0lYX1RPUCwKKyAgICAgICAgIn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVVVHJpZTJBcnJheXMoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCB1YmlkaV9wcm9wc190cmllSW5kZXhbJWxkXT17XG4iLCBOVUxMLAorICAgICAgICBwVHJpZSwKKyAgICAgICAgIlxufTtcblxuIik7CisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDMyX3QgdWJpZGlfcHJvcHNfbWlycm9yc1slbGRdPXtcbiIsCisgICAgICAgIG1pcnJvcnMsIDMyLCBtaXJyb3JUb3AsCisgICAgICAgICJcbn07XG5cbiIpOworICAgIFVDaGFyMzIgamdTdGFydD1pbmRleGVzW1VCSURJX0lYX0pHX1NUQVJUXTsKKyAgICBVQ2hhcjMyIGpnTGltaXQ9aW5kZXhlc1tVQklESV9JWF9KR19MSU1JVF07CisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDhfdCB1YmlkaV9wcm9wc19qZ0FycmF5WyVsZF09e1xuIiwKKyAgICAgICAgamdBcnJheSsoamdTdGFydC1NSU5fSkdfU1RBUlQpLCA4LCBqZ0xpbWl0LWpnU3RhcnQsCisgICAgICAgICJcbn07XG5cbiIpOworICAgIFVDaGFyMzIgamdTdGFydDI9aW5kZXhlc1tVQklESV9JWF9KR19TVEFSVDJdOworICAgIFVDaGFyMzIgamdMaW1pdDI9aW5kZXhlc1tVQklESV9JWF9KR19MSU1JVDJdOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQ4X3QgdWJpZGlfcHJvcHNfamdBcnJheTJbJWxkXT17XG4iLAorICAgICAgICBqZ0FycmF5MisoamdTdGFydDItTUlOX0pHX1NUQVJUMiksIDgsIGpnTGltaXQyLWpnU3RhcnQyLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICBmcHV0cygKKyAgICAgICAgInN0YXRpYyBjb25zdCBVQmlEaVByb3BzIHViaWRpX3Byb3BzX3NpbmdsZXRvbj17XG4iCisgICAgICAgICIgIE5VTEwsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX2luZGV4ZXMsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX21pcnJvcnMsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX2pnQXJyYXksXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX2pnQXJyYXkyLFxuIiwKKyAgICAgICAgZik7CisgICAgdXNyY193cml0ZVVUcmllMlN0cnVjdChmLAorICAgICAgICAiICB7XG4iLAorICAgICAgICBwVHJpZSwgInViaWRpX3Byb3BzX3RyaWVJbmRleCIsIE5VTEwsCisgICAgICAgICIgIH0sXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwgIiAgeyAiLCBkYXRhSW5mby5mb3JtYXRWZXJzaW9uLCA4LCA0LCAiIH1cbiIpOworICAgIGZwdXRzKCJ9O1xuIiwgZik7CisgICAgZmNsb3NlKGYpOworfQorCit2b2lkCitCaURpUHJvcHNCdWlsZGVyOjp3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBVTmV3RGF0YU1lbW9yeSAqcERhdGE9dWRhdGFfY3JlYXRlKHBhdGgsIFVCSURJX0RBVEFfVFlQRSwgVUJJRElfREFUQV9OQU1FLCAmZGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29weXJpZ2h0ID8gVV9DT1BZUklHSFRfU1RSSU5HIDogTlVMTCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdWRhdGFfY3JlYXRlKCVzLCB1YmlkaS5pY3UpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgaW5kZXhlcywgc2l6ZW9mKGluZGV4ZXMpKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCB0cmllQmxvY2ssIHRyaWVTaXplKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBtaXJyb3JzLCA0Km1pcnJvclRvcCk7CisgICAgVUNoYXIzMiBqZ1N0YXJ0PWluZGV4ZXNbVUJJRElfSVhfSkdfU1RBUlRdOworICAgIFVDaGFyMzIgamdMaW1pdD1pbmRleGVzW1VCSURJX0lYX0pHX0xJTUlUXTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBqZ0FycmF5KyhqZ1N0YXJ0LU1JTl9KR19TVEFSVCksIGpnTGltaXQtamdTdGFydCk7CisgICAgVUNoYXIzMiBqZ1N0YXJ0Mj1pbmRleGVzW1VCSURJX0lYX0pHX1NUQVJUMl07CisgICAgVUNoYXIzMiBqZ0xpbWl0Mj1pbmRleGVzW1VCSURJX0lYX0pHX0xJTUlUMl07CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgamdBcnJheTIrKGpnU3RhcnQyLU1JTl9KR19TVEFSVDIpLCBqZ0xpbWl0Mi1qZ1N0YXJ0Mik7CisKKyAgICBsb25nIGRhdGFMZW5ndGg9dWRhdGFfZmluaXNoKHBEYXRhLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBiaWRpcHJvcHNidWlsZGVyICVkIHdyaXRpbmcgdGhlIG91dHB1dCBmaWxlXG4iLCBlcnJvckNvZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoZGF0YUxlbmd0aCE9aW5kZXhlc1tVQklESV9JWF9MRU5HVEhdKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJ1ZGF0YV9maW5pc2godWJpZGkuaWN1KSByZXBvcnRzICVsZCBieXRlcyB3cml0dGVuIGJ1dCBzaG91bGQgYmUgJWxkXG4iLAorICAgICAgICAgICAgICAgIGRhdGFMZW5ndGgsIChsb25nKWluZGV4ZXNbVUJJRElfSVhfTEVOR1RIXSk7CisgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgfQorfQorCitQcm9wc0J1aWxkZXIgKgorY3JlYXRlQmlEaVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gTlVMTDsgfQorICAgIFByb3BzQnVpbGRlciAqcGI9bmV3IEJpRGlQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKTsKKyAgICBpZihwYj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHBiOworfQorCisvKgorICogSGV5LCBFbWFjcywgcGxlYXNlIHNldCB0aGUgZm9sbG93aW5nOgorICoKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL2Nhc2Vwcm9wc2J1aWxkZXIuY3BwIGIvdW5pY29kZS9jL2dlbnByb3BzL2Nhc2Vwcm9wc2J1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDM4OTkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvY2FzZXByb3BzYnVpbGRlci5jcHAKQEAgLTAsMCArMSwxMjEzIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgY2FzZXByb3BzYnVpbGRlci5jcHAgKHdhcyBnZW5jYXNlL3N0b3JlLmMpCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMjAwNGF1ZzI4CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBTdG9yZSBVbmljb2RlIGNhc2UgbWFwcGluZyBwcm9wZXJ0aWVzIGVmZmljaWVudGx5IGZvcgorKiAgIHJhbmRvbSBhY2Nlc3MuCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdGEuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJjbWVtb3J5LmgiCisjaW5jbHVkZSAiY3N0cmluZy5oIgorI2luY2x1ZGUgImdlbnByb3BzLmgiCisjaW5jbHVkZSAicHB1Y2QuaCIKKyNpbmNsdWRlICJ1YXNzZXJ0LmgiCisjaW5jbHVkZSAidWFycnNvcnQuaCIKKyNpbmNsdWRlICJ1Y2FzZS5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisjaW5jbHVkZSAidXRyaWUyLmgiCisjaW5jbHVkZSAid3JpdGVzcmMuaCIKKworLyogVW5pY29kZSBjYXNlIG1hcHBpbmcgcHJvcGVydGllcyBmaWxlIGZvcm1hdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgZm9ybWF0IHByZXBhcmVkIGFuZCB3cml0dGVuIGhlcmUgY29udGFpbnMgc2V2ZXJhbCBkYXRhCitzdHJ1Y3R1cmVzIHRoYXQgc3RvcmUgaW5kZXhlcyBvciBkYXRhLgorCitCZWZvcmUgdGhlIGRhdGEgY29udGVudHMgZGVzY3JpYmVkIGJlbG93LCB0aGVyZSBhcmUgdGhlIGhlYWRlcnMgcmVxdWlyZWQgYnkKK3RoZSB1ZGF0YSBBUEkgZm9yIGxvYWRpbmcgSUNVIGRhdGEuIEVzcGVjaWFsbHksIGEgVURhdGFJbmZvIHN0cnVjdHVyZQorcHJlY2VkZXMgdGhlIGFjdHVhbCBkYXRhLiBJdCBjb250YWlucyBwbGF0Zm9ybSBwcm9wZXJ0aWVzIHZhbHVlcyBhbmQgdGhlCitmaWxlIGZvcm1hdCB2ZXJzaW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgZm9ybWF0IHZlcnNpb24gMy4wIC4KKworRm9ybWF0IHZlcnNpb24gMS4xIGFkZHMgZGF0YSBmb3IgY2FzZSBjbG9zdXJlLgorCitGb3JtYXQgdmVyc2lvbiAxLjIgYWRkcyBhbiBleGNlcHRpb24gYml0IGZvciBjYXNlLWlnbm9yYWJsZS4gTmVlZGVkIGJlY2F1c2UKK3RoZSBDYXNlZCBhbmQgQ2FzZV9JZ25vcmFibGUgcHJvcGVydGllcyBhcmUgbm90IGRpc2pvaW50LgorCitGb3JtYXQgdmVyc2lvbiAyLjAgY2hhbmdlcyBmcm9tIFVUcmllIHRvIFVUcmllMi4KKworRm9ybWF0IHZlcnNpb24gMy4wIChJQ1UgNDkpIHNodWZmbGVzIHRoZSB0cmllIGJpdHMgdG8gc2ltcGxpZnkgc29tZSBidWlsZGVyIGFuZCBydW50aW1lIGNvZGUuCitJdCBtb3ZlcyB0aGUgQ2FzZV9JZ25vcmFibGUgZmxhZyBmcm9tIHNvbWV0aW1lcy10cmllLWJpdCA2LCBzb21ldGltZXMtZXhjZXB0aW9uLWJpdCAxMQordG8gYWx3YXlzLXRyaWUtYml0IDIgYW5kIGFkanVzdHMgdGhlIGhpZ2hlciB0cmllIGJpdHMgYWNjb3JkaW5nbHkuCitFeGNlcHRpb24gaW5kZXggcmVkdWNlZCBmcm9tIDEyIGJpdHMgdG8gMTEsIHNpbXBsZSBjYXNlIG1hcHBpbmcgZGVsdGEgcmVkdWNlZCBmcm9tIDEwIGJpdHMgdG8gOS4KKworVGhlIGZpbGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzOgorCisgICAgY29uc3QgaW50MzJfdCBpbmRleGVzW2kwXSB3aXRoIHZhbHVlcyBpMCwgaTEsIC4uLjoKKyAgICAoc2VlIFVDQVNFX0lYXy4uLiBjb25zdGFudHMgZm9yIG5hbWVzIG9mIGluZGV4ZXMpCisKKyAgICBpMCBpbmRleExlbmd0aDsgLS0gbGVuZ3RoIG9mIGluZGV4ZXNbXSAoVUNBU0VfSVhfVE9QKQorICAgIGkxIGRhdGFMZW5ndGg7IC0tIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgcG9zdC1oZWFkZXIgZGF0YSAoaW5jbC4gaW5kZXhlc1tdKQorICAgIGkyIHRyaWVTaXplOyAtLSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjYXNlIG1hcHBpbmcgcHJvcGVydGllcyB0cmllCisgICAgaTMgZXhjZXB0aW9uc0xlbmd0aDsgLS0gbGVuZ3RoIGluIHVpbnQxNl90IG9mIHRoZSBleGNlcHRpb25zIGFycmF5CisgICAgaTQgdW5mb2xkTGVuZ3RoOyAtLSBsZW5ndGggaW4gdWludDE2X3Qgb2YgdGhlIHJldmVyc2UtZm9sZGluZyBhcnJheSAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDEuMSkKKworICAgIGk1Li5pMTQgcmVzZXJ2ZWRJbmRleGVzOyAtLSByZXNlcnZlZCB2YWx1ZXM7IDAgZm9yIG5vdworCisgICAgaTE1IG1heEZ1bGxMZW5ndGg7IC0tIG1heGltdW0gbGVuZ3RoIG9mIGEgZnVsbCBjYXNlIG1hcHBpbmcvZm9sZGluZyBzdHJpbmcKKworCisgICAgU2VyaWFsaXplZCB0cmllLCBzZWUgdXRyaWUyLmg7CisKKyAgICBjb25zdCB1aW50MTZfdCBleGNlcHRpb25zW2V4Y2VwdGlvbnNMZW5ndGhdOworCisgICAgY29uc3QgVUNoYXIgdW5mb2xkW3VuZm9sZExlbmd0aF07CisKKworVHJpZSBkYXRhIHdvcmQ6CitCaXRzCitpZihleGNlcHRpb24pIHsKKyAgICAxNS4uNSAgIHVuc2lnbmVkIGV4Y2VwdGlvbiBpbmRleAorfSBlbHNlIHsKKyAgICBpZihub3QgdW5jYXNlZCkgeworICAgICAgICAxNS4uNyAgIHNpZ25lZCBkZWx0YSB0byBzaW1wbGUgY2FzZSBtYXBwaW5nIGNvZGUgcG9pbnQKKyAgICAgICAgICAgICAgICAoYWRkIGRlbHRhIHRvIGlucHV0IGNvZGUgcG9pbnQpCisgICAgfSBlbHNlIHsKKyAgICAgICAgMTUuLjcgICByZXNlcnZlZCwgMAorICAgIH0KKyAgICAgNi4uNSAgIDAgbm9ybWFsIGNoYXJhY3RlciB3aXRoIGNjPTAKKyAgICAgICAgICAgIDEgc29mdC1kb3R0ZWQgY2hhcmFjdGVyCisgICAgICAgICAgICAyIGNjPTIzMAorICAgICAgICAgICAgMyBvdGhlciBjYworICAgICAgICAgICAgVGhlIHJ1bnRpbWUgY29kZSByZWxpZXMgb24gdGhlc2UgdHdvIGJpdHMgdG8gYmUgYWRqYWNlbnQgd2l0aCB0aGlzIGVuY29kaW5nLgorfQorICAgIDQgICBleGNlcHRpb24KKyAgICAzICAgY2FzZS1zZW5zaXRpdmUKKyAgICAyICAgY2FzZS1pZ25vcmFibGUKKyAxLi4wICAgMCB1bmNhc2VkCisgICAgICAgIDEgbG93ZXJjYXNlCisgICAgICAgIDIgdXBwZXJjYXNlCisgICAgICAgIDMgdGl0bGVjYXNlCisgICAgICAgIFRoZSBydW50aW1lIGNvZGUgcmVsaWVzIG9uIHRoZSBjYXNlLWlnbm9yYWJsZSBhbmQgY2FzZSB0eXBlIGJpdHMgMi4uMAorICAgICAgICB0byBiZSB0aGUgbG93ZXN0IGJpdHMgd2l0aCB0aGlzIGVuY29kaW5nLgorCisKK0V4Y2VwdGlvbnM6CitBIHN1Yi1hcnJheSBvZiB0aGUgZXhjZXB0aW9ucyBhcnJheSBpcyBpbmRleGVkIGJ5IHRoZSBleGNlcHRpb24gaW5kZXggaW4gYQordHJpZSB3b3JkLgorVGhlIHN1Yi1hcnJheSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAgICB1aW50MTZfdCBleGNXb3JkOworICAgIHVpbnQxNl90IG9wdGlvbmFsIHZhbHVlcyBbXTsKKyAgICBVVEYtMTYgc3RyaW5ncyBmb3IgZnVsbCAoc3RyaW5nKSBtYXBwaW5ncyBmb3IgbG93ZXJjYXNlLCBjYXNlIGZvbGRpbmcsIHVwcGVyY2FzZSwgdGl0bGVjYXNlCisKK2V4Y1dvcmQ6IChzZWUgVUNBU0VfRVhDXy4uLikKK0JpdHMKKyAgICAxNSAgY29uZGl0aW9uYWwgY2FzZSBmb2xkaW5nCisgICAgMTQgIGNvbmRpdGlvbmFsIHNwZWNpYWwgY2FzaW5nCisxMy4uMTIgIHNhbWUgYXMgbm9uLWV4Y2VwdGlvbiB0cmllIGRhdGEgYml0cyA2Li41CisgICAgICAgIG1vdmVkIGhlcmUgYmVjYXVzZSB0aGUgZXhjZXB0aW9uIGluZGV4IG5lZWRzIG1vcmUgYml0cyB0aGFuIHRoZSBkZWx0YQorICAgICAgICAwIG5vcm1hbCBjaGFyYWN0ZXIgd2l0aCBjYz0wCisgICAgICAgIDEgc29mdC1kb3R0ZWQgY2hhcmFjdGVyCisgICAgICAgIDIgY2M9MjMwCisgICAgICAgIDMgb3RoZXIgY2MKKzExICAgICAgcmVzZXJ2ZWQKKyAgICAgICAgKHdhcyB1c2VkIGluIGZvcm1hdFZlcnNpb24gMS4yLi4yLjA6CisgICAgICAgICBjYXNlLWlnbm9yYWJsZSAodXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgaXMgY2FzZWQgb3IgaGFzIGFub3RoZXIgZXhjZXB0aW9uKSkKKzEwLi4gOSAgcmVzZXJ2ZWQKKyAgICAgOCAgaWYgc2V0LCB0aGVuIGZvciBlYWNoIG9wdGlvbmFsLXZhbHVlIHNsb3QgdGhlcmUgYXJlIDIgdWludDE2X3QgdmFsdWVzCisgICAgICAgIChoaWdoIGFuZCBsb3cgcGFydHMgb2YgMzItYml0IHZhbHVlcykKKyAgICAgICAgaW5zdGVhZCBvZiBzaW5nbGUgb25lcworIDcuLiAwICBiaXRzIGZvciB3aGljaCBvcHRpb25hbCB2YWx1ZSBpcyBwcmVzZW50CisKK09wdGlvbmFsLXZhbHVlIHNsb3RzOgorMCAgIGxvd2VyY2FzZSBtYXBwaW5nIChjb2RlIHBvaW50KQorMSAgIGNhc2UgZm9sZGluZyAoY29kZSBwb2ludCkKKzIgICB1cHBlcmNhc2UgbWFwcGluZyAoY29kZSBwb2ludCkKKzMgICB0aXRsZWNhc2UgbWFwcGluZyAoY29kZSBwb2ludCkKKzQgICByZXNlcnZlZAorNSAgIHJlc2VydmVkCis2ICAgY2xvc3VyZSBtYXBwaW5ncyAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDEuMSkKKzcgICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZnVsbCAoc3RyaW5nKSBjYXNlIG1hcHBpbmcKKyAgICB0aGUgbGVuZ3RoIG9mIGVhY2ggaXMgZW5jb2RlZCBpbiBhIG5pYmJsZSBvZiB0aGlzIG9wdGlvbmFsIHZhbHVlLAorICAgIGFuZCB0aGUgc3RyaW5ncyBmb2xsb3cgdGhpcyBvcHRpb25hbCB2YWx1ZSBpbiB0aGUgc2FtZSBvcmRlcjoKKyAgICBsb3dlci9mb2xkL3VwcGVyL3RpdGxlCisKK1RoZSBvcHRpb25hbCBjbG9zdXJlIG1hcHBpbmdzIHZhbHVlIGlzIHVzZWQgYXMgZm9sbG93czoKK0JpdHMgMC4uMyBjb250YWluIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcgb2YgY29kZSBwb2ludHMgZm9yIGNhc2UgY2xvc3VyZS4KK1RoZSBzdHJpbmcgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgZnVsbCBjYXNlIG1hcHBpbmdzLCBvciB0aGUgY2xvc3VyZSB2YWx1ZQorc2xvdCBpZiB0aGVyZSBhcmUgbm8gZnVsbCBjYXNlIG1hcHBpbmdzLgorQml0cyA0Li4xNSBhcmUgcmVzZXJ2ZWQgYW5kIGNvdWxkIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byBpbmRpY2F0ZSB0aGUKK251bWJlciBvZiBzdHJpbmdzIGZvciBjYXNlIGNsb3N1cmUuCitDb21wbGV0ZSBjYXNlIGNsb3N1cmUgZm9yIGEgY29kZSBwb2ludCBpcyBnaXZlbiBieSB0aGUgdW5pb24gb2YgYWxsIHNpbXBsZQorYW5kIGZ1bGwgY2FzZSBtYXBwaW5ncyBhbmQgZm9sZGluZ3MsIHBsdXMgdGhlIGNhc2UgY2xvc3VyZSBjb2RlIHBvaW50cworKGFuZCBwb3RlbnRpYWxseSwgaW4gdGhlIGZ1dHVyZSwgY2FzZSBjbG9zdXJlIHN0cmluZ3MpLgorCitGb3Igc3BhY2Ugc2F2aW5nLCBzb21lIHZhbHVlcyBhcmUgbm90IHN0b3JlZC4gTG9va3VwcyBhcmUgYXMgZm9sbG93czoKKy0gSWYgc3BlY2lhbCBjYXNpbmcgaXMgY29uZGl0aW9uYWwsIHRoZW4gbm8gZnVsbCBsb3dlci91cHBlci90aXRsZSBtYXBwaW5nCisgIHN0cmluZ3MgYXJlIHN0b3JlZC4KKy0gSWYgY2FzZSBmb2xkaW5nIGlzIGNvbmRpdGlvbmFsLCB0aGVuIG5vIHNpbXBsZSBvciBmdWxsIGNhc2UgZm9sZGluZ3MgYXJlCisgIHN0b3JlZC4KKy0gRmFsbCBiYWNrIGluIHRoaXMgb3JkZXI6CisgICAgZnVsbCAoc3RyaW5nKSBtYXBwaW5nIC0tIGlmIGZ1bGwgbWFwcGluZ3MgYXJlIHVzZWQKKyAgICBzaW1wbGUgKGNvZGUgcG9pbnQpIG1hcHBpbmcgb2YgdGhlIHNhbWUgdHlwZQorICAgIHNpbXBsZSBmb2xkLT5zaW1wbGUgbG93ZXIKKyAgICBzaW1wbGUgdGl0bGUtPnNpbXBsZSB1cHBlcgorICAgIGZpbmFsbHksIHRoZSBvcmlnaW5hbCBjb2RlIHBvaW50IChubyBtYXBwaW5nKQorCitUaGlzIGZhbGxiYWNrIG9yZGVyIGlzIHN0cmljdDoKK0luIHBhcnRpY3VsYXIsIHRoZSBmYWxsYmFjayBmcm9tIGZ1bGwgY2FzZSBmb2xkaW5nIGlzIHRvIHNpbXBsZSBjYXNlIGZvbGRpbmcsCitub3QgdG8gZnVsbCBsb3dlcmNhc2UgbWFwcGluZy4KKworUmV2ZXJzZSBjYXNlIGZvbGRpbmcgZGF0YSAoInVuZm9sZCIpIGFycmF5OiAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDEuMSkKKworVGhpcyBhcnJheSBzdG9yZXMgc29tZSBtaXNjZWxsYW5lb3VzIHZhbHVlcyBmb2xsb3dlZCBieSBhIHRhYmxlLiBUaGUgZGF0YSBtYXBzCitiYWNrIGZyb20gbXVsdGktY2hhcmFjdGVyIHN0cmluZ3MgdG8gdGhlaXIgb3JpZ2luYWwgY29kZSBwb2ludHMsIGZvciB1c2UKK2luIGNhc2UgY2xvc3VyZS4KKworVGhlIHRhYmxlIGNvbnRhaW5zIHR3byBjb2x1bW5zIG9mIHN0cmluZ3MuCitUaGUgc3RyaW5nIGluIHRoZSBmaXJzdCBjb2x1bW4gaXMgdGhlIGNhc2UgZm9sZGluZyBvZiBlYWNoIG9mIHRoZSBjb2RlIHBvaW50cworaW4gdGhlIHNlY29uZCBjb2x1bW4uIFRoZSBzdHJpbmdzIGFyZSB0ZXJtaW5hdGVkIHdpdGggTlVMIG9yIGJ5IHRoZSBlbmQgb2YgdGhlCitjb2x1bW4sIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KKworVGhlIG1pc2NlbGxhbmVvdXMgZGF0YSB0YWtlcyB1cCBvbmUgcHNldWRvLXJvdyBhbmQgaW5jbHVkZXM6CistIG51bWJlciBvZiByb3dzCistIG51bWJlciBvZiBVQ2hhcnMgcGVyIHJvdworLSBudW1iZXIgb2YgVUNoYXJzIGluIHRoZSBsZWZ0IChmb2xkaW5nIHN0cmluZykgY29sdW1uCisKK1RoZSB0YWJsZSBpcyBzb3J0ZWQgYnkgaXRzIGZpcnN0IGNvbHVtbi4gVmFsdWVzIGluIHRoZSBmaXJzdCBjb2x1bW4gYXJlIHVuaXF1ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworVV9OQU1FU1BBQ0VfVVNFCisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIFVEYXRhSW5mbyBkYXRhSW5mbz17CisgICAgc2l6ZW9mKFVEYXRhSW5mbyksCisgICAgMCwKKworICAgIFVfSVNfQklHX0VORElBTiwKKyAgICBVX0NIQVJTRVRfRkFNSUxZLAorICAgIFVfU0laRU9GX1VDSEFSLAorICAgIDAsCisKKyAgICAvKiBkYXRhRm9ybWF0PSJjQXNFIiAqLworICAgIHsgVUNBU0VfRk1UXzAsIFVDQVNFX0ZNVF8xLCBVQ0FTRV9GTVRfMiwgVUNBU0VfRk1UXzMgfSwKKyAgICB7IDMsIDAsIDAsIDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcm1hdFZlcnNpb24gKi8KKyAgICB7IDYsIDAsIDAsIDAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGFWZXJzaW9uICovCit9OworCisjZGVmaW5lIFVHRU5DQVNFX0VYQ19TSElGVCAgICAgMjAKKyNkZWZpbmUgVUdFTkNBU0VfRVhDX01BU0sgICAgICAweGZmZjAwMDAwCisKK2VudW0geworICAgIE1BWF9FWENfQ09VTlQ9KFVHRU5DQVNFX0VYQ19NQVNLPj5VR0VOQ0FTRV9FWENfU0hJRlQpKzEKK307CisKK3N0cnVjdCBFeGNQcm9wcyB7CisgICAgRXhjUHJvcHMoKQorICAgICAgICAgICAgOiBoYXNDb25kaXRpb25hbENhc2VNYXBwaW5ncyhGQUxTRSksIGhhc1R1cmtpY0Nhc2VGb2xkaW5nKEZBTFNFKSB7fQorICAgIEV4Y1Byb3BzKGNvbnN0IFVuaVByb3BzICZvdGhlclByb3BzKQorICAgICAgICAgICAgOiBwcm9wcyhvdGhlclByb3BzKSwKKyAgICAgICAgICAgICAgaGFzQ29uZGl0aW9uYWxDYXNlTWFwcGluZ3MoRkFMU0UpLCBoYXNUdXJraWNDYXNlRm9sZGluZyhGQUxTRSkge30KKworICAgIFVuaVByb3BzIHByb3BzOworICAgIFVuaWNvZGVTZXQgY2xvc3VyZTsKKyAgICBVQm9vbCBoYXNDb25kaXRpb25hbENhc2VNYXBwaW5nczsKKyAgICBVQm9vbCBoYXNUdXJraWNDYXNlRm9sZGluZzsKK307CisKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSB1Y2FzZS5pY3UgdW5mb2xkW10gZGF0YSBhcnJheS4KKyAqIFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB1Y2FzZS5pY3Ugc28gdGhhdCB0aGUgcnVudGltZSBjb2RlIHdpbGwgd29yayB3aXRoCisgKiBjaGFuZ2luZyB2YWx1ZXMsIGJ1dCB0aGV5IGFyZSBoYXJkY29kZWQgaGVyZSBmb3Igc2ltcGxpY2l0eS4KKyAqIFRoZXkgYXJlIG9wdGltaXplZCwgdGhhdCBpcywgcHJvdmlkZSBmb3IgbWluaW1hbCB0YWJsZSBjb2x1bW4gd2lkdGhzLAorICogZm9yIHRoZSBhY3R1YWwgVW5pY29kZSBkYXRhLCBzbyB0aGF0IHRoZSB0YWJsZSBzaXplIGlzIG1pbmltaXplZC4KKyAqIEZ1dHVyZSB2ZXJzaW9ucyBvZiBVbmljb2RlIG1heSByZXF1aXJlIGluY3JlYXNlcyBvZiBzb21lIG9mIHRoZXNlIHZhbHVlcy4KKyAqLworZW51bSB7CisgICAgVUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSD0zLAorICAgIFVHRU5DQVNFX1VORk9MRF9DUF9XSURUSD0yLAorICAgIFVHRU5DQVNFX1VORk9MRF9XSURUSD1VR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIK1VHRU5DQVNFX1VORk9MRF9DUF9XSURUSAorfTsKKworY2xhc3MgQ2FzZVByb3BzQnVpbGRlciA6IHB1YmxpYyBQcm9wc0J1aWxkZXIgeworcHVibGljOgorICAgIENhc2VQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIH5DYXNlUHJvcHNCdWlsZGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wcyhjb25zdCBVbmlQcm9wcyAmLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIGJ1aWxkKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbWFrZUV4Y1Byb3BzKFVDaGFyMzIgYywgdWludDMyX3QgdmFsdWUsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdm9pZCBhZGRVbmZvbGRpbmcoVUNoYXIzMiBjLCBjb25zdCBVbmljb2RlU3RyaW5nICZzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZvaWQgbWFrZVVuZm9sZERhdGEoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2b2lkIGFkZENsb3N1cmVNYXBwaW5nKFVDaGFyMzIgc3JjLCBVQ2hhcjMyIGRlc3QsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgVUJvb2wgYWRkQ2xvc3VyZShVQ2hhcjMyIG9yaWcsIFVDaGFyMzIgcHJldjIsIFVDaGFyMzIgcHJldiwgVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdm9pZCBtYWtlQ2FzZUNsb3N1cmUoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICBpbnQzMl90IG1ha2VFeGNlcHRpb24oVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwgRXhjUHJvcHMgJmVwLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZvaWQgbWFrZUV4Y2VwdGlvbnMoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIFVuaWNvZGVTZXQgcmVsZXZhbnRQcm9wczsKKyAgICAvKgorICAgICAqIFVuaWNvZGUgc2V0IGNvbGxlY3RpbmcgdGhlIGNhc2Utc2Vuc2l0aXZlIGNoYXJhY3RlcnM7CisgICAgICogc2VlIHVjaGFyLmggVUNIQVJfQ0FTRV9TRU5TSVRJVkUuCisgICAgICogQWRkIGNvZGUgcG9pbnRzIGZyb20gY2FzZSBtYXBwaW5ncy9mb2xkaW5ncyBpbgorICAgICAqIHRoZSByb290IGxvY2FsZSBhbmQgd2l0aCBkZWZhdWx0IG9wdGlvbnMuCisgICAgICovCisgICAgVW5pY29kZVNldCBjYXNlU2Vuc2l0aXZlOworICAgIC8qIHJldmVyc2UgY2FzZSBmb2xkaW5nICgidW5mb2xkIikgZGF0YSAqLworICAgIFVuaWNvZGVTdHJpbmcgdW5mb2xkOworICAgIFVuaWNvZGVTdHJpbmcgZXhjZXB0aW9uczsKKyAgICBFeGNQcm9wcyAqKmV4Y1Byb3BzOworICAgIGludDMyX3QgZXhjUHJvcHNDb3VudDsKKyAgICAvKiBiZWNvbWVzIGluZGV4ZXNbVUNBU0VfSVhfTUFYX0ZVTExfTEVOR1RIXSAqLworICAgIGludDMyX3QgbWF4RnVsbExlbmd0aDsKKyAgICBVVHJpZTIgKnBUcmllOworfTsKKworQ2FzZVByb3BzQnVpbGRlcjo6Q2FzZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpCisgICAgICAgIDogZXhjUHJvcHMoTlVMTCksIGV4Y1Byb3BzQ291bnQoMCksIG1heEZ1bGxMZW5ndGgoVTE2X01BWF9MRU5HVEgpLCBwVHJpZShOVUxMKSB7CisgICAgLy8gVGhpcyBidWlsZGVyIGVuY29kZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgorICAgIHJlbGV2YW50UHJvcHMuCisgICAgICAgIGFkZChVQ0hBUl9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTKS4gIC8vIDAgdnMuIDIzMCB2cy4gb3RoZXIKKyAgICAgICAgYWRkKFVDSEFSX1NPRlRfRE9UVEVEKS4KKyAgICAgICAgYWRkKFVDSEFSX0xPV0VSQ0FTRSkuCisgICAgICAgIGFkZChVQ0hBUl9VUFBFUkNBU0UpLgorICAgICAgICBhZGQoVUNIQVJfQ0FTRV9JR05PUkFCTEUpLgorICAgICAgICBhZGQoVUNIQVJfU0lNUExFX0NBU0VfRk9MRElORykuCisgICAgICAgIGFkZChVQ0hBUl9TSU1QTEVfTE9XRVJDQVNFX01BUFBJTkcpLgorICAgICAgICBhZGQoVUNIQVJfU0lNUExFX1RJVExFQ0FTRV9NQVBQSU5HKS4KKyAgICAgICAgYWRkKFVDSEFSX1NJTVBMRV9VUFBFUkNBU0VfTUFQUElORykuCisgICAgICAgIGFkZChVQ0hBUl9DQVNFX0ZPTERJTkcpLgorICAgICAgICBhZGQoVUNIQVJfTE9XRVJDQVNFX01BUFBJTkcpLgorICAgICAgICBhZGQoVUNIQVJfVElUTEVDQVNFX01BUFBJTkcpLgorICAgICAgICBhZGQoVUNIQVJfVVBQRVJDQVNFX01BUFBJTkcpLgorICAgICAgICBhZGQoUFBVQ0RfQ09ORElUSU9OQUxfQ0FTRV9NQVBQSU5HUykuCisgICAgICAgIGFkZChQUFVDRF9UVVJLSUNfQ0FTRV9GT0xESU5HKTsKKyAgICAvLyBXcml0ZSAidW5mb2xkIiBtZXRhIGRhdGEgaW50byB0aGUgZmlyc3Qgcm93LiBNdXN0IGJlIFVHRU5DQVNFX1VORk9MRF9XSURUSCBVQ2hhcnMuCisgICAgdW5mb2xkLgorICAgICAgICBhcHBlbmQoMCkuCisgICAgICAgIGFwcGVuZCgoVUNoYXIpVUdFTkNBU0VfVU5GT0xEX1dJRFRIKS4KKyAgICAgICAgYXBwZW5kKChVQ2hhcilVR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIKS4KKyAgICAgICAgYXBwZW5kKDApLgorICAgICAgICBhcHBlbmQoMCk7CisgICAgVV9BU1NFUlQodW5mb2xkLmxlbmd0aCgpPT1VR0VOQ0FTRV9VTkZPTERfV0lEVEgpOworICAgIHBUcmllPXV0cmllMl9vcGVuKDAsIDAsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGNhc2Vwcm9wc2J1aWxkZXIgdXRyaWUyX29wZW4oKSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBleGNQcm9wcz1uZXcgRXhjUHJvcHMgKltNQVhfRVhDX0NPVU5UXTsKKyAgICBpZihleGNQcm9wcz09TlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGNhc2Vwcm9wc2J1aWxkZXIgb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICIKKyAgICAgICAgICAgICAgICAidGhlIGFycmF5IG9mIGV4Y2VwdGlvbnMgcHJvcGVydGllc1xuIik7CisgICAgICAgIGVycm9yQ29kZT1VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgIH0KK30KKworQ2FzZVByb3BzQnVpbGRlcjo6fkNhc2VQcm9wc0J1aWxkZXIoKSB7CisgICAgdXRyaWUyX2Nsb3NlKHBUcmllKTsKKyAgICBmb3IoaW50MzJfdCBpPTA7IGk8ZXhjUHJvcHNDb3VudDsgKytpKSB7CisgICAgICAgIGRlbGV0ZSBleGNQcm9wc1tpXTsKKyAgICB9CisgICAgZGVsZXRlW10gZXhjUHJvcHM7Cit9CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OnNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKSB7CisgICAgdXBydl9tZW1jcHkoZGF0YUluZm8uZGF0YVZlcnNpb24sIHZlcnNpb24sIDQpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjphZGRVbmZvbGRpbmcoVUNoYXIzMiBjLCBjb25zdCBVbmljb2RlU3RyaW5nICZzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIGludDMyX3QgbGVuZ3RoPXMubGVuZ3RoKCk7CisgICAgaWYobGVuZ3RoPlVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY2FzZSBmb2xkaW5nIHRvbyBsb25nIChsZW5ndGg9JWxkPiVkPVVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgpXG4iLAorICAgICAgICAgICAgICAgIChsb25nKWxlbmd0aCwgVUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSCk7CisgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgfQorICAgIHVuZm9sZC5hcHBlbmQocyk7CisgICAgd2hpbGUobGVuZ3RoPFVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgpIHsKKyAgICAgICAgdW5mb2xkLmFwcGVuZCgwKTsKKyAgICAgICAgKytsZW5ndGg7CisgICAgfQorCisgICAgdW5mb2xkLmFwcGVuZChjKTsKKyAgICBpZihVMTZfTEVOR1RIKGMpPFVHRU5DQVNFX1VORk9MRF9DUF9XSURUSCkgeworICAgICAgICB1bmZvbGQuYXBwZW5kKDApOworICAgIH0KKworICAgIFVfQVNTRVJUKCh1bmZvbGQubGVuZ3RoKCklVUdFTkNBU0VfVU5GT0xEX1dJRFRIKT09MCk7Cit9CisKKy8qIHN0b3JlIGEgY2hhcmFjdGVyJ3MgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OnNldFByb3BzKGNvbnN0IFVuaVByb3BzICZwcm9wcywgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkgfHwgbmV3VmFsdWVzLmNvbnRhaW5zTm9uZShyZWxldmFudFByb3BzKSkgeyByZXR1cm47IH0KKworICAgIFVDaGFyMzIgc3RhcnQ9cHJvcHMuc3RhcnQ7CisgICAgVUNoYXIzMiBlbmQ9cHJvcHMuZW5kOworCisgICAgLyogZGVmYXVsdDogbWFwIHRvIHNlbGYgKi8KKyAgICBpbnQzMl90IGRlbHRhPTA7CisKKyAgICB1aW50MzJfdCB0eXBlOworICAgIGlmKHByb3BzLmJpblByb3BzW1VDSEFSX0xPV0VSQ0FTRV0pIHsKKyAgICAgICAgdHlwZT1VQ0FTRV9MT1dFUjsKKyAgICB9IGVsc2UgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfVVBQRVJDQVNFXSkgeworICAgICAgICB0eXBlPVVDQVNFX1VQUEVSOworICAgIH0gZWxzZSBpZihwcm9wcy5nZXRJbnRQcm9wKFVDSEFSX0dFTkVSQUxfQ0FURUdPUlkpPT1VX1RJVExFQ0FTRV9MRVRURVIpIHsKKyAgICAgICAgdHlwZT1VQ0FTRV9USVRMRTsKKyAgICB9IGVsc2UgeworICAgICAgICB0eXBlPVVDQVNFX05PTkU7CisgICAgfQorICAgIHVpbnQzMl90IHZhbHVlPXR5cGU7CisKKyAgICBVQm9vbCBoYXNNYXBwaW5nPUZBTFNFOworICAgIGlmKHByb3BzLnN1Yz49MCkgeworICAgICAgICAvKiB1cHBlcmNhc2UgbWFwcGluZyBhcyBkZWx0YSBpZiB0aGUgY2hhcmFjdGVyIGlzIGxvd2VyY2FzZSAqLworICAgICAgICBoYXNNYXBwaW5nPVRSVUU7CisgICAgICAgIGlmKHR5cGU9PVVDQVNFX0xPV0VSKSB7CisgICAgICAgICAgICBkZWx0YT1wcm9wcy5zdWMtc3RhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgICAgICB9CisgICAgfQorICAgIGlmKHByb3BzLnNsYz49MCkgeworICAgICAgICAvKiBsb3dlcmNhc2UgbWFwcGluZyBhcyBkZWx0YSBpZiB0aGUgY2hhcmFjdGVyIGlzIHVwcGVyY2FzZSBvciB0aXRsZWNhc2UgKi8KKyAgICAgICAgaGFzTWFwcGluZz1UUlVFOworICAgICAgICBpZih0eXBlPj1VQ0FTRV9VUFBFUikgeworICAgICAgICAgICAgZGVsdGE9cHJvcHMuc2xjLXN0YXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWV8PVVDQVNFX0VYQ0VQVElPTjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihwcm9wcy5zdGM+PTApIHsKKyAgICAgICAgaGFzTWFwcGluZz1UUlVFOworICAgIH0KKyAgICBpZihwcm9wcy5zdWMhPXByb3BzLnN0YykgeworICAgICAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgIH0KKyAgICBpZighcHJvcHMubGMuaXNFbXB0eSgpIHx8ICFwcm9wcy51Yy5pc0VtcHR5KCkgfHwgIXByb3BzLnRjLmlzRW1wdHkoKSB8fAorICAgICAgICBuZXdWYWx1ZXMuY29udGFpbnMoUFBVQ0RfQ09ORElUSU9OQUxfQ0FTRV9NQVBQSU5HUykKKyAgICApIHsKKyAgICAgICAgaGFzTWFwcGluZz1UUlVFOworICAgICAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgIH0KKyAgICBpZiggKHByb3BzLnNjZj49MCAmJiBwcm9wcy5zY2YhPXByb3BzLnNsYykgfHwKKyAgICAgICAgKCFwcm9wcy5jZi5pc0VtcHR5KCkgJiYgcHJvcHMuY2YhPVVuaWNvZGVTdHJpbmcocHJvcHMuc2NmKSkgfHwKKyAgICAgICAgbmV3VmFsdWVzLmNvbnRhaW5zKFBQVUNEX1RVUktJQ19DQVNFX0ZPTERJTkcpCisgICAgKSB7CisgICAgICAgIGhhc01hcHBpbmc9VFJVRTsKKyAgICAgICAgdmFsdWV8PVVDQVNFX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICAvLyBTaW1wbGUgY2FzZSBmb2xkaW5nIGZhbGxzIGJhY2sgdG8gc2ltcGxlIGxvd2VyY2FzaW5nLgorICAgIC8vIElmIHRoZXJlIGlzIG5vIGNhc2UgZm9sZGluZyBidXQgdGhlcmUgaXMgYSBsb3dlcmNhc2UgbWFwcGluZywKKyAgICAvLyB0aGVuIGFkZCBhIGNhc2UgZm9sZGluZyBtYXBwaW5nIHRvIHRoZSBjb2RlIHBvaW50LgorICAgIC8vIEZvciBleGFtcGxlOiBDaGVyb2tlZSB1cHBlcmNhc2Ugc3lsbGFibGVzIHNpbmNlIFVuaWNvZGUgOC4KKyAgICAvLyAoRnVsbCBjYXNlIGZvbGRpbmcgZmFsbHMgYmFjayB0byBzaW1wbGUgY2FzZSBmb2xkaW5nLAorICAgIC8vIG5vdCB0byBmdWxsIGxvd2VyY2FzaW5nLCBzbyB3ZSBuZWVkIG5vdCBhbHNvIGhhbmRsZSBpdCBzcGVjaWFsbHkKKyAgICAvLyBmb3Igc3VjaCBjYXNlcy4pCisgICAgVUNoYXIzMiBzY2Y9cHJvcHMuc2NmOworICAgIGlmKHNjZjwwICYmIHByb3BzLnNsYz49MCkgeworICAgICAgICBzY2Y9c3RhcnQ7CisgICAgICAgIGhhc01hcHBpbmc9VFJVRTsKKyAgICAgICAgdmFsdWV8PVVDQVNFX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICBpZihkZWx0YTxVQ0FTRV9NSU5fREVMVEEgfHwgVUNBU0VfTUFYX0RFTFRBPGRlbHRhKSB7CisgICAgICAgIHZhbHVlfD1VQ0FTRV9FWENFUFRJT047CisgICAgfQorCisgICAgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfU09GVF9ET1RURURdKSB7CisgICAgICAgIHZhbHVlfD1VQ0FTRV9TT0ZUX0RPVFRFRDsKKyAgICB9CisgICAgaW50MzJfdCBjYz1wcm9wcy5nZXRJbnRQcm9wKFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MpOworICAgIGlmKGNjIT0wKSB7CisgICAgICAgIGlmKHByb3BzLmJpblByb3BzW1VDSEFSX1NPRlRfRE9UVEVEXSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogYSBzb2Z0LWRvdHRlZCBjaGFyYWN0ZXIgaGFzIGNjYyE9MFxuIik7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmKGNjPT0yMzApIHsKKyAgICAgICAgICAgIHZhbHVlfD1VQ0FTRV9BQk9WRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlfD1VQ0FTRV9PVEhFUl9BQ0NFTlQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihwcm9wcy5iaW5Qcm9wc1tVQ0hBUl9DQVNFX0lHTk9SQUJMRV0pIHsKKyAgICAgICAgdmFsdWV8PVVDQVNFX0lHTk9SQUJMRTsKKyAgICB9CisKKyAgICBpZigoaGFzTWFwcGluZyB8fCAodmFsdWUmVUNBU0VfRVhDRVBUSU9OKSkgJiYgc3RhcnQhPWVuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHJhbmdlICUwNGxYLi4lMDRsWCBoYXMgY2FzZSBtYXBwaW5ncyAiCisgICAgICAgICAgICAgICAgIm9yIHJlYXNvbnMgZm9yIGRhdGEgc3RydWN0dXJlIGV4Y2VwdGlvbnNcbiIsCisgICAgICAgICAgICAgICAgKGxvbmcpc3RhcnQsIChsb25nKWVuZCk7CisgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBoYW5kbGUgZXhjZXB0aW9ucyAqLworICAgIGlmKHZhbHVlJlVDQVNFX0VYQ0VQVElPTikgeworICAgICAgICAvKiBzaW1wbHkgc3RvcmUgZXhjZXB0aW9ucyBmb3IgbGF0ZXIgcHJvY2Vzc2luZyBhbmQgZW5jb2RpbmcgKi8KKyAgICAgICAgaWYoZXhjUHJvcHNDb3VudD09TUFYX0VYQ19DT1VOVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlcjogdG9vIG1hbnkgZXhjZXB0aW9uc1xuIik7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBFeGNQcm9wcyAqbmV3RXhjUHJvcHM9bmV3IEV4Y1Byb3BzKHByb3BzKTsKKyAgICAgICAgaWYobmV3RXhjUHJvcHM9PU5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGNhc2Vwcm9wc2J1aWxkZXIgb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgcHJvcGVydGllc1xuIik7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuZXdFeGNQcm9wcy0+cHJvcHMuc2NmPXNjZjsKKyAgICAgICAgbmV3RXhjUHJvcHMtPmhhc0NvbmRpdGlvbmFsQ2FzZU1hcHBpbmdzPW5ld1ZhbHVlcy5jb250YWlucyhQUFVDRF9DT05ESVRJT05BTF9DQVNFX01BUFBJTkdTKTsKKyAgICAgICAgbmV3RXhjUHJvcHMtPmhhc1R1cmtpY0Nhc2VGb2xkaW5nPW5ld1ZhbHVlcy5jb250YWlucyhQUFVDRF9UVVJLSUNfQ0FTRV9GT0xESU5HKTsKKyAgICAgICAgdmFsdWV8PSh1aW50MzJfdClleGNQcm9wc0NvdW50PDxVR0VOQ0FTRV9FWENfU0hJRlQ7CisgICAgICAgIGV4Y1Byb3BzW2V4Y1Byb3BzQ291bnQrK109bmV3RXhjUHJvcHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogc3RvcmUgdGhlIHNpbXBsZSBjYXNlIG1hcHBpbmcgZGVsdGEgKi8KKyAgICAgICAgdmFsdWV8PSgodWludDMyX3QpZGVsdGE8PFVDQVNFX0RFTFRBX1NISUZUKSZVQ0FTRV9ERUxUQV9NQVNLOworICAgIH0KKworICAgIHV0cmllMl9zZXRSYW5nZTMyKHBUcmllLCBzdGFydCwgZW5kLCB2YWx1ZSwgVFJVRSwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5hYmxlIHRvIHNldCBjYXNlIG1hcHBpbmcgdmFsdWVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKGhhc01hcHBpbmcpIHsKKyAgICAgICAgLyogdXBkYXRlIHRoZSBjYXNlLXNlbnNpdGl2ZSBzZXQgKi8KKyAgICAgICAgY2FzZVNlbnNpdGl2ZS5hZGQoc3RhcnQpOworICAgICAgICBpZihzY2Y+PTApIHsgY2FzZVNlbnNpdGl2ZS5hZGQoc2NmKTsgfQorICAgICAgICBpZihwcm9wcy5zbGM+PTApIHsgY2FzZVNlbnNpdGl2ZS5hZGQocHJvcHMuc2xjKTsgfQorICAgICAgICBpZihwcm9wcy5zdWM+PTApIHsgY2FzZVNlbnNpdGl2ZS5hZGQocHJvcHMuc3VjKTsgfQorICAgICAgICBpZihwcm9wcy5zdGM+PTApIHsgY2FzZVNlbnNpdGl2ZS5hZGQocHJvcHMuc3RjKTsgfQorICAgICAgICBjYXNlU2Vuc2l0aXZlLmFkZEFsbChwcm9wcy5jZik7CisgICAgICAgIGNhc2VTZW5zaXRpdmUuYWRkQWxsKHByb3BzLmxjKTsKKyAgICAgICAgY2FzZVNlbnNpdGl2ZS5hZGRBbGwocHJvcHMudWMpOworICAgICAgICBjYXNlU2Vuc2l0aXZlLmFkZEFsbChwcm9wcy50Yyk7CisKKyAgICAgICAgLyogdXBkYXRlIG1heEZ1bGxMZW5ndGggKi8KKyAgICAgICAgaWYocHJvcHMuY2YubGVuZ3RoKCk+bWF4RnVsbExlbmd0aCkgeyBtYXhGdWxsTGVuZ3RoPXByb3BzLmNmLmxlbmd0aCgpOyB9CisgICAgICAgIGlmKHByb3BzLmxjLmxlbmd0aCgpPm1heEZ1bGxMZW5ndGgpIHsgbWF4RnVsbExlbmd0aD1wcm9wcy5sYy5sZW5ndGgoKTsgfQorICAgICAgICBpZihwcm9wcy51Yy5sZW5ndGgoKT5tYXhGdWxsTGVuZ3RoKSB7IG1heEZ1bGxMZW5ndGg9cHJvcHMudWMubGVuZ3RoKCk7IH0KKyAgICAgICAgaWYocHJvcHMudGMubGVuZ3RoKCk+bWF4RnVsbExlbmd0aCkgeyBtYXhGdWxsTGVuZ3RoPXByb3BzLnRjLmxlbmd0aCgpOyB9CisgICAgfQorCisgICAgLyogYWRkIHRoZSBtdWx0aS1jaGFyYWN0ZXIgY2FzZSBmb2xkaW5nIHRvIHRoZSAidW5mb2xkIiBkYXRhICovCisgICAgaWYocHJvcHMuY2YuaGFzTW9yZUNoYXIzMlRoYW4oMCwgMHg3ZmZmZmZmZiwgMSkpIHsKKyAgICAgICAgYWRkVW5mb2xkaW5nKHN0YXJ0LCBwcm9wcy5jZiwgZXJyb3JDb2RlKTsKKyAgICB9Cit9CisKK3VpbnQzMl90CitDYXNlUHJvcHNCdWlsZGVyOjptYWtlRXhjUHJvcHMoVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIDA7IH0KKyAgICBpZihleGNQcm9wc0NvdW50PT1NQVhfRVhDX0NPVU5UKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGNhc2Vwcm9wc2J1aWxkZXI6IHRvbyBtYW55IGV4Y2VwdGlvbnNcbiIpOworICAgICAgICBlcnJvckNvZGU9VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIExvY2FsUG9pbnRlcjxFeGNQcm9wcz4gbmV3RXhjUHJvcHMobmV3IEV4Y1Byb3BzKTsKKyAgICBpZihuZXdFeGNQcm9wcz09TlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGNhc2Vwcm9wc2J1aWxkZXIgb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICIKKyAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyBwcm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmKCh2YWx1ZSZVQ0FTRV9UWVBFX01BU0spPlVDQVNFX05PTkUpIHsKKyAgICAgICAgLy8gRGVjb2RlIHRoZSBzaW1wbGUgY2FzZSBtYXBwaW5nLgorICAgICAgICBVQ2hhcjMyIG5leHQ9YytVQ0FTRV9HRVRfREVMVEEodmFsdWUpOworICAgICAgICBpZihuZXh0IT1jKSB7CisgICAgICAgICAgICBVbmlQcm9wcyAmcD1uZXdFeGNQcm9wcy0+cHJvcHM7CisgICAgICAgICAgICBpZigodmFsdWUmVUNBU0VfVFlQRV9NQVNLKT09VUNBU0VfTE9XRVIpIHsKKyAgICAgICAgICAgICAgICBwLnN1Yz1wLnN0Yz1uZXh0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwLnNsYz1uZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmFsdWUmPX4oVUdFTkNBU0VfRVhDX01BU0t8VUNBU0VfREVMVEFfTUFTSyk7IC8vIHJlbW92ZSBwcmV2aW91cyBzaW1wbGUgbWFwcGluZworICAgIHZhbHVlfD0odWludDMyX3QpZXhjUHJvcHNDb3VudDw8VUdFTkNBU0VfRVhDX1NISUZUOworICAgIHZhbHVlfD1VQ0FTRV9FWENFUFRJT047CisgICAgZXhjUHJvcHNbZXhjUHJvcHNDb3VudCsrXT1uZXdFeGNQcm9wcy5vcnBoYW4oKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8qIGZpbmFsaXplIHJldmVyc2UgY2FzZSBmb2xkaW5nICgidW5mb2xkIikgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQzMl90IFVfQ0FMTENPTlYKK2NvbXBhcmVVbmZvbGQoY29uc3Qgdm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqbGVmdCwgY29uc3Qgdm9pZCAqcmlnaHQpIHsKKyAgICByZXR1cm4gdV9tZW1jbXAoKGNvbnN0IFVDaGFyICopbGVmdCwgKGNvbnN0IFVDaGFyICopcmlnaHQsIFVHRU5DQVNFX1VORk9MRF9XSURUSCk7Cit9CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6Om1ha2VVbmZvbGREYXRhKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgVUNoYXIgKnAsICpxOworICAgIGludDMyX3QgaSwgaiwgazsKKworICAgIC8qIHNvcnQgdGhlIGRhdGEgKi8KKyAgICBpbnQzMl90IHVuZm9sZExlbmd0aD11bmZvbGQubGVuZ3RoKCk7CisgICAgaW50MzJfdCB1bmZvbGRSb3dzPXVuZm9sZExlbmd0aC9VR0VOQ0FTRV9VTkZPTERfV0lEVEgtMTsKKyAgICBVQ2hhciAqdW5mb2xkQnVmZmVyPXVuZm9sZC5nZXRCdWZmZXIoLTEpOworICAgIHVwcnZfc29ydEFycmF5KHVuZm9sZEJ1ZmZlcitVR0VOQ0FTRV9VTkZPTERfV0lEVEgsIHVuZm9sZFJvd3MsIFVHRU5DQVNFX1VORk9MRF9XSURUSCoyLAorICAgICAgICAgICAgICAgICAgIGNvbXBhcmVVbmZvbGQsIE5VTEwsIEZBTFNFLCAmZXJyb3JDb2RlKTsKKworICAgIC8qIG1ha2UgdW5pcXVlLXN0cmluZyByb3dzIGJ5IG1lcmdpbmcgYWRqYWNlbnQgb25lcycgY29kZSBwb2ludCBjb2x1bW5zICovCisKKyAgICAvKiBtYWtlIHAgcG9pbnQgdG8gcm93IGktMSAqLworICAgIHA9dW5mb2xkQnVmZmVyK1VHRU5DQVNFX1VORk9MRF9XSURUSDsKKworICAgIGZvcihpPTE7IGk8dW5mb2xkUm93czspIHsKKyAgICAgICAgaWYoMD09dV9tZW1jbXAocCwgcCtVR0VOQ0FTRV9VTkZPTERfV0lEVEgsIFVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgpKSB7CisgICAgICAgICAgICAvKiBjb25jYXRlbmF0ZSBjb2RlIHBvaW50IGNvbHVtbnMgKi8KKyAgICAgICAgICAgIHE9cCtVR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIOworICAgICAgICAgICAgZm9yKGo9MTsgajxVR0VOQ0FTRV9VTkZPTERfQ1BfV0lEVEggJiYgcVtqXSE9MDsgKytqKSB7fQorICAgICAgICAgICAgZm9yKGs9MDsgazxVR0VOQ0FTRV9VTkZPTERfQ1BfV0lEVEggJiYgcVtVR0VOQ0FTRV9VTkZPTERfV0lEVEgra10hPTA7ICsraiwgKytrKSB7CisgICAgICAgICAgICAgICAgcVtqXT1xW1VHRU5DQVNFX1VORk9MRF9XSURUSCtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGo+VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdG9vIG1hbnkgY29kZSBwb2ludHMgaW4gdW5mb2xkW106ICVsZD4lZD1VR0VOQ0FTRV9VTkZPTERfQ1BfV0lEVEhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylqLCBVR0VOQ0FTRV9VTkZPTERfQ1BfV0lEVEgpOworICAgICAgICAgICAgICAgIGVycm9yQ29kZT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIG1vdmUgZm9sbG93aW5nIHJvd3MgdXAgb25lICovCisgICAgICAgICAgICAtLXVuZm9sZFJvd3M7CisgICAgICAgICAgICB1X21lbW1vdmUocCtVR0VOQ0FTRV9VTkZPTERfV0lEVEgsIHArVUdFTkNBU0VfVU5GT0xEX1dJRFRIKjIsICh1bmZvbGRSb3dzLWkpKlVHRU5DQVNFX1VORk9MRF9XSURUSCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwKz1VR0VOQ0FTRV9VTkZPTERfV0lEVEg7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bmZvbGRCdWZmZXJbVUNBU0VfVU5GT0xEX1JPV1NdPShVQ2hhcil1bmZvbGRSb3dzOworCisgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgIHB1dHMoInVuZm9sZCBkYXRhOiIpOworCisgICAgICAgIHA9dW5mb2xkQnVmZmVyOworICAgICAgICBmb3IoaT0wOyBpPHVuZm9sZFJvd3M7ICsraSkgeworICAgICAgICAgICAgcCs9VUdFTkNBU0VfVU5GT0xEX1dJRFRIOworICAgICAgICAgICAgcHJpbnRmKCJbJTJkXSAlMDR4ICUwNHggJTA0eCA8LSAlMDR4ICUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgKGludClpLCBwWzBdLCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuZm9sZC5yZWxlYXNlQnVmZmVyKCh1bmZvbGRSb3dzKzEpKlVHRU5DQVNFX1VORk9MRF9XSURUSCk7Cit9CisKKy8qIGNhc2UgY2xvc3VyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OmFkZENsb3N1cmVNYXBwaW5nKFVDaGFyMzIgc3JjLCBVQ2hhcjMyIGRlc3QsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgIHByaW50ZigiYWRkIGNsb3N1cmUgbWFwcGluZyBVKyUwNGx4LT5VKyUwNGx4XG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNyYywgKHVuc2lnbmVkIGxvbmcpZGVzdCk7CisgICAgfQorCisgICAgdWludDMyX3QgdmFsdWU9dXRyaWUyX2dldDMyKHBUcmllLCBzcmMpOworICAgIGlmKCh2YWx1ZSZVQ0FTRV9FWENFUFRJT04pPT0wKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGRlY29kZSB2YWx1ZSBpbnRvIHAyIChlbm91Z2ggZm9yIG1ha2VFeGNlcHRpb24oKSB0byB3b3JrIHByb3Blcmx5KSwKKyAgICAgICAgICogYWRkIHRoZSBjbG9zdXJlIG1hcHBpbmcsCisgICAgICAgICAqIGFuZCBzZXQgdGhlIG5ldyBleGNlcHRpb24gZm9yIHNyYworICAgICAgICAgKi8KKyAgICAgICAgdmFsdWU9bWFrZUV4Y1Byb3BzKHNyYywgdmFsdWUsIGVycm9yQ29kZSk7CisgICAgICAgIHV0cmllMl9zZXQzMihwVHJpZSwgc3JjLCB2YWx1ZSwgJmVycm9yQ29kZSk7CisgICAgICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiB1bmFibGUgdG8gc2V0IGNhc2UgbWFwcGluZyB2YWx1ZXMsIGNvZGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGV4Y1Byb3BzW3ZhbHVlPj5VR0VOQ0FTRV9FWENfU0hJRlRdLT5jbG9zdXJlLmFkZChkZXN0KTsKK30KKworLyoKKyAqIEZpbmQgbWlzc2luZyBjYXNlIG1hcHBpbmcgcmVsYXRpb25zaGlwcyBhbmQgYWRkIG1hcHBpbmdzIGZvciBjYXNlIGNsb3N1cmUuCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBmcm9tIGFuICJvcmlnaW5hbCIgY29kZSBwb2ludCBhbmQgcmVjdXJzaXZlbHkKKyAqIGZpbmRzIGl0cyBjYXNlIG1hcHBpbmdzIGFuZCB0aGUgY2FzZSBtYXBwaW5ncyBvZiB3aGVyZSBpdCBtYXBzIHRvLgorICoKKyAqIFRoZSByZWN1cnNpb24gZGVwdGggaXMgY2FwcGVkIGF0IDMgbmVzdGVkIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24uCisgKiBJbiBlYWNoIGNhbGwsIHRoZSBjdXJyZW50IGNvZGUgcG9pbnQgaXMgYywgYW5kIHRoZSBmdW5jdGlvbiBlbnVtZXJhdGVzCisgKiBhbGwgb2YgYydzIHNpbXBsZSAoc2luZ2xlLWNvZGUgcG9pbnQpIGNhc2UgbWFwcGluZ3MuCisgKiBwcmV2IGlzIHRoZSBjb2RlIHBvaW50IHRoYXQgY2FzZS1tYXBwZWQgdG8gYy4KKyAqIHByZXYyIGlzIHRoZSBjb2RlIHBvaW50IHRoYXQgY2FzZS1tYXBwZWQgdG8gcHJldi4KKyAqCisgKiBUaGUgaW5pdGlhbCBmdW5jdGlvbiBjYWxsIGhhcyBwcmV2MjwwLCBwcmV2PDAsIGFuZCBjPT1vcmlnCisgKiAobWFya2luZyBubyBjb2RlIHBvaW50cykuCisgKiBJdCBlbnVtZXJhdGVzIGMncyBjYXNlIG1hcHBpbmdzIGFuZCByZWN1cnNlcyB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uLgorICoKKyAqIFRoZSBzZWNvbmQtbGV2ZWwgZnVuY3Rpb24gY2FsbCBoYXMgcHJldjI8MCwgcHJldj09b3JpZywgYW5kIGMgaXMKKyAqIHRoZSBkZXN0aW5hdGlvbiBjb2RlIHBvaW50IG9mIG9uZSBvZiBwcmV2J3MgY2FzZSBtYXBwaW5ncy4KKyAqIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgYW55IG9mIGMncyBjYXNlIG1hcHBpbmdzIGdvIGJhY2sgdG8gb3JpZworICogYW5kIGFkZHMgYSBjbG9zdXJlIG1hcHBpbmcgaWYgbm90LgorICogSW4gb3RoZXIgd29yZHMsIGl0IHR1cm5zIGEgY2FzZSBtYXBwaW5nIHJlbGF0aW9uc2hpcCBvZgorICogICBvcmlnLT5jCisgKiBpbnRvCisgKiAgIG9yaWc8LT5jCisgKgorICogVGhlIHRoaXJkLWxldmVsIGZ1bmN0aW9uIGNhbGwgaGFzIHByZXYyPT1vcmlnLCBwcmV2Pj0wLCBhbmQgYyBpcworICogdGhlIGRlc3RpbmF0aW9uIGNvZGUgcG9pbnQgb2Ygb25lIG9mIHByZXYncyBjYXNlIG1hcHBpbmdzLgorICogKEFuZCBwcmV2IGlzIHRoZSBkZXN0aW5hdGlvbiBvZiBvbmUgb2YgcHJldjIncyBjYXNlIG1hcHBpbmdzLikKKyAqIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgYW55IG9mIGMncyBjYXNlIG1hcHBpbmdzIGdvIGJhY2sgdG8gb3JpZworICogYW5kIGFkZHMgYSBjbG9zdXJlIG1hcHBpbmcgaWYgbm90LgorICogSW4gb3RoZXIgd29yZHMsIGl0IHR1cm5zIGNhc2UgbWFwcGluZyByZWxhdGlvbnNoaXBzIG9mCisgKiAgIG9yaWctPnByZXYtPmMgb3Igb3JpZy0+cHJldjwtPmMKKyAqIGludG8KKyAqICAgb3JpZy0+cHJldi0+Yy0+b3JpZyBvciBvcmlnLT5wcmV2PC0+Yy0+b3JpZworICogZXRjLgorICogKEdyYXBoaWNhbGx5LCB0aGlzIGNsb3NlcyBhIHRyaWFuZ2xlLikKKyAqCisgKiBXaXRoIHJlcGVhdGVkIGFwcGxpY2F0aW9uIG9uIGFsbCBjb2RlIHBvaW50cyB1bnRpbCBubyBtb3JlIGNsb3N1cmUgbWFwcGluZ3MKKyAqIGFyZSBhZGRlZCwgYWxsIGNhc2UgZXF1aXZhbGVuY2UgZ3JvdXBzIGdldCBjb21wbGV0ZSBtYXBwaW5ncy4KKyAqIFRoYXQgaXMsIGluIGVhY2ggZ3JvdXAgb2YgY29kZSBwb2ludHMgd2l0aCBjYXNlIHJlbGF0aW9uc2hpcHMKKyAqIGVhY2ggY29kZSBwb2ludCB3aWxsIGluIHRoZSBlbmQgaGF2ZSBzb21lIG1hcHBpbmcgdG8gZWFjaCBvdGhlcgorICogY29kZSBwb2ludCBpbiB0aGUgZ3JvdXAuCisgKgorICogQHJldHVybiBUUlVFIGlmIGEgY2xvc3VyZSBtYXBwaW5nIHdhcyBhZGRlZAorICovCitVQm9vbAorQ2FzZVByb3BzQnVpbGRlcjo6YWRkQ2xvc3VyZShVQ2hhcjMyIG9yaWcsIFVDaGFyMzIgcHJldjIsIFVDaGFyMzIgcHJldiwgVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIEZBTFNFOyB9CisKKyAgICBVQ2hhcjMyIG5leHQ7CisgICAgVUJvb2wgc29tZU1hcHBpbmdzQWRkZWQ9RkFMU0U7CisKKyAgICBpZihjIT1vcmlnKSB7CisgICAgICAgIC8qIGdldCB0aGUgcHJvcGVydGllcyBmb3IgYyAqLworICAgICAgICB2YWx1ZT11dHJpZTJfZ2V0MzIocFRyaWUsIGMpOworICAgIH0KKyAgICAvKiBlbHNlIGlmIGM9PW9yaWcgdGhlbiBjJ3MgdmFsdWUgd2FzIHBhc3NlZCBpbiAqLworCisgICAgaWYodmFsdWUmVUNBU0VfRVhDRVBUSU9OKSB7CisgICAgICAgIFVuaWNvZGVTZXQgc2V0OworCisgICAgICAgIEV4Y1Byb3BzICZlcD0qZXhjUHJvcHNbdmFsdWU+PlVHRU5DQVNFX0VYQ19TSElGVF07CisgICAgICAgIFVuaVByb3BzICZwPWVwLnByb3BzOworCisgICAgICAgIC8qCisgICAgICAgICAqIG1hcmtlciBmb3Igd2hldGhlciBhbnkgb2YgYydzIG1hcHBpbmdzIGdvZXMgdG8gb3JpZworICAgICAgICAgKiBjPT1vcmlnOiBwcmV2ZW50IGFkZGluZyBhIGNsb3N1cmUgbWFwcGluZyB3aGVuIGdldHRpbmcgb3JpZydzIG93biwgZGlyZWN0IG1hcHBpbmdzCisgICAgICAgICAqLworICAgICAgICBVQm9vbCBtYXBzVG9PcmlnPShVQm9vbCkoYz09b3JpZyk7CisKKyAgICAgICAgLyogY29sbGVjdCBjJ3MgY2FzZSBtYXBwaW5nIGRlc3RpbmF0aW9ucyBpbiBzZXRbXSAqLworICAgICAgICBpZigobmV4dD1wLnN1Yyk+PTAgJiYgbmV4dCE9YykgeworICAgICAgICAgICAgc2V0LmFkZChuZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZigobmV4dD1wLnNsYyk+PTAgJiYgbmV4dCE9YykgeworICAgICAgICAgICAgc2V0LmFkZChuZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZihwLnN1YyE9KG5leHQ9cC5zdGMpICYmIG5leHQhPWMpIHsKKyAgICAgICAgICAgIHNldC5hZGQobmV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoKG5leHQ9cC5zY2YpPj0wICYmIG5leHQhPWMpIHsKKyAgICAgICAgICAgIHNldC5hZGQobmV4dCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgYydzIGN1cnJlbnQgY2xvc3VyZSBtYXBwaW5ncyB0byBzZXQgKi8KKyAgICAgICAgc2V0LmFkZEFsbChlcC5jbG9zdXJlKTsKKworICAgICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlIHBvaW50cyB0byB3aGljaCBjIGNhc2UtbWFwcyAqLworICAgICAgICBVbmljb2RlU2V0SXRlcmF0b3IgaXRlcihzZXQpOworICAgICAgICB3aGlsZShpdGVyLm5leHQoKSkgeworICAgICAgICAgICAgbmV4dD1pdGVyLmdldENvZGVwb2ludCgpOyAvKiBuZXh0IT1jICovCisKKyAgICAgICAgICAgIGlmKG5leHQ9PW9yaWcpIHsKKyAgICAgICAgICAgICAgICBtYXBzVG9PcmlnPVRSVUU7IC8qIHJlbWVtYmVyIHRoYXQgd2UgbWFwIHRvIG9yaWcgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZihwcmV2MjwwICYmIG5leHQhPXByZXYpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlY3Vyc2UgdW5sZXNzCisgICAgICAgICAgICAgICAgICogd2UgaGF2ZSByZWFjaGVkIG1heGltdW0gZGVwdGggKHByZXYyPj0wKSBvcgorICAgICAgICAgICAgICAgICAqIHRoaXMgaXMgYSBtYXBwaW5nIHRvIG9uZSBvZiB0aGUgcHJldmlvdXMgY29kZSBwb2ludHMgKG9yaWcsIHByZXYsIGMpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc29tZU1hcHBpbmdzQWRkZWR8PWFkZENsb3N1cmUob3JpZywgcHJldiwgYywgbmV4dCwgMCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCFtYXBzVG9PcmlnKSB7CisgICAgICAgICAgICBhZGRDbG9zdXJlTWFwcGluZyhjLCBvcmlnLCBlcnJvckNvZGUpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZigodmFsdWUmVUNBU0VfVFlQRV9NQVNLKT5VQ0FTRV9OT05FKSB7CisgICAgICAgICAgICAvKiBvbmUgc2ltcGxlIGNhc2UgbWFwcGluZywgZG9uJ3QgY2FyZSB3aGljaCBvbmUgKi8KKyAgICAgICAgICAgIG5leHQ9YytVQ0FTRV9HRVRfREVMVEEodmFsdWUpOworICAgICAgICAgICAgaWYobmV4dCE9YykgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVjdXJzZSB1bmxlc3MKKyAgICAgICAgICAgICAgICAgKiB3ZSBoYXZlIHJlYWNoZWQgbWF4aW11bSBkZXB0aCAocHJldjI+PTApIG9yCisgICAgICAgICAgICAgICAgICogdGhpcyBpcyBhIG1hcHBpbmcgdG8gb25lIG9mIHRoZSBwcmV2aW91cyBjb2RlIHBvaW50cyAob3JpZywgcHJldiwgYykKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZihwcmV2MjwwICYmIG5leHQhPW9yaWcgJiYgbmV4dCE9cHJldikgeworICAgICAgICAgICAgICAgICAgICBzb21lTWFwcGluZ3NBZGRlZHw9YWRkQ2xvc3VyZShvcmlnLCBwcmV2LCBjLCBuZXh0LCAwLCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKGMhPW9yaWcgJiYgbmV4dCE9b3JpZykgeworICAgICAgICAgICAgICAgICAgICAvKiBjIGRvZXMgbm90IG1hcCB0byBvcmlnLCBhZGQgYSBjbG9zdXJlIG1hcHBpbmcgYy0+b3JpZyAqLworICAgICAgICAgICAgICAgICAgICBhZGRDbG9zdXJlTWFwcGluZyhjLCBvcmlnLCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc29tZU1hcHBpbmdzQWRkZWQ7Cit9CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6Om1ha2VDYXNlQ2xvc3VyZShVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIC8qCisgICAgICogZmluYWxpemUgdGhlICJ1bmZvbGQiIGRhdGEgYmVjYXVzZSB3ZSBuZWVkIHRvIHVzZSBpdCB0byBhZGQgY2xvc3VyZSBtYXBwaW5ncworICAgICAqIGZvciBzaXR1YXRpb25zIGxpa2UgRkIwNS0+InN0IjwtRkIwNgorICAgICAqIHdoZXJlIHdlIHdvdWxkIG90aGVyd2lzZSBtaXNzIHRoZSBGQjA1PC0+RkIwNiByZWxhdGlvbnNoaXAKKyAgICAgKi8KKyAgICBtYWtlVW5mb2xkRGF0YShlcnJvckNvZGUpOworCisgICAgLyogdXNlIHRoZSAidW5mb2xkIiBkYXRhIHRvIGFkZCBtYXBwaW5ncyAqLworCisgICAgLyogcCBhbHdheXMgcG9pbnRzIHRvIHRoZSBjb2RlIHBvaW50czsgdGhpcyBsb29wIGlnbm9yZXMgdGhlIHN0cmluZ3MgY29tcGxldGVseSAqLworICAgIGNvbnN0IFVDaGFyICpwPXVuZm9sZC5nZXRCdWZmZXIoKStVR0VOQ0FTRV9VTkZPTERfV0lEVEgrVUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSDsKKyAgICBpbnQzMl90IHVuZm9sZFJvd3M9dW5mb2xkLmxlbmd0aCgpL1VHRU5DQVNFX1VORk9MRF9XSURUSC0xOworCisgICAgZm9yKGludDMyX3QgaT0wOyBpPHVuZm9sZFJvd3M7IHArPVVHRU5DQVNFX1VORk9MRF9XSURUSCwgKytpKSB7CisgICAgICAgIGludDMyX3Qgaj0wOworICAgICAgICBVQ2hhcjMyIGM7CisgICAgICAgIFUxNl9ORVhUX1VOU0FGRShwLCBqLCBjKTsKKyAgICAgICAgd2hpbGUoajxVR0VOQ0FTRV9VTkZPTERfQ1BfV0lEVEggJiYgcFtqXSE9MCkgeworICAgICAgICAgICAgVUNoYXIzMiBjMjsKKyAgICAgICAgICAgIFUxNl9ORVhUX1VOU0FGRShwLCBqLCBjMik7CisgICAgICAgICAgICBhZGRDbG9zdXJlKGMsIFVfU0VOVElORUwsIGMsIGMyLCAwLCBlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgIHB1dHMoIi0tLS0gLS0tLSAtLS0tIC0tLS0gKGRvbmUgd2l0aCBjbG9zdXJlcyBmcm9tIHVuZm9sZGluZykiKTsKKyAgICB9CisKKyAgICAvKiBhZGQgZnVydGhlciBjbG9zdXJlIG1hcHBpbmdzIGZyb20gYW5hbHl6aW5nIHNpbXBsZSBtYXBwaW5ncyAqLworICAgIFVCb29sIHNvbWVNYXBwaW5nc0FkZGVkOworICAgIGRvIHsKKyAgICAgICAgc29tZU1hcHBpbmdzQWRkZWQ9RkFMU0U7CisKKyAgICAgICAgZm9yKFVDaGFyMzIgYz0wOyBjPD0weDEwZmZmZjsgKytjKSB7CisgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZT11dHJpZTJfZ2V0MzIocFRyaWUsIGMpOworICAgICAgICAgICAgaWYodmFsdWUhPTApIHsKKyAgICAgICAgICAgICAgICBzb21lTWFwcGluZ3NBZGRlZHw9YWRkQ2xvc3VyZShjLCBVX1NFTlRJTkVMLCBVX1NFTlRJTkVMLCBjLCB2YWx1ZSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKGJlVmVyYm9zZSAmJiBzb21lTWFwcGluZ3NBZGRlZCkgeworICAgICAgICAgICAgcHV0cygiLS0tLSAtLS0tIC0tLS0gLS0tLSIpOworICAgICAgICB9CisgICAgfSB3aGlsZShzb21lTWFwcGluZ3NBZGRlZCk7Cit9CisKKy8qIGV4Y2VwdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBVQm9vbAorZnVsbE1hcHBpbmdFcXVhbHNTaW1wbGUoY29uc3QgVW5pY29kZVN0cmluZyAmcywgVUNoYXIzMiBzaW1wbGUsIFVDaGFyMzIgYykgeworICAgIGlmKHNpbXBsZTw9MCkgeworICAgICAgICBzaW1wbGU9YzsgLyogVUNEIGhhcyBubyBzaW1wbGUgbWFwcGluZyBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBjb2RlIHBvaW50IGl0c2VsZiAqLworICAgIH0KKyAgICByZXR1cm4gcy5sZW5ndGgoKT09VTE2X0xFTkdUSChzaW1wbGUpICYmIHMuY2hhcjMyQXQoMCk9PXNpbXBsZTsKK30KKworaW50MzJfdAorQ2FzZVByb3BzQnVpbGRlcjo6bWFrZUV4Y2VwdGlvbihVQ2hhcjMyIGMsIHVpbnQzMl90IHZhbHVlLCBFeGNQcm9wcyAmZXAsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiAwOyB9CisKKyAgICAvKiBleGNlcHRpb25zLmxlbmd0aCgpIG1pZ2h0IGJlIHJldHVybmVkIGZvciBzdG9yaW5nIGluIHRoZSB0cmllIHdvcmQgKi8KKyAgICBpZihleGNlcHRpb25zLmxlbmd0aCgpPj1VQ0FTRV9NQVhfRVhDRVBUSU9OUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjYXNlcHJvcHNidWlsZGVyOiB0b28gbWFueSBleGNlcHRpb25zIHdvcmRzXG4iKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBjb3B5IGFuZCBzaGlmdCB0aGUgc29mdC1kb3R0ZWQgYml0cyAqLworICAgIFVDaGFyIGV4Y1dvcmQ9KFVDaGFyKSgodmFsdWUmVUNBU0VfRE9UX01BU0spPDxVQ0FTRV9FWENfRE9UX1NISUZUKTsKKworICAgIFVuaVByb3BzICZwPWVwLnByb3BzOworCisgICAgLyogc2V0IHRoZSBiaXRzIGZvciBjb25kaXRpb25hbCBtYXBwaW5ncyAqLworICAgIGlmKGVwLmhhc0NvbmRpdGlvbmFsQ2FzZU1hcHBpbmdzKSB7CisgICAgICAgIGV4Y1dvcmR8PVVDQVNFX0VYQ19DT05ESVRJT05BTF9TUEVDSUFMOworICAgICAgICBwLmxjLnJlbW92ZSgpOworICAgICAgICBwLnVjLnJlbW92ZSgpOworICAgICAgICBwLnRjLnJlbW92ZSgpOworICAgIH0KKyAgICBpZihlcC5oYXNUdXJraWNDYXNlRm9sZGluZykgeworICAgICAgICBleGNXb3JkfD1VQ0FTRV9FWENfQ09ORElUSU9OQUxfRk9MRDsKKyAgICAgICAgcC5jZi5yZW1vdmUoKTsKKyAgICB9CisKKyAgICAvKiByZW1vdmUgcmVkdW5kYW50IGRhdGEgKi8KKyAgICAvKiBkbyBub3Qgc3RvcmUgZnVsbCBtYXBwaW5ncyBpZiB0aGV5IGFyZSB0aGUgc2FtZSBhcyB0aGUgc2ltcGxlIG9uZXMgKi8KKyAgICBpZihmdWxsTWFwcGluZ0VxdWFsc1NpbXBsZShwLmxjLCBwLnNsYywgYykpIHsKKyAgICAgICAgcC5sYy5yZW1vdmUoKTsKKyAgICB9CisgICAgaWYoZnVsbE1hcHBpbmdFcXVhbHNTaW1wbGUocC51YywgcC5zdWMsIGMpKSB7CisgICAgICAgIHAudWMucmVtb3ZlKCk7CisgICAgfQorICAgIGlmKGZ1bGxNYXBwaW5nRXF1YWxzU2ltcGxlKHAudGMsIHAuc3RjLCBjKSkgeworICAgICAgICBwLnRjLnJlbW92ZSgpOworICAgIH0KKyAgICBpZihmdWxsTWFwcGluZ0VxdWFsc1NpbXBsZShwLmNmLCBwLnNjZiwgYykpIHsKKyAgICAgICAgcC5jZi5yZW1vdmUoKTsKKyAgICB9CisKKyAgICAvKiB3cml0ZSB0aGUgb3B0aW9uYWwgc2xvdHMgKi8KKyAgICB1aW50MzJfdCBzbG90c1s4XTsKKyAgICB1aW50MzJfdCBzbG90Qml0cz0wOworICAgIGludDMyX3QgY291bnQ9MDsKKworICAgIGlmKHAuc2xjPj0wKSB7CisgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpcC5zbGM7CisgICAgICAgIHNsb3RCaXRzfD1zbG90c1tjb3VudF07CisgICAgICAgICsrY291bnQ7CisgICAgICAgIGV4Y1dvcmR8PVVfTUFTSyhVQ0FTRV9FWENfTE9XRVIpOworICAgIH0KKyAgICBpZiggcC5zY2Y+PTAgJiYKKyAgICAgICAgICAgIChwLnNsYz49MCA/CisgICAgICAgICAgICAgICAgcC5zY2YhPXAuc2xjIDoKKyAgICAgICAgICAgICAgICBwLnNjZiE9YykpIHsKKyAgICAgICAgc2xvdHNbY291bnRdPSh1aW50MzJfdClwLnNjZjsKKyAgICAgICAgc2xvdEJpdHN8PXNsb3RzW2NvdW50XTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZXhjV29yZHw9VV9NQVNLKFVDQVNFX0VYQ19GT0xEKTsKKyAgICB9CisgICAgaWYocC5zdWM+PTApIHsKKyAgICAgICAgc2xvdHNbY291bnRdPSh1aW50MzJfdClwLnN1YzsKKyAgICAgICAgc2xvdEJpdHN8PXNsb3RzW2NvdW50XTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZXhjV29yZHw9VV9NQVNLKFVDQVNFX0VYQ19VUFBFUik7CisgICAgfQorICAgIGlmKHAuc3VjIT1wLnN0YykgeworICAgICAgICBpZihwLnN0Yz49MCkgeworICAgICAgICAgICAgc2xvdHNbY291bnRdPSh1aW50MzJfdClwLnN0YzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpYzsKKyAgICAgICAgfQorICAgICAgICBzbG90Qml0c3w9c2xvdHNbY291bnRdOworICAgICAgICArK2NvdW50OworICAgICAgICBleGNXb3JkfD1VX01BU0soVUNBU0VfRVhDX1RJVExFKTsKKyAgICB9CisKKyAgICAvKiBsZW5ndGggb2YgY2FzZSBjbG9zdXJlICovCisgICAgVW5pY29kZVN0cmluZyBjbG9zdXJlU3RyaW5nOworICAgIGlmKCFlcC5jbG9zdXJlLmlzRW1wdHkoKSkgeworICAgICAgICBVbmljb2RlU2V0SXRlcmF0b3IgaXRlcihlcC5jbG9zdXJlKTsKKyAgICAgICAgd2hpbGUoaXRlci5uZXh0KCkpIHsgY2xvc3VyZVN0cmluZy5hcHBlbmQoaXRlci5nZXRDb2RlcG9pbnQoKSk7IH0KKyAgICAgICAgaW50MzJfdCBsZW5ndGg9Y2xvc3VyZVN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgaWYobGVuZ3RoPlVDQVNFX0NMT1NVUkVfTUFYX0xFTkdUSCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogY2FzZSBjbG9zdXJlIGZvciBVKyUwNGxYIGhhcyBsZW5ndGggJWQgIgorICAgICAgICAgICAgICAgICAgICAid2hpY2ggZXhjZWVkcyBVQ0FTRV9DTE9TVVJFX01BWF9MRU5HVEg9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgIChsb25nKWMsIChpbnQpbGVuZ3RoLCAoaW50KVVDQVNFX0NMT1NVUkVfTUFYX0xFTkdUSCk7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBzbG90c1tjb3VudF09KHVpbnQzMl90KWxlbmd0aDsgLyogbXVzdCBiZSAxLi5VQ0FTRV9DTE9TVVJFX01BWF9MRU5HVEggKi8KKyAgICAgICAgc2xvdEJpdHN8PXNsb3RzW2NvdW50XTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZXhjV29yZHw9VV9NQVNLKFVDQVNFX0VYQ19DTE9TVVJFKTsKKyAgICB9CisKKyAgICAvKiBsZW5ndGhzIG9mIGZ1bGwgY2FzZSBtYXBwaW5nIHN0cmluZ3MsIHN0b3JlZCBpbiB0aGUgbGFzdCBzbG90ICovCisgICAgaW50MzJfdCBmdWxsTGVuZ3Rocz0KKyAgICAgICAgcC5sYy5sZW5ndGgoKXwKKyAgICAgICAgKHAuY2YubGVuZ3RoKCk8PDQpfAorICAgICAgICAocC51Yy5sZW5ndGgoKTw8OCl8CisgICAgICAgIChwLnRjLmxlbmd0aCgpPDwxMik7CisgICAgaWYoZnVsbExlbmd0aHMhPTApIHsKKyAgICAgICAgc2xvdHNbY291bnRdPSh1aW50MzJfdClmdWxsTGVuZ3RoczsKKyAgICAgICAgc2xvdEJpdHN8PXNsb3RzW2NvdW50XTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZXhjV29yZHw9VV9NQVNLKFVDQVNFX0VYQ19GVUxMX01BUFBJTkdTKTsKKyAgICB9CisKKyAgICBpZihjb3VudD09MCkgeworICAgICAgICAvKiBObyBvcHRpb25hbCBzbG90czogVHJ5IHRvIHNoYXJlIGV4Y1dvcmQgZW50cmllcy4gKi8KKyAgICAgICAgaW50MzJfdCBleGNJbmRleD1leGNlcHRpb25zLmluZGV4T2YoKFVDaGFyKWV4Y1dvcmQpOworICAgICAgICBpZihleGNJbmRleD49MCkgeworICAgICAgICAgICAgcmV0dXJuIGV4Y0luZGV4OworICAgICAgICB9CisgICAgICAgIC8qIG5vdCBmb3VuZCAqLworICAgICAgICBleGNJbmRleD1leGNlcHRpb25zLmxlbmd0aCgpOworICAgICAgICBleGNlcHRpb25zLmFwcGVuZCgoVUNoYXIpZXhjV29yZCk7CisgICAgICAgIHJldHVybiBleGNJbmRleDsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiB3cml0ZSBzbG90cyAqLworICAgICAgICBpbnQzMl90IGV4Y0luZGV4PWV4Y2VwdGlvbnMubGVuZ3RoKCk7CisgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKChVQ2hhcikwKTsgIC8qIHBsYWNlaG9sZGVyIGZvciBleGNXb3JkIHdoaWNoIHdpbGwgYmUgc3RvcmVkIGF0IGV4Y0luZGV4ICovCisKKyAgICAgICAgaWYoc2xvdEJpdHM8PTB4ZmZmZikgeworICAgICAgICAgICAgZm9yKGludDMyX3QgaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZCgoVUNoYXIpc2xvdHNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhjV29yZHw9VUNBU0VfRVhDX0RPVUJMRV9TTE9UUzsKKyAgICAgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoKFVDaGFyKShzbG90c1tpXT4+MTYpKTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZCgoVUNoYXIpc2xvdHNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogd3JpdGUgdGhlIGZ1bGwgY2FzZSBtYXBwaW5nIHN0cmluZ3MgKi8KKyAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQocC5sYyk7CisgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKHAuY2YpOworICAgICAgICBleGNlcHRpb25zLmFwcGVuZChwLnVjKTsKKyAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQocC50Yyk7CisKKyAgICAgICAgLyogd3JpdGUgdGhlIGNsb3N1cmUgZGF0YSAqLworICAgICAgICBleGNlcHRpb25zLmFwcGVuZChjbG9zdXJlU3RyaW5nKTsKKworICAgICAgICAvKiB3cml0ZSB0aGUgbWFpbiBleGNlcHRpb25zIHdvcmQgKi8KKyAgICAgICAgZXhjZXB0aW9ucy5zZXRDaGFyQXQoZXhjSW5kZXgsIChVQ2hhcilleGNXb3JkKTsKKworICAgICAgICByZXR1cm4gZXhjSW5kZXg7CisgICAgfQorfQorCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjptYWtlRXhjZXB0aW9ucyhVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIC8qCisgICAgICogRW5jb2RlIGNhc2UtaWdub3JhYmxlIGFzIGRlbHRhPT0xIG9uIHVuY2FzZWQgY2hhcmFjdGVycywKKyAgICAgKiBhbmQgd2l0aCBhbiBleGNlcHRpb24gYml0IG9uIGNhc2VkIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgd2l0aCBhbm90aGVyIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIENoYW5nZSBmcm9tIHRlbXBvcmFyeSBVR0VOQ0FTRV9FWENfU0hJRlQnZWQgaW5kZXggaW50byBleGNQcm9wc1tdCisgICAgICogdG8gVUNBU0VfRVhDX1NISUZUJ2VkIGluZGV4IGludG8gZW5jb2RlZCBleGNlcHRpb25zW10uCisgICAgICovCisgICAgZm9yKFVDaGFyMzIgYz0wOyBjPD0weDEwZmZmZjsgKytjKSB7CisgICAgICAgIHVpbnQzMl90IHZhbHVlPXV0cmllMl9nZXQzMihwVHJpZSwgYyk7CisgICAgICAgIGlmKHZhbHVlJlVDQVNFX0VYQ0VQVElPTikgeworICAgICAgICAgICAgaW50MzJfdCBleGNJbmRleD1tYWtlRXhjZXB0aW9uKGMsIHZhbHVlLCAqZXhjUHJvcHNbdmFsdWU+PlVHRU5DQVNFX0VYQ19TSElGVF0sIGVycm9yQ29kZSk7CisgICAgICAgICAgICB2YWx1ZT0odmFsdWUmfihVR0VOQ0FTRV9FWENfTUFTS3xVQ0FTRV9FWENfTUFTSykpfCgodWludDMyX3QpZXhjSW5kZXg8PFVDQVNFX0VYQ19TSElGVCk7CisgICAgICAgICAgICB1dHJpZTJfc2V0MzIocFRyaWUsIGMsIHZhbHVlLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogZ2VuZXJhdGUgb3V0cHV0IGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludDMyX3QgaW5kZXhlc1tVQ0FTRV9JWF9UT1BdPXsKKyAgICBVQ0FTRV9JWF9UT1AsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyB1aW50OF90IHRyaWVCbG9ja1s0MDAwMF07CitzdGF0aWMgaW50MzJfdCB0cmllU2l6ZTsKKwordm9pZAorQ2FzZVByb3BzQnVpbGRlcjo6YnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgcHV0cygiKiB1Y2FzZS5pY3Ugc3RhdHMgKiIpOworICAgIH0KKworICAgIG1ha2VDYXNlQ2xvc3VyZShlcnJvckNvZGUpOworICAgIG1ha2VFeGNlcHRpb25zKGVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICAvKgorICAgICAqIEFkZCBvbmUgY29tcGxleCBtYXBwaW5nIHRvIGNhc2VTZW5zaXRpdmUgdGhhdCB3YXMgZmlsdGVyZWQgb3V0IGFib3ZlOgorICAgICAqIEdyZWVrIGZpbmFsIFNpZ21hIGhhcyBhIGNvbmRpdGlvbmFsIG1hcHBpbmcgYnV0IG5vdCBsb2NhbGUtc2Vuc2l0aXZlLAorICAgICAqIGFuZCBpdCBpcyB0YWtlbiB3aGVuIGxvd2VyY2FzaW5nIGp1c3QgVSswM0EzIGFsb25lLgorICAgICAqIDAzQTM7IDAzQzI7IDAzQTM7IDAzQTM7IEZpbmFsX1NpZ21hOyAjIEdSRUVLIENBUElUQUwgTEVUVEVSIFNJR01BCisgICAgICovCisgICAgY2FzZVNlbnNpdGl2ZS5hZGQoMHgzYzIpOworCisgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIoY2FzZVNlbnNpdGl2ZSk7CisgICAgd2hpbGUoaXRlci5uZXh0KCkpIHsKKyAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgIHVpbnQzMl90IHZhbHVlPXV0cmllMl9nZXQzMihwVHJpZSwgYyk7CisgICAgICAgIGlmKCh2YWx1ZSZVQ0FTRV9TRU5TSVRJVkUpPT0wKSB7CisgICAgICAgICAgICB1dHJpZTJfc2V0MzIocFRyaWUsIGMsIHZhbHVlfFVDQVNFX1NFTlNJVElWRSwgJmVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5hYmxlIHRvIHNldCBVQ0FTRV9TRU5TSVRJVkU6ICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdXRyaWUyX2ZyZWV6ZShwVHJpZSwgVVRSSUUyXzE2X1ZBTFVFX0JJVFMsICZlcnJvckNvZGUpOworICAgIHRyaWVTaXplPXV0cmllMl9zZXJpYWxpemUocFRyaWUsIHRyaWVCbG9jaywgc2l6ZW9mKHRyaWVCbG9jayksICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHV0cmllMl9mcmVlemUoKSt1dHJpZTJfc2VyaWFsaXplKCkgZmFpbGVkOiAlcyAobGVuZ3RoICVsZClcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSwgKGxvbmcpdHJpZVNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5kZXhlc1tVQ0FTRV9JWF9FWENfTEVOR1RIXT1leGNlcHRpb25zLmxlbmd0aCgpOworICAgIGluZGV4ZXNbVUNBU0VfSVhfVFJJRV9TSVpFXT10cmllU2l6ZTsKKyAgICBpbmRleGVzW1VDQVNFX0lYX1VORk9MRF9MRU5HVEhdPXVuZm9sZC5sZW5ndGgoKTsKKyAgICBpbmRleGVzW1VDQVNFX0lYX0xFTkdUSF09KGludDMyX3Qpc2l6ZW9mKGluZGV4ZXMpK3RyaWVTaXplKzIqZXhjZXB0aW9ucy5sZW5ndGgoKSsyKnVuZm9sZC5sZW5ndGgoKTsKKworICAgIGluZGV4ZXNbVUNBU0VfSVhfTUFYX0ZVTExfTEVOR1RIXT1tYXhGdWxsTGVuZ3RoOworCisgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgcHJpbnRmKCJ0cmllIHNpemUgaW4gYnl0ZXM6ICAgICAgICAgICAgICAgICAgICAlNWRcbiIsIChpbnQpdHJpZVNpemUpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiBjb2RlIHBvaW50cyB3aXRoIGV4Y2VwdGlvbnM6ICU1ZFxuIiwgZXhjUHJvcHNDb3VudCk7CisgICAgICAgIHByaW50Zigic2l6ZSBpbiBieXRlcyBvZiBleGNlcHRpb25zOiAgICAgICAgICAgJTVkXG4iLCAyKmV4Y2VwdGlvbnMubGVuZ3RoKCkpOworICAgICAgICBwcmludGYoInNpemUgaW4gYnl0ZXMgb2YgcmV2ZXJzZSBmb2xkaW5nczogICAgICU1ZFxuIiwgMip1bmZvbGQubGVuZ3RoKCkpOworICAgICAgICBwcmludGYoImRhdGEgc2l6ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICU1ZFxuIiwgKGludClpbmRleGVzW1VDQVNFX0lYX0xFTkdUSF0pOworICAgIH0KK30KKwordm9pZAorQ2FzZVByb3BzQnVpbGRlcjo6d3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIEZJTEUgKmY9dXNyY19jcmVhdGUocGF0aCwgInVjYXNlX3Byb3BzX2RhdGEuaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaWN1L3Rvb2xzL3VuaWNvZGUvYy9nZW5wcm9wcy9jYXNlcHJvcHNidWlsZGVyLmNwcCIpOworICAgIGlmKGY9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfRklMRV9BQ0NFU1NfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnB1dHMoIiNpZm5kZWYgSU5DTFVERURfRlJPTV9VQ0FTRV9DUFBcbiIKKyAgICAgICAgICAiIyAgIGVycm9yIFRoaXMgZmlsZSBtdXN0IGJlICNpbmNsdWRlZCBmcm9tIHVjYXNlLmNwcCBvbmx5LlxuIgorICAgICAgICAgICIjZW5kaWZcblxuIiwgZik7CisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgVVZlcnNpb25JbmZvIHVjYXNlX3Byb3BzX2RhdGFWZXJzaW9uPXsiLAorICAgICAgICBkYXRhSW5mby5kYXRhVmVyc2lvbiwgOCwgNCwKKyAgICAgICAgIn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IGludDMyX3QgdWNhc2VfcHJvcHNfaW5kZXhlc1tVQ0FTRV9JWF9UT1BdPXsiLAorICAgICAgICBpbmRleGVzLCAzMiwgVUNBU0VfSVhfVE9QLAorICAgICAgICAifTtcblxuIik7CisgICAgdXNyY193cml0ZVVUcmllMkFycmF5cyhmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQxNl90IHVjYXNlX3Byb3BzX3RyaWVJbmRleFslbGRdPXtcbiIsIE5VTEwsCisgICAgICAgIHBUcmllLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCB1Y2FzZV9wcm9wc19leGNlcHRpb25zWyVsZF09e1xuIiwKKyAgICAgICAgZXhjZXB0aW9ucy5nZXRCdWZmZXIoKSwgMTYsIGV4Y2VwdGlvbnMubGVuZ3RoKCksCisgICAgICAgICJcbn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQxNl90IHVjYXNlX3Byb3BzX3VuZm9sZFslbGRdPXtcbiIsCisgICAgICAgIHVuZm9sZC5nZXRCdWZmZXIoKSwgMTYsIHVuZm9sZC5sZW5ndGgoKSwKKyAgICAgICAgIlxufTtcblxuIik7CisgICAgZnB1dHMoCisgICAgICAgICJzdGF0aWMgY29uc3QgVUNhc2VQcm9wcyB1Y2FzZV9wcm9wc19zaW5nbGV0b249e1xuIgorICAgICAgICAiICBOVUxMLFxuIgorICAgICAgICAiICB1Y2FzZV9wcm9wc19pbmRleGVzLFxuIgorICAgICAgICAiICB1Y2FzZV9wcm9wc19leGNlcHRpb25zLFxuIgorICAgICAgICAiICB1Y2FzZV9wcm9wc191bmZvbGQsXG4iLAorICAgICAgICBmKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyU3RydWN0KGYsCisgICAgICAgICIgIHtcbiIsCisgICAgICAgIHBUcmllLCAidWNhc2VfcHJvcHNfdHJpZUluZGV4IiwgTlVMTCwKKyAgICAgICAgIiAgfSxcbiIpOworICAgIHVzcmNfd3JpdGVBcnJheShmLCAiICB7ICIsIGRhdGFJbmZvLmZvcm1hdFZlcnNpb24sIDgsIDQsICIgfVxuIik7CisgICAgZnB1dHMoIn07XG4iLCBmKTsKKyAgICBmY2xvc2UoZik7Cit9CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OndyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YT11ZGF0YV9jcmVhdGUocGF0aCwgImljdSIsICJ1Y2FzZSIsICZkYXRhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb3B5cmlnaHQgPyBVX0NPUFlSSUdIVF9TVFJJTkcgOiBOVUxMLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiB1ZGF0YV9jcmVhdGUoJXMsIHVjYXNlLmljdSkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgcGF0aCwgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBpbmRleGVzLCBzaXplb2YoaW5kZXhlcykpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHRyaWVCbG9jaywgdHJpZVNpemUpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGV4Y2VwdGlvbnMuZ2V0QnVmZmVyKCksIDIqZXhjZXB0aW9ucy5sZW5ndGgoKSk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgdW5mb2xkLmdldEJ1ZmZlcigpLCAyKnVuZm9sZC5sZW5ndGgoKSk7CisKKyAgICAvKiBmaW5pc2ggdXAgKi8KKyAgICBsb25nIGRhdGFMZW5ndGg9dWRhdGFfZmluaXNoKHBEYXRhLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjYXNlcHJvcHNidWlsZGVyIGVycm9yICVkIHdyaXRpbmcgdGhlIG91dHB1dCBmaWxlXG4iLCBlcnJvckNvZGUpOworICAgICAgICBleGl0KGVycm9yQ29kZSk7CisgICAgfQorCisgICAgaWYoZGF0YUxlbmd0aCE9aW5kZXhlc1tVQ0FTRV9JWF9MRU5HVEhdKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJ1ZGF0YV9maW5pc2godWNhc2UuaWN1KSByZXBvcnRzICVsZCBieXRlcyB3cml0dGVuIGJ1dCBzaG91bGQgYmUgJWxkXG4iLAorICAgICAgICAgICAgICAgIGRhdGFMZW5ndGgsIChsb25nKWluZGV4ZXNbVUNBU0VfSVhfTEVOR1RIXSk7CisgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgfQorfQorCitQcm9wc0J1aWxkZXIgKgorY3JlYXRlQ2FzZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gTlVMTDsgfQorICAgIFByb3BzQnVpbGRlciAqcGI9bmV3IENhc2VQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKTsKKyAgICBpZihwYj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHBiOworfQorCisvKgorICogSGV5LCBFbWFjcywgcGxlYXNlIHNldCB0aGUgZm9sbG93aW5nOgorICoKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL2NvcmVwcm9wc2J1aWxkZXIuY3BwIGIvdW5pY29kZS9jL2dlbnByb3BzL2NvcmVwcm9wc2J1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvY29yZXByb3BzYnVpbGRlci5jcHAKQEAgLTAsMCArMSw4NjAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICBjb3JlcHJvcHNidWlsZGVyLmNwcCAod2FzIHN0b3JlLmMgJiBwcm9wczIuY3BwKQorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDE5OTlkZWMxMQorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqCisqICAgU3RvcmUgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcyBlZmZpY2llbnRseSBmb3IKKyogICByYW5kb20gYWNjZXNzLgorKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0YS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzZXRpdGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAiY21lbW9yeS5oIgorI2luY2x1ZGUgImNzdHJpbmcuaCIKKyNpbmNsdWRlICJnZW5wcm9wcy5oIgorI2luY2x1ZGUgInByb3BzdmVjLmgiCisjaW5jbHVkZSAidWFzc2VydC5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisjaW5jbHVkZSAidXByb3BzLmgiCisjaW5jbHVkZSAidXRyaWUyLmgiCisjaW5jbHVkZSAid3JpdGVzcmMuaCIKKworLyogVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcyBmaWxlIGZvcm1hdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgZm9ybWF0IHByZXBhcmVkIGFuZCB3cml0dGVuIGhlcmUgY29udGFpbnMgc2V2ZXJhbCBkYXRhCitzdHJ1Y3R1cmVzIHRoYXQgc3RvcmUgaW5kZXhlcyBvciBkYXRhLgorCitCZWZvcmUgdGhlIGRhdGEgY29udGVudHMgZGVzY3JpYmVkIGJlbG93LCB0aGVyZSBhcmUgdGhlIGhlYWRlcnMgcmVxdWlyZWQgYnkKK3RoZSB1ZGF0YSBBUEkgZm9yIGxvYWRpbmcgSUNVIGRhdGEuIEVzcGVjaWFsbHksIGEgVURhdGFJbmZvIHN0cnVjdHVyZQorcHJlY2VkZXMgdGhlIGFjdHVhbCBkYXRhLiBJdCBjb250YWlucyBwbGF0Zm9ybSBwcm9wZXJ0aWVzIHZhbHVlcyBhbmQgdGhlCitmaWxlIGZvcm1hdCB2ZXJzaW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgZm9ybWF0IHZlcnNpb24gNy4xIC4KKworRGF0YSBjb250ZW50czoKKworVGhlIGNvbnRlbnRzIGlzIGEgcGFyc2VkLCBiaW5hcnkgZm9ybSBvZiBzZXZlcmFsIFVuaWNvZGUgY2hhcmFjdGVyCitkYXRhYmFzZSBmaWxlcywgbW9zdCBwcm9taW5lbnRseSBVbmljb2RlRGF0YS50eHQuCisKK0FueSBVbmljb2RlIGNvZGUgcG9pbnQgZnJvbSAwIHRvIDB4MTBmZmZmIGNhbiBiZSBsb29rZWQgdXAgdG8gZ2V0Cit0aGUgcHJvcGVydGllcywgaWYgYW55LCBmb3IgdGhhdCBjb2RlIHBvaW50LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGlucHV0Cit0byB0aGUgbG9va3VwIGFyZSAyMS1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIHdpdGggbm90IGFsbCBvZiB0aGUKKzIxLWJpdCByYW5nZSB1c2VkLgorCitJdCBpcyBhc3N1bWVkIHRoYXQgY2xpZW50IGNvZGUga2VlcHMgYSB1aW50MzJfdCBwb2ludGVyCit0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhOgorCisgICAgY29uc3QgdWludDMyX3QgKnAzMjsKKworRm9ybWFsbHksIHRoZSBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlczoKKworICAgIGNvbnN0IGludDMyX3QgaW5kZXhlc1sxNl0gd2l0aCB2YWx1ZXMgaTAuLmkxNToKKworICBpMCBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgbWFpbiB0cmllLgorICBpMC4uaTMgYWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gZm9ybWF0IHZlcnNpb25zIDQuMCBhbmQgaGlnaGVyOworICAgICAgICAgdGhlIHJlbGF0ZWQgcHJvcHMzMltdIGFuZCBleGNlcHRpb25zW10gYW5kIHVjaGFyc1tdIHdlcmUgdXNlZCBpbiBmb3JtYXQgdmVyc2lvbiAzCisKKyAgICBpMCBwcm9wc0luZGV4OyAtLSAzMi1iaXQgdW5pdCBpbmRleCB0byB0aGUgdGFibGUgb2YgMzItYml0IHByb3BlcnRpZXMgd29yZHMKKyAgICBpMSBleGNlcHRpb25zSW5kZXg7ICAtLSAzMi1iaXQgdW5pdCBpbmRleCB0byB0aGUgdGFibGUgb2YgMzItYml0IGV4Y2VwdGlvbiB3b3JkcworICAgIGkyIGV4Y2VwdGlvbnNUb3BJbmRleDsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIGFycmF5IG9mIFVDaGFycyBmb3Igc3BlY2lhbCBtYXBwaW5ncworCisgICAgaTMgYWRkaXRpb25hbFRyaWVJbmRleDsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIGFkZGl0aW9uYWwgdHJpZSBmb3IgbW9yZSBwcm9wZXJ0aWVzCisgICAgaTQgYWRkaXRpb25hbFZlY3RvcnNJbmRleDsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIHRhYmxlIG9mIHByb3BlcnRpZXMgdmVjdG9ycworICAgIGk1IGFkZGl0aW9uYWxWZWN0b3JzQ29sdW1uczsgLS0gbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBwZXIgcHJvcGVydGllcyB2ZWN0b3IKKworICAgIGk2IHNjcmlwdEV4dGVuc2lvbnNJbmRleDsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIFNjcmlwdF9FeHRlbnNpb25zIGRhdGEKKyAgICBpNyByZXNlcnZlZEluZGV4NzsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIHRvcCBvZiB0aGUgU2NyaXB0X0V4dGVuc2lvbnMgZGF0YQorICAgIGk4IHJlc2VydmVkSW5kZXg4OyAtLSBmb3Igbm93OiBpNywgaTggYW5kIGk5IGhhdmUgdGhlIHNhbWUgdmFsdWVzCisgICAgaTkgZGF0YVRvcEluZGV4OyAtLSBzaXplIG9mIHRoZSBkYXRhIGZpbGUgKG51bWJlciBvZiAzMi1iaXQgdW5pdHMgYWZ0ZXIgdGhlIGhlYWRlcikKKworICAgIGkxMCBtYXhWYWx1ZXM7IC0tIG1heGltdW0gY29kZSB2YWx1ZXMgZm9yIHZlY3RvciB3b3JkIDAsIHNlZSB1cHJvcHMuaCAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDMuMSspCisgICAgaTExIG1heFZhbHVlczI7IC0tIG1heGltdW0gY29kZSB2YWx1ZXMgZm9yIHZlY3RvciB3b3JkIDIsIHNlZSB1cHJvcHMuaCAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDMuMikKKyAgICBpMTIuLmkxNSByZXNlcnZlZEluZGV4ZXM7IC0tIHJlc2VydmVkIHZhbHVlczsgMCBmb3Igbm93CisKKyAgICBQVCBzZXJpYWxpemVkIHByb3BlcnRpZXMgdHJpZSwgc2VlIHV0cmllMi5oIChieXRlIHNpemU6IDQqKGkwLTE2KSkKKworICBQLCBFLCBhbmQgVSBhcmUgbm90IHVzZWQgKGVtcHR5KSBpbiBmb3JtYXQgdmVyc2lvbnMgNCBhbmQgYWJvdmUKKworICAgIFAgIGNvbnN0IHVpbnQzMl90IHByb3BzMzJbaTEtaTBdOworICAgIEUgIGNvbnN0IHVpbnQzMl90IGV4Y2VwdGlvbnNbaTItaTFdOworICAgIFUgIGNvbnN0IFVDaGFyIHVjaGFyc1syKihpMy1pMildOworCisgICAgQVQgc2VyaWFsaXplZCB0cmllIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgKGJ5dGUgc2l6ZTogNCooaTQtaTMpKQorICAgIFBWIGNvbnN0IHVpbnQzMl90IHByb3BzVmVjdG9yc1soaTYtaTQpL2k1XVtpNV09PXVpbnQzMl90IHByb3BzVmVjdG9yc1tpNi1pNF07CisKKyAgICBTQ1ggY29uc3QgdWludDE2X3Qgc2NyaXB0RXh0ZW5zaW9uc1syKihpNy1pNildOworCisgICAgICBTQ1ggY29udGFpbnMgU2NyaXB0X0V4dGVuc2lvbnMgbGlzdHMgYW5kIChTY3JpcHQgY29kZSwgU2NyaXB0X0V4dGVuc2lvbnMgaW5kZXgpIHBhaXJzLgorICAgICAgQSBTY3JpcHRfRXh0ZW5zaW9ucyBsaXN0IGlzIGEgc2VxdWVuY2Ugb2YgVVNjcmlwdENvZGUgdmFsdWVzIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICAgIHdpdGggdGhlIGxhc3QgY29kZSBoYXZpbmcgYml0IDE1IHNldCBmb3IgdGVybWluYXRpb24uCisgICAgICBBIChTY3JpcHQgY29kZSwgU2NyaXB0X0V4dGVuc2lvbnMgaW5kZXgpIHBhaXIgaXMgdGhlIG1haW4gVVNjcmlwdENvZGUgKFNjcmlwdCB2YWx1ZSkKKyAgICAgIGZvbGxvd2VkIGJ5IHRoZSBpbmRleCBvZiB0aGUgU2NyaXB0X0V4dGVuc2lvbnMgbGlzdC4KKyAgICAgIElmIHRoZSBwcm9wc1ZlY3RvcnNbXSBjb2x1bW4gMCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgU2NyaXB0X0V4dGVuc2lvbnMsCisgICAgICB0aGVuIHRoZSBVUFJPUFNfU0NSSVBUX01BU0sgYml0IGZpZWxkIGlzIGFuIGluZGV4IHRvIGVpdGhlciBhIGxpc3Qgb3IgYSBwYWlyIGluIFNDWCwKKyAgICAgIHJhdGhlciB0aGFuIHRoZSBTY3JpcHQgaXRzZWxmLiBUaGUgaGlnaCBiaXRzIGluIHRoZSBVUFJPUFNfU0NSSVBUX1hfTUFTSyBmaWVsZHMKKyAgICAgIGluZGljYXRlIHdoZXRoZXIgdGhlIG1haW4gU2NyaXB0IHZhbHVlIGlzIENvbW1vbiBvciBJbmhlcml0ZWQgKGFuZCB0aGUgaW5kZXggaXMgdG8gYSBsaXN0KQorICAgICAgdnMuIGFub3RoZXIgdmFsdWUgKGFuZCB0aGUgaW5kZXggaXMgdG8gYSBwYWlyKS4KKyAgICAgIChTZWUgVVBST1BTX1NDUklQVF9YX1dJVEhfQ09NTU9OIGV0Yy4gaW4gdXByb3BzLmguKQorCitUcmllIGxvb2t1cCBhbmQgcHJvcGVydGllczoKKworSW4gb3JkZXIgdG8gY29uZGVuc2UgdGhlIGRhdGEgZm9yIHRoZSAyMS1iaXQgY29kZSBzcGFjZSwgc2V2ZXJhbCBwcm9wZXJ0aWVzIG9mCit0aGUgVW5pY29kZSBjb2RlIGFzc2lnbm1lbnQgYXJlIGV4cGxvaXRlZDoKKy0gVGhlIGNvZGUgc3BhY2UgaXMgc3BhcnNlLgorLSBUaGVyZSBhcmUgc2V2ZXJhbCAxMGsgb2YgY29uc2VjdXRpdmUgY29kZXMgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzLgorLSBDaGFyYWN0ZXJzIGFuZCBzY3JpcHRzIGFyZSBhbGxvY2F0ZWQgaW4gZ3JvdXBzIG9mIDE2IGNvZGUgcG9pbnRzLgorLSBJbnNpZGUgYmxvY2tzIGZvciBzY3JpcHRzIHRoZSBwcm9wZXJ0aWVzIGFyZSBvZnRlbiByZXBldGl0aXZlLgorLSBUaGUgMjEtYml0IHNwYWNlIGlzIG5vdCBmdWxseSB1c2VkIGZvciBVbmljb2RlLgorCitUaGUgbG9va3VwIG9mIHByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gY29kZSBwb2ludCBpcyBkb25lIHdpdGggYSB0cmllIGxvb2t1cCwKK3VzaW5nIHRoZSBVVHJpZSBpbXBsZW1lbnRhdGlvbi4KK1RoZSB0cmllIGxvb2t1cCByZXN1bHQgaXMgYSAxNi1iaXQgcHJvcGVydGllcyB3b3JkLgorCitXaXRoIGEgZ2l2ZW4gVW5pY29kZSBjb2RlIHBvaW50CisKKyAgICBVQ2hhcjMyIGM7CisKK2FuZCAwPD1jPDB4MTEwMDAwLCB0aGUgbG9va3VwIGlzIGRvbmUgbGlrZSB0aGlzOgorCisgICAgdWludDE2X3QgcHJvcHM7CisgICAgVVRSSUVfR0VUMTYodHJpZSwgYywgcHJvcHMpOworCitFYWNoIDE2LWJpdCBwcm9wZXJ0aWVzIHdvcmQgY29udGFpbnM6CisKKyAwLi4gNCAgZ2VuZXJhbCBjYXRlZ29yeQorICAgICA1ICByZXNlcnZlZAorIDYuLjE1ICBudW1lcmljIHR5cGUgYW5kIHZhbHVlIChudHYpCisKK0VuY29kaW5nIG9mIG51bWVyaWMgdHlwZSBhbmQgdmFsdWUgaW4gdGhlIDEwLWJpdCBudHYgZmllbGQ6CisgICAgbnR2ICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICB2YWx1ZQorICAgIDAgICAgICAgICAgICAgICBVX05UX05PTkUgICAgICAgMAorICAgIDEuLjEwICAgICAgICAgICBVX05UX0RFQ0lNQUwgICAgMC4uOQorICAgIDExLi4yMCAgICAgICAgICBVX05UX0RJR0lUICAgICAgMC4uOQorICAgIDIxLi4weDJmZiAgICAgICBVX05UX05VTUVSSUMgICAgc2VlIGJlbG93CisgICAgMHgzMDAuLjB4M2ZmICAgIHJlc2VydmVkCisKKyAgICBGb3IgVV9OVF9OVU1FUklDOgorICAgIG50diAgICAgICAgICAgICB2YWx1ZQorICAgIDIxLi4weGFmICAgICAgICBpbnRlZ2VyICAgICAwLi4xNTQKKyAgICAweGIwLi4weDFkZiAgICAgZnJhY3Rpb24gICAgKChudHY+PjQpLTEyKSAvICgobnR2JjB4ZikrMSkgPSAtMS4uMTcgLyAxLi4xNgorICAgIDB4MWUwLi4weDJmZiAgICBsYXJnZSBpbnQgICAoKG50dj4+NSktMTQpICogMTBeKChudHYmMHgxZikrMikgPSAoMS4uOSkqKDEwXjIuLjEwXjMzKQorICAgICAgICAgICAgICAgICAgICAob25seSBvbmUgc2lnbmlmaWNhbnQgZGVjaW1hbCBkaWdpdCkKKyAgICAweDMwMC4uMHgzMjMgICAgYmFzZS02MCAoc2V4YWdlc2ltYWwpIGludGVnZXIgKG5ldyBpbiBmb3JtYXQgdmVyc2lvbiA3LjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnR2Pj4yKS0weGJmKSAqIDYwXigobnR2JjMpKzEpID0gKDEuLjkpKig2MF4xLi42MF40KQorCistLS0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIChuZXcgaW4gZm9ybWF0IHZlcnNpb24gMi4xKSAtLS0KKworVGhlIHNlY29uZCB0cmllIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgKEFUKSBpcyBhbHNvIGEgVVRyaWUgd2l0aCAxNi1iaXQgZGF0YS4KK1RoZSBkYXRhIHdvcmRzIGNvbnNpc3Qgb2YgMzItYml0IHVuaXQgaW5kZXhlcyAobm90IHJvdyBpbmRleGVzISkgaW50byB0aGUKK3RhYmxlIG9mIHVuaXF1ZSBwcm9wZXJ0aWVzIHZlY3RvcnMgKFBWKS4KK0VhY2ggdmVjdG9yIGNvbnRhaW5zIGEgc2V0IG9mIHByb3BlcnRpZXMuCitUaGUgd2lkdGggb2YgYSB2ZWN0b3IgKG51bWJlciBvZiB1aW50MzJfdCBwZXIgcm93KSBtYXkgY2hhbmdlCit3aXRoIHRoZSBmb3JtYXRWZXJzaW9uLCBpdCBpcyBzdG9yZWQgaW4gaTUuCisKK0N1cnJlbnQgcHJvcGVydGllczogc2VlIGljdS9zb3VyY2UvY29tbW9uL3Vwcm9wcy5oCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDMuMSAtLS0KKworU2VlIGkxMCBtYXhWYWx1ZXMgYWJvdmUsIGNvbnRhaW5zIG9ubHkgVUJMT0NLX0NPVU5UIGFuZCBVU0NSSVBUX0NPREVfTElNSVQuCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDMuMiAtLS0KKworLSBUaGUgdHJpZXMgdXNlIGxpbmVhciBMYXRpbi0xIHJhbmdlcy4KKy0gVGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyBiaXRzIHN0b3JlIGZ1bGwgcHJvcGVydGllcyBYWVogaW5zdGVhZAorICBvZiBwYXJ0aWFsIE90aGVyX1hZWiwgc28gdGhhdCBjaGFuZ2VzIGluIHRoZSBkZXJpdmF0aW9uIGZvcm11bGFzCisgIG5lZWQgbm90IGJlIHRyYWNrZWQgaW4gcnVudGltZSBsaWJyYXJ5IGNvZGUuCistIEpvaW5pbmcgVHlwZSBhbmQgTGluZSBCcmVhayBhcmUgYWxzbyBzdG9yZWQgY29tcGxldGVseSwgc28gdGhhdCB1cHJvcHMuYworICBuZWVkcyBubyBydW50aW1lIGZvcm11bGFzIGZvciBlbnVtZXJhdGVkIHByb3BlcnRpZXMgZWl0aGVyLgorLSBTdG9yZSB0aGUgY2FzZS1zZW5zaXRpdmUgZmxhZyBpbiB0aGUgbWFpbiBwcm9wZXJ0aWVzIHdvcmQuCistIGkxMCBhbHNvIGNvbnRhaW5zIFVfTEJfQ09VTlQgYW5kIFVfRUFfQ09VTlQuCistIGkxMSBjb250YWlucyBtYXhWYWx1ZXMyIGZvciB2ZWN0b3Igd29yZCAyLgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiA0IC0tLQorCitUaGUgZm9ybWF0IGNoYW5nZXMgYmV0d2VlbiB2ZXJzaW9uIDMgYW5kIDQgYmVjYXVzZSB0aGUgcHJvcGVydGllcyByZWxhdGVkIHRvCitjYXNlIG1hcHBpbmdzIGFuZCBiaWRpL3NoYXBpbmcgYXJlIHB1bGxlZCBvdXQgaW50byBzZXBhcmF0ZSBmaWxlcworZm9yIG1vZHVsYXJpemF0aW9uLgorSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBuZWVkIGZvciBjb2RlIGNoYW5nZXMsIHNvbWUgb2YgdGhlIHByZXZpb3VzIGRhdGEKK3N0cnVjdHVyZXMgYXJlIG9taXR0ZWQsIHJhdGhlciB0aGFuIHJlYXJyYW5naW5nIGV2ZXJ5dGhpbmcuCisKKyhUaGUgY2hhbmdlIHRvIGZvcm1hdCB2ZXJzaW9uIDQgaXMgZm9yIElDVSAzLjQuIFRoZSBsYXN0IENWUyByZXZpc2lvbiBvZgorZ2VucHJvcHMvc3RvcmUuYyBmb3IgZm9ybWF0IHZlcnNpb24gMy4yIGlzIDEuNDguKQorCitUaGUgbWFpbiB0cmllJ3MgZGF0YSBpcyBzaWduaWZpY2FudGx5IHNpbXBsaWZpZWQ6CistIFRoZSB0cmllJ3MgMTYtYml0IGRhdGEgd29yZCBpcyB1c2VkIGRpcmVjdGx5IGluc3RlYWQgb2YgYXMgYW4gaW5kZXgKKyAgaW50byBwcm9wczMyW10uCistIFRoZSB0cmllIHVzZXMgdGhlIGRlZmF1bHQgdHJpZSBmb2xkaW5nIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGN1c3RvbSBvbmVzLgorLSBOdW1lcmljIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSB0cmllIGRhdGEgd29yZCwgd2l0aCBzcGVjaWFsCisgIGVuY29kaW5ncy4KKy0gTm8gbW9yZSBleGNlcHRpb24gZGF0YSAodGhlIGRhdGEgdGhhdCBuZWVkZWQgaXQgd2FzIHB1bGxlZCBvdXQsIG9yLCBpbiB0aGUKKyAgY2FzZSBvZiBudW1lcmljIHZhbHVlcywgZW5jb2RlZCBkaWZmZXJlbnRseSkuCistIE5vIG1vcmUgc3RyaW5nIGRhdGEgKHB1bGxlZCBvdXQgLSB3YXMgZm9yIGNhc2UgbWFwcGluZ3MpLgorCitBbHNvLCBzb21lIG9mIHRoZSBwcmV2aW91c2x5IHVzZWQgcHJvcGVydGllcyB2ZWN0b3IgYml0cyBhcmUgcmVzZXJ2ZWQgYWdhaW4uCisKK1RoZSBpbmRleGVzW10gdmFsdWVzIGZvciB0aGUgb21pdHRlZCBzdHJ1Y3R1cmVzIGFyZSBzdGlsbCBmaWxsZWQgaW4KKyhpbmRpY2F0aW5nIHplcm8tbGVuZ3RoIGFycmF5cykgc28gdGhhdCB0aGUgc3dhcHBlciBjb2RlIHJlbWFpbnMgdW5jaGFuZ2VkLgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiA1IC0tLQorCitGb3JtYXQgdmVyc2lvbiA1IGJlY2FtZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgYml0IGZpZWxkIGZvciBzY3JpcHQgY29kZXMKK292ZXJmbG93ZWQuIFRoZSBjaGFuZ2VzIGFyZSBpbmNvbXBhdGlibGUgYmVjYXVzZQorb2xkIGNvZGUgd291bGQgaGF2ZSBzZWVuIG5vbnNlbnNpY2FsbHkgbG93IHZhbHVlcyBmb3IgbmV3LCBoaWdoZXIgc2NyaXB0IGNvZGVzLgorCitSZWFycmFuZ2VkIGJpdCBmaWVsZHMgaW4gdGhlIHNlY29uZCB0cmllIChBVCkgYW5kIHdpZGVuZWQgdGhyZWUgKFNjcmlwdCwgQmxvY2ssCitXb3JkX0JyZWFrKSBieSBvbmUgYml0IGVhY2guCisKK01vZGlmaWVkIGJpdCBmaWVsZHMgaW4gaWN1L3NvdXJjZS9jb21tb24vdXByb3BzLmgKKworLS0tIENoYW5nZXMgaW4gZm9ybWF0IHZlcnNpb24gNiAtLS0KKworRm9ybWF0IHZlcnNpb24gNiBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgVW5pY29kZSA1LjIgYWRkcyBmcmFjdGlvbnMgd2l0aAorZGVub21pbmF0b3JzIDksIDEwIGFuZCAxNiwgYW5kIGl0IHdhcyBlYXNpZXIgdG8gcmVkZXNpZ24gdGhlIGVuY29kaW5nIG9mIG51bWVyaWMKK3R5cGVzIGFuZCB2YWx1ZXMgcmF0aGVyIHRoYW4gYWRkIGFub3RoZXIgdmFyaWFudCB0byB0aGUgcHJldmlvdXMgZm9ybWF0LgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiA3IC0tLQorCitVbmljb2RlIDYuMCBhZGRzIFNjcmlwdF9FeHRlbnNpb25zLiBGb3IgY2hhcmFjdGVycyB3aXRoIHNjcmlwdCBleHRlbnNpb25zIGRhdGEsCit0aGUgc2NyaXB0IGNvZGUgYml0cyBhcmUgYW4gaW5kZXggaW50byB0aGUgbmV3IFNjcmlwdF9FeHRlbnNpb25zIGFycmF5IHJhdGhlcgordGhhbiBhIHNjcmlwdCBjb2RlLgorCitDaGFuZ2UgZnJvbSBVVHJpZSB0byBVVHJpZTIuCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDcuMSAtLS0KKworVW5pY29kZSA2LjIgYWRkcyBzZXhhZ2VzaW1hbCAoYmFzZS02MCkgbnVtZXJpYyB2YWx1ZXM6CisgICAgY3A7MTI0MzI7bmE9Q1VORUlGT1JNIE5VTUVSSUMgU0lHTiBTSEFSMiBUSU1FUyBHQUwgUExVUyBESVNIO252PTIxNjAwMAorICAgIGNwOzEyNDMzO25hPUNVTkVJRk9STSBOVU1FUklDIFNJR04gU0hBUjIgVElNRVMgR0FMIFBMVVMgTUlOO252PTQzMjAwMAorCitUaGUgZW5jb2Rpbmcgb2YgbnVtZXJpYyB2YWx1ZXMgd2FzIGV4dGVuZGVkIHRvIGhhbmRsZSBzdWNoIHZhbHVlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworVV9OQU1FU1BBQ0VfVVNFCisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIFVEYXRhSW5mbyBkYXRhSW5mbz17CisgICAgc2l6ZW9mKFVEYXRhSW5mbyksCisgICAgMCwKKworICAgIFVfSVNfQklHX0VORElBTiwKKyAgICBVX0NIQVJTRVRfRkFNSUxZLAorICAgIFVfU0laRU9GX1VDSEFSLAorICAgIDAsCisKKyAgICB7IDB4NTUsIDB4NTAsIDB4NzIsIDB4NmYgfSwgICAgICAgICAgICAgICAgIC8qIGRhdGFGb3JtYXQ9IlVQcm8iICovCisgICAgeyA3LCAxLCAwLCAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JtYXRWZXJzaW9uICovCisgICAgeyA2LCAyLCAwLCAwIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkYXRhVmVyc2lvbiAqLworfTsKKworY2xhc3MgQ29yZVByb3BzQnVpbGRlciA6IHB1YmxpYyBQcm9wc0J1aWxkZXIgeworcHVibGljOgorICAgIENvcmVQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIH5Db3JlUHJvcHNCdWlsZGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wcyhjb25zdCBVbmlQcm9wcyAmLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIGJ1aWxkKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRHY0FuZE51bWVyaWMoY29uc3QgVW5pUHJvcHMgJiwgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgVVRyaWUyICpwVHJpZTsKKyAgICBVVHJpZTIgKnByb3BzMlRyaWU7CisgICAgVVByb3BzVmVjdG9ycyAqcHY7CisgICAgVW5pY29kZVN0cmluZyBzY3JpcHRFeHRlbnNpb25zOworfTsKKworQ29yZVByb3BzQnVpbGRlcjo6Q29yZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpCisgICAgICAgIDogcFRyaWUoTlVMTCksIHByb3BzMlRyaWUoTlVMTCksIHB2KE5VTEwpIHsKKyAgICBwVHJpZT11dHJpZTJfb3BlbigwLCAwLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjb3JlcHJvcHNidWlsZGVyIHV0cmllMl9vcGVuKCkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgfQorICAgIHB2PXVwdmVjX29wZW4oVVBST1BTX1ZFQ1RPUl9XT1JEUywgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY29yZXByb3BzYnVpbGRlciB1cHZlY19vcGVuKCkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgfQorfQorCitDb3JlUHJvcHNCdWlsZGVyOjp+Q29yZVByb3BzQnVpbGRlcigpIHsKKyAgICB1dHJpZTJfY2xvc2UocFRyaWUpOworICAgIHV0cmllMl9jbG9zZShwcm9wczJUcmllKTsKKyAgICB1cHZlY19jbG9zZShwdik7Cit9CisKK3ZvaWQKK0NvcmVQcm9wc0J1aWxkZXI6OnNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKSB7CisgICAgdXBydl9tZW1jcHkoZGF0YUluZm8uZGF0YVZlcnNpb24sIHZlcnNpb24sIDQpOworfQorCisvLyBGb3IgbnQ9VV9OVF9OVU1FUklDLgorc3RhdGljIGludDMyX3QKK2VuY29kZU51bWVyaWNWYWx1ZShVQ2hhcjMyIHN0YXJ0LCBjb25zdCBjaGFyICpzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBjb25zdCBjaGFyICpvcmlnaW5hbDsKKyAgICAvKiBnZXQgYSBwb3NzaWJsZSBtaW51cyBzaWduICovCisgICAgVUJvb2wgaXNOZWdhdGl2ZTsKKyAgICBpZigqcz09Jy0nKSB7CisgICAgICAgIGlzTmVnYXRpdmU9VFJVRTsKKyAgICAgICAgKytzOworICAgIH0gZWxzZSB7CisgICAgICAgIGlzTmVnYXRpdmU9RkFMU0U7CisgICAgfQorCisgICAgaW50MzJfdCB2YWx1ZT0wLCBkZW49MCwgZXhwPTAsIG50dj0wOworICAgIGNoYXIgKm51bWJlckxpbWl0OworICAgIC8qIHRyeSBsYXJnZSwgc2luZ2xlLXNpZ25pZmljYW50LWRpZ2l0IG51bWJlcnMsIG1heSBvdGhlcndpc2Ugb3ZlcmZsb3cgc3RydG91bCgpICovCisgICAgaWYoJzEnPD1zWzBdICYmIHNbMF08PSc5JyAmJiBzWzFdPT0nMCcgJiYgc1syXT09JzAnKSB7CisgICAgICAgIHZhbHVlPXNbMF0tJzAnOworICAgICAgICBudW1iZXJMaW1pdD1jb25zdF9jYXN0PGNoYXIgKj4ocyk7CisgICAgICAgIHdoaWxlKCooKytudW1iZXJMaW1pdCk9PScwJykgeworICAgICAgICAgICAgKytleHA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBub3JtYWwgbnVtYmVyIHBhcnNpbmcgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyB1bD11cHJ2X3N0cnRvdWwocywgJm51bWJlckxpbWl0LCAxMCk7CisgICAgICAgIGlmKHM9PW51bWJlckxpbWl0IHx8ICgqbnVtYmVyTGltaXQhPTAgJiYgKm51bWJlckxpbWl0IT0nLycpIHx8IHVsPjB4N2ZmZmZmZmYpIHsKKyAgICAgICAgICAgIG50dj0tMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlPShpbnQzMl90KXVsOworICAgICAgICB9CisgICAgICAgIGlmKG50dj49MCAmJiAqbnVtYmVyTGltaXQ9PScvJykgeworICAgICAgICAgICAgLyogZnJhY3Rpb25hbCB2YWx1ZSwgZ2V0IHRoZSBkZW5vbWluYXRvciAqLworICAgICAgICAgICAgcz1udW1iZXJMaW1pdCsxOworICAgICAgICAgICAgdWw9dXBydl9zdHJ0b3VsKHMsICZudW1iZXJMaW1pdCwgMTApOworICAgICAgICAgICAgaWYocz09bnVtYmVyTGltaXQgfHwgKm51bWJlckxpbWl0IT0wIHx8IHVsPT0wIHx8IHVsPjB4N2ZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICBudHY9LTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbj0oaW50MzJfdCl1bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZihpc05lZ2F0aXZlKSB7CisgICAgICAgIHZhbHVlPS0oaW50MzJfdCl2YWx1ZTsKKyAgICB9CisKKyAgICBpZihudHY8MCkgeworICAgICAgICAvLyBwYXNzCisgICAgfSBlbHNlIGlmKGRlbj09MCAmJiB2YWx1ZT49MCkgeworICAgICAgICBpZihleHA9PTIgJiYgKHZhbHVlKjEwMCk8PVVQUk9QU19OVFZfTUFYX1NNQUxMX0lOVCkgeworICAgICAgICAgICAgLyogc21hbGwgaW50ZWdlciBwYXJzZWQgbGlrZSBhIGxhcmdlIG9uZSAqLworICAgICAgICAgICAgbnR2PVVQUk9QU19OVFZfTlVNRVJJQ19TVEFSVCt2YWx1ZSoxMDA7CisgICAgICAgIH0gZWxzZSBpZihleHA9PTApIHsKKyAgICAgICAgICAgIGlmKHZhbHVlPD1VUFJPUFNfTlRWX01BWF9TTUFMTF9JTlQpIHsKKyAgICAgICAgICAgICAgICAvKiBzbWFsbCBpbnRlZ2VyICovCisgICAgICAgICAgICAgICAgbnR2PVVQUk9QU19OVFZfTlVNRVJJQ19TVEFSVCt2YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogbGFyZ2UgaW50ZWdlciBwYXJzZWQgbGlrZSBhIHNtYWxsIG9uZSAqLworICAgICAgICAgICAgICAgIC8qIHNwbGl0IHRoZSB2YWx1ZSBpbnRvIG1hbnRpc3NhIGFuZCBleHBvbmVudCwgYmFzZSAxMCAqLworICAgICAgICAgICAgICAgIGludDMyX3QgbWFudD12YWx1ZTsKKyAgICAgICAgICAgICAgICB3aGlsZSgobWFudCUxMCk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgbWFudC89MTA7CisgICAgICAgICAgICAgICAgICAgICsrZXhwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiB2YWx1ZTw9MHg3ZmZmZmZmZiBndWFyYW50ZWVzIGV4cDw9MzMKKyAgICAgICAgICAgICAgICBpZihtYW50PD05KSB7CisgICAgICAgICAgICAgICAgICAgIG50dj0oKG1hbnQrMTQpPDw1KSsoZXhwLTIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBzZXhhZ2VzaW1hbCAoYmFzZSA2MCkgbnVtYmVycy4KKyAgICAgICAgICAgICAgICAgICAgbWFudD12YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZXhwPTA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlKChtYW50JTYwKT09MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFudC89NjA7CisgICAgICAgICAgICAgICAgICAgICAgICArK2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihtYW50PD05ICYmIGV4cDw9NCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnR2PSgobWFudCsweGJmKTw8MikrKGV4cC0xKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG50dj0tMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKDI8PWV4cCAmJiBleHA8PTMzICYmIDE8PXZhbHVlICYmIHZhbHVlPD05KSB7CisgICAgICAgICAgICAvKiBsYXJnZSwgc2luZ2xlLXNpZ25pZmljYW50LWRpZ2l0IGludGVnZXIgKi8KKyAgICAgICAgICAgIG50dj0oKHZhbHVlKzE0KTw8NSkrKGV4cC0yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG50dj0tMTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZihleHA9PTAgJiYgLTE8PXZhbHVlICYmIHZhbHVlPD0xNyAmJiAxPD1kZW4gJiYgZGVuPD0xNikgeworICAgICAgICAvKiBmcmFjdGlvbiAqLworICAgICAgICBudHY9KCh2YWx1ZSsxMik8PDQpKyhkZW4tMSk7CisgICAgfSBlbHNlIGlmKGV4cD09MCAmJiB2YWx1ZT09LTEgJiYgZGVuPT0wKSB7CisgICAgICAgIC8qIC0xIHBhcnNlZCB3aXRoIGRlbj0wLCBlbmNvZGVkIGFzIHBzZXVkby1mcmFjdGlvbiAtMS8xICovCisgICAgICAgIG50dj0oKHZhbHVlKzEyKTw8NCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnR2PS0xOworICAgIH0KKyAgICBpZihudHY8MCB8fCAqbnVtYmVyTGltaXQhPTApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5hYmxlIHRvIGVuY29kZSBudW1lcmljIHZhbHVlIG52PSVzXG4iLCBvcmlnaW5hbCk7CisgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgfQorICAgIHJldHVybiBudHY7Cit9CisKK3ZvaWQKK0NvcmVQcm9wc0J1aWxkZXI6OnNldEdjQW5kTnVtZXJpYyhjb25zdCBVbmlQcm9wcyAmcHJvcHMsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICBVQ2hhcjMyIHN0YXJ0PXByb3BzLnN0YXJ0OworICAgIFVDaGFyMzIgZW5kPXByb3BzLmVuZDsKKworICAgIGludDMyX3QgdHlwZT1wcm9wcy5nZXRJbnRQcm9wKFVDSEFSX05VTUVSSUNfVFlQRSk7CisgICAgY29uc3QgY2hhciAqbnZTdHJpbmc9cHJvcHMubnVtZXJpY1ZhbHVlOworICAgIGlmKHR5cGUhPVVfTlRfTk9ORSAmJiBudlN0cmluZz09TlVMTCAmJiBzdGFydD09ZW5kKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGNwIGxpbmUgaGFzIE51bWVyaWNfVHlwZSBidXQgbm8gTnVtZXJpY19WYWx1ZVxuIik7CisgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZighbmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX0dFTkVSQUxfQ0FURUdPUlkpICYmICFuZXdWYWx1ZXMuY29udGFpbnMoVUNIQVJfTlVNRVJJQ19WQUxVRSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludDMyX3QgbnR2PVVQUk9QU19OVFZfTk9ORTsgIC8vIG51bWVyaWMgdHlwZSAmIHZhbHVlCisgICAgaWYobnZTdHJpbmchPU5VTEwgJiYgdXBydl9zdHJjbXAobnZTdHJpbmcsICJOYU4iKSE9MCkgeworICAgICAgICBpbnQzMl90IGRpZ2l0VmFsdWU9cHJvcHMuZGlnaXRWYWx1ZTsKKyAgICAgICAgaWYoIHR5cGU8PVVfTlRfTk9ORSB8fCBVX05UX05VTUVSSUM8dHlwZSB8fAorICAgICAgICAgICAgKCh0eXBlPT1VX05UX0RFQ0lNQUwgfHwgdHlwZT09VV9OVF9ESUdJVCkgJiYgZGlnaXRWYWx1ZTwwKQorICAgICAgICApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IG50PSVkIGJ1dCBudj0lc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCl0eXBlLCBudlN0cmluZz09TlVMTCA/ICJOVUxMIiA6IG52U3RyaW5nKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICBjYXNlIFVfTlRfTk9ORToKKyAgICAgICAgICAgIG50dj1VUFJPUFNfTlRWX05PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX05UX0RFQ0lNQUw6CisgICAgICAgICAgICBudHY9VVBST1BTX05UVl9ERUNJTUFMX1NUQVJUK2RpZ2l0VmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX05UX0RJR0lUOgorICAgICAgICAgICAgbnR2PVVQUk9QU19OVFZfRElHSVRfU1RBUlQrZGlnaXRWYWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfTlRfTlVNRVJJQzoKKyAgICAgICAgICAgIGlmKGRpZ2l0VmFsdWU+PTApIHsKKyAgICAgICAgICAgICAgICBudHY9VVBST1BTX05UVl9OVU1FUklDX1NUQVJUK2RpZ2l0VmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG50dj1lbmNvZGVOdW1lcmljVmFsdWUoc3RhcnQsIG52U3RyaW5nLCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsgIC8vIHVucmVhY2hhYmxlCisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50MzJfdCB2YWx1ZT0KKyAgICAgICAgKHVpbnQzMl90KXByb3BzLmdldEludFByb3AoVUNIQVJfR0VORVJBTF9DQVRFR09SWSkgfAorICAgICAgICAobnR2PDxVUFJPUFNfTlVNRVJJQ19UWVBFX1ZBTFVFX1NISUZUKTsKKyAgICBpZihzdGFydD09ZW5kKSB7CisgICAgICAgIHV0cmllMl9zZXQzMihwVHJpZSwgc3RhcnQsIHZhbHVlLCAmZXJyb3JDb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1dHJpZTJfc2V0UmFuZ2UzMihwVHJpZSwgc3RhcnQsIGVuZCwgdmFsdWUsIFRSVUUsICZlcnJvckNvZGUpOworICAgIH0KKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1dHJpZTJfc2V0UmFuZ2UzMihwcm9wZXJ0aWVzIHRyaWUgJTA0bFguLiUwNGxYKSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICAobG9uZylzdGFydCwgKGxvbmcpZW5kLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICB9Cit9CisKK3N0cnVjdCBQcm9wVG9CaW5hcnkgeworICAgIGludDMyX3QgcHJvcDsgIC8vIFVQcm9wZXJ0eQorICAgIGludDMyX3QgdmVjV29yZCwgdmVjU2hpZnQ7Cit9OworCitzdGF0aWMgY29uc3QgUHJvcFRvQmluYXJ5Citwcm9wVG9CaW5hcmllc1tdPXsKKyAgICB7IFVDSEFSX1dISVRFX1NQQUNFLCAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX1dISVRFX1NQQUNFIH0sCisgICAgeyBVQ0hBUl9EQVNILCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19EQVNIIH0sCisgICAgLy8gTm90ZTogVGhlIEh5cGhlbiBwcm9wZXJ0eSBpcyBzdGFiaWxpemVkIHNpbmNlIFVuaWNvZGUgNC4wCisgICAgLy8gYW5kIGRlcHJlY2F0ZWQgc2luY2UgVW5pY29kZSA2LjAuCisgICAgeyBVQ0hBUl9IWVBIRU4sICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19IWVBIRU4gfSwKKyAgICB7IFVDSEFSX1FVT1RBVElPTl9NQVJLLCAgICAgICAgICAgICAgICAgMSwgVVBST1BTX1FVT1RBVElPTl9NQVJLIH0sCisgICAgeyBVQ0hBUl9URVJNSU5BTF9QVU5DVFVBVElPTiwgICAgICAgICAgIDEsIFVQUk9QU19URVJNSU5BTF9QVU5DVFVBVElPTiB9LAorICAgIC8vIE5vdGU6IFRoZSBIZXhfRGlnaXQgYW5kIEFTQ0lJX0hleF9EaWdpdCBwcm9wZXJ0aWVzIGFyZSBwcm9iYWJseSBzdGFibGUgZW5vdWdoCisgICAgLy8gc28gdGhhdCB0aGV5IGNvdWxkIGJlIGhhcmRjb2RlZC4KKyAgICB7IFVDSEFSX0hFWF9ESUdJVCwgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0hFWF9ESUdJVCB9LAorICAgIHsgVUNIQVJfQVNDSUlfSEVYX0RJR0lULCAgICAgICAgICAgICAgICAxLCBVUFJPUFNfQVNDSUlfSEVYX0RJR0lUIH0sCisgICAgeyBVQ0hBUl9JREVPR1JBUEhJQywgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19JREVPR1JBUEhJQyB9LAorICAgIHsgVUNIQVJfRElBQ1JJVElDLCAgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfRElBQ1JJVElDIH0sCisgICAgeyBVQ0hBUl9FWFRFTkRFUiwgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19FWFRFTkRFUiB9LAorICAgIC8vIE5vdGU6IFRoZSBOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludCBwcm9wZXJ0eSBpcyBwcm9iYWJseSBzdGFibGUgZW5vdWdoCisgICAgLy8gc28gdGhhdCBpdCBjb3VsZCBiZSBoYXJkY29kZWQuCisgICAgeyBVQ0hBUl9OT05DSEFSQUNURVJfQ09ERV9QT0lOVCwgICAgICAgIDEsIFVQUk9QU19OT05DSEFSQUNURVJfQ09ERV9QT0lOVCB9LAorICAgIC8vIE5vdGU6IFRoZSBHcmFwaGVtZV9MaW5rIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgc2luY2UgVW5pY29kZSA1LjAKKyAgICAvLyBiZWNhdXNlIGl0IGlzIGEgIkR1cGxpY2F0aW9uIG9mIGNjYz05IiAoVUFYICM0NCkuCisgICAgeyBVQ0hBUl9HUkFQSEVNRV9MSU5LLCAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19HUkFQSEVNRV9MSU5LIH0sCisgICAgeyBVQ0hBUl9JRFNfQklOQVJZX09QRVJBVE9SLCAgICAgICAgICAgIDEsIFVQUk9QU19JRFNfQklOQVJZX09QRVJBVE9SIH0sCisgICAgeyBVQ0hBUl9JRFNfVFJJTkFSWV9PUEVSQVRPUiwgICAgICAgICAgIDEsIFVQUk9QU19JRFNfVFJJTkFSWV9PUEVSQVRPUiB9LAorICAgIHsgVUNIQVJfUkFESUNBTCwgICAgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfUkFESUNBTCB9LAorICAgIHsgVUNIQVJfVU5JRklFRF9JREVPR1JBUEgsICAgICAgICAgICAgICAxLCBVUFJPUFNfVU5JRklFRF9JREVPR1JBUEggfSwKKyAgICB7IFVDSEFSX0RFUFJFQ0FURUQsICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0RFUFJFQ0FURUQgfSwKKyAgICB7IFVDSEFSX0xPR0lDQUxfT1JERVJfRVhDRVBUSU9OLCAgICAgICAgMSwgVVBST1BTX0xPR0lDQUxfT1JERVJfRVhDRVBUSU9OIH0sCisgICAgeyBVQ0hBUl9TX1RFUk0sICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19TX1RFUk0gfSwKKyAgICB7IFVDSEFSX1ZBUklBVElPTl9TRUxFQ1RPUiwgICAgICAgICAgICAgMSwgVVBST1BTX1ZBUklBVElPTl9TRUxFQ1RPUiB9LAorICAgIC8vIE5vdGU6IFBhdHRlcm5fU3ludGF4ICYgUGF0dGVybl9XaGl0ZV9TcGFjZSBhcmUgYXZhaWxhYmxlIHZpYQorICAgIC8vIHRoZSBpbnRlcm5hbCBQYXR0ZXJuUHJvcHMgY2xhc3MgYW5kIG5lZWQgbm90IGJlIHN0b3JlZCBoZXJlIGFueSBtb3JlLgorICAgIHsgVUNIQVJfUEFUVEVSTl9TWU5UQVgsICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfUEFUVEVSTl9TWU5UQVggfSwKKyAgICB7IFVDSEFSX1BBVFRFUk5fV0hJVEVfU1BBQ0UsICAgICAgICAgICAgMSwgVVBST1BTX1BBVFRFUk5fV0hJVEVfU1BBQ0UgfSwKKyAgICB7IFVDSEFSX1hJRF9TVEFSVCwgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX1hJRF9TVEFSVCB9LAorICAgIHsgVUNIQVJfWElEX0NPTlRJTlVFLCAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfWElEX0NPTlRJTlVFIH0sCisgICAgeyBVQ0hBUl9NQVRILCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19NQVRIIH0sCisgICAgeyBVQ0hBUl9BTFBIQUJFVElDLCAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19BTFBIQUJFVElDIH0sCisgICAgeyBVQ0hBUl9HUkFQSEVNRV9FWFRFTkQsICAgICAgICAgICAgICAgIDEsIFVQUk9QU19HUkFQSEVNRV9FWFRFTkQgfSwKKyAgICB7IFVDSEFSX0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQsICAgMSwgVVBST1BTX0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQgfSwKKyAgICB7IFVDSEFSX0lEX1NUQVJULCAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0lEX1NUQVJUIH0sCisgICAgeyBVQ0hBUl9JRF9DT05USU5VRSwgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19JRF9DT05USU5VRSB9LAorICAgIHsgVUNIQVJfR1JBUEhFTUVfQkFTRSwgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfR1JBUEhFTUVfQkFTRSB9LAorfTsKKworc3RydWN0IFByb3BUb0VudW0geworICAgIGludDMyX3QgcHJvcDsgIC8vIFVQcm9wZXJ0eQorICAgIGludDMyX3QgdmVjV29yZCwgdmVjU2hpZnQ7CisgICAgdWludDMyX3QgdmVjTWFzazsKK307CisKK3N0YXRpYyBjb25zdCBQcm9wVG9FbnVtCitwcm9wVG9FbnVtc1tdPXsKKyAgICAvLyBVc2UgVVBST1BTX1NDUklQVF9YX01BU0sgbm90IFVQUk9QU19TQ1JJUFRfTUFTSzoKKyAgICAvLyBXaGVuIHdyaXRpbmcgYSBTY3JpcHQgY29kZSwgcmVtb3ZlIFNjcmlwdF9FeHRlbnNpb25zIGJpdHMgYXMgd2VsbC4KKyAgICAvLyBJZiBuZWVkZWQsIHRoZXkgd2lsbCBnZXQgd3JpdHRlbiBhZ2Fpbi4KKyAgICB7IFVDSEFSX1NDUklQVCwgICAgICAgICAgICAgICAgICAgICAwLCAwLCBVUFJPUFNfU0NSSVBUX1hfTUFTSyB9LAorICAgIHsgVUNIQVJfQkxPQ0ssICAgICAgICAgICAgICAgICAgICAgIDAsIFVQUk9QU19CTE9DS19TSElGVCwgVVBST1BTX0JMT0NLX01BU0sgfSwKKyAgICB7IFVDSEFSX0VBU1RfQVNJQU5fV0lEVEgsICAgICAgICAgICAwLCBVUFJPUFNfRUFfU0hJRlQsIFVQUk9QU19FQV9NQVNLIH0sCisgICAgeyBVQ0hBUl9ERUNPTVBPU0lUSU9OX1RZUEUsICAgICAgICAgMiwgMCwgVVBST1BTX0RUX01BU0sgfSwKKyAgICB7IFVDSEFSX0dSQVBIRU1FX0NMVVNURVJfQlJFQUssICAgICAyLCBVUFJPUFNfR0NCX1NISUZULCBVUFJPUFNfR0NCX01BU0sgfSwKKyAgICB7IFVDSEFSX1dPUkRfQlJFQUssICAgICAgICAgICAgICAgICAyLCBVUFJPUFNfV0JfU0hJRlQsIFVQUk9QU19XQl9NQVNLIH0sCisgICAgeyBVQ0hBUl9TRU5URU5DRV9CUkVBSywgICAgICAgICAgICAgMiwgVVBST1BTX1NCX1NISUZULCBVUFJPUFNfU0JfTUFTSyB9LAorICAgIHsgVUNIQVJfTElORV9CUkVBSywgICAgICAgICAgICAgICAgIDIsIFVQUk9QU19MQl9TSElGVCwgVVBST1BTX0xCX01BU0sgfSwKK307CisKK3ZvaWQKK0NvcmVQcm9wc0J1aWxkZXI6OnNldFByb3BzKGNvbnN0IFVuaVByb3BzICZwcm9wcywgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgc2V0R2NBbmROdW1lcmljKHByb3BzLCBuZXdWYWx1ZXMsIGVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBVQ2hhcjMyIHN0YXJ0PXByb3BzLnN0YXJ0OworICAgIFVDaGFyMzIgZW5kPXByb3BzLmVuZDsKKyAgICBpZihzdGFydD09MCAmJiBlbmQ9PTB4MTBmZmZmKSB7CisgICAgICAgIC8vIEFsc28gc2V0IGJpdHMgZm9yIGluaXRpYWxWYWx1ZSBhbmQgZXJyb3JWYWx1ZS4KKyAgICAgICAgZW5kPVVQVkVDX01BWF9DUDsKKyAgICB9CisgICAgaWYobmV3VmFsdWVzLmNvbnRhaW5zU29tZSgwLCBVQ0hBUl9CSU5BUllfTElNSVQtMSkpIHsKKyAgICAgICAgZm9yKGludDMyX3QgaT0wOyBpPExFTkdUSE9GKHByb3BUb0JpbmFyaWVzKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBQcm9wVG9CaW5hcnkgJnAyYj1wcm9wVG9CaW5hcmllc1tpXTsKKyAgICAgICAgICAgIFVfQVNTRVJUKHAyYi52ZWNTaGlmdDwzMik7CisgICAgICAgICAgICBpZihuZXdWYWx1ZXMuY29udGFpbnMocDJiLnByb3ApKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbWFzaz1VX01BU0socDJiLnZlY1NoaWZ0KTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZT0gcHJvcHMuYmluUHJvcHNbcDJiLnByb3BdID8gbWFzayA6IDA7CisgICAgICAgICAgICAgICAgdXB2ZWNfc2V0VmFsdWUocHYsIHN0YXJ0LCBlbmQsIHAyYi52ZWNXb3JkLCB2YWx1ZSwgbWFzaywgJmVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYobmV3VmFsdWVzLmNvbnRhaW5zU29tZShVQ0hBUl9JTlRfU1RBUlQsIFVDSEFSX0lOVF9MSU1JVC0xKSkgeworICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8TEVOR1RIT0YocHJvcFRvRW51bXMpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFByb3BUb0VudW0gJnAyZT1wcm9wVG9FbnVtc1tpXTsKKyAgICAgICAgICAgIFVfQVNTRVJUKHAyZS52ZWNTaGlmdDwzMik7CisgICAgICAgICAgICBpZihuZXdWYWx1ZXMuY29udGFpbnMocDJlLnByb3ApKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbWFzaz1wMmUudmVjTWFzazsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZT0odWludDMyX3QpKHByb3BzLmdldEludFByb3AocDJlLnByb3ApPDxwMmUudmVjU2hpZnQpOworICAgICAgICAgICAgICAgIFVfQVNTRVJUKCh2YWx1ZSZtYXNrKT09dmFsdWUpOworICAgICAgICAgICAgICAgIHVwdmVjX3NldFZhbHVlKHB2LCBzdGFydCwgZW5kLCBwMmUudmVjV29yZCwgdmFsdWUsIG1hc2ssICZlcnJvckNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKG5ld1ZhbHVlcy5jb250YWlucyhVQ0hBUl9BR0UpKSB7CisgICAgICAgIGlmKHByb3BzLmFnZVswXT4xNSB8fCBwcm9wcy5hZ2VbMV0+MTUgfHwgcHJvcHMuYWdlWzJdIT0wIHx8IHByb3BzLmFnZVszXSE9MCkgeworICAgICAgICAgICAgY2hhciBidWZmZXJbVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIXTsKKyAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKHByb3BzLmFnZSwgYnVmZmVyKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGFnZSAlcyBjYW5ub3QgYmUgZW5jb2RlZFxuIiwgYnVmZmVyKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdWludDMyX3QgdmVyc2lvbj0ocHJvcHMuYWdlWzBdPDw0KXxwcm9wcy5hZ2VbMV07CisgICAgICAgIHVwdmVjX3NldFZhbHVlKHB2LCBzdGFydCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAwLCB2ZXJzaW9uPDxVUFJPUFNfQUdFX1NISUZULCBVUFJPUFNfQUdFX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICZlcnJvckNvZGUpOworICAgIH0KKyAgICAvLyBXcml0ZSBhIG5ldyAoU2NyaXB0LCBTY3JpcHRfRXh0ZW5zaW9ucykgdmFsdWUgaWYgdGhlcmUgYXJlIFNjcmlwdF9FeHRlbnNpb25zCisgICAgLy8gYW5kIGVpdGhlciBTY3JpcHQgb3IgU2NyaXB0X0V4dGVuc2lvbnMgYXJlIG5ldyBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgIC8vIChJZiBvbmx5IFNjcmlwdCBpcyBuZXcsIHRoZW4gaXQganVzdCBjbG9iYmVyZWQgdGhlIHJlbGV2YW50IGJpdHMuKQorICAgIGlmKCAhcHJvcHMuc2N4LmlzRW1wdHkoKSAmJgorICAgICAgICAobmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX1NDUklQVCkgfHwgbmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX1NDUklQVF9FWFRFTlNJT05TKSkKKyAgICApIHsKKyAgICAgICAgVW5pY29kZVN0cmluZyBjb2RlczsgIC8vIHZlY3RvciBvZiAxNi1iaXQgVVNjcmlwdENvZGUgdmFsdWVzCisgICAgICAgIFVuaWNvZGVTZXRJdGVyYXRvciBpdGVyKHByb3BzLnNjeCk7CisgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7IGNvZGVzLmFwcGVuZCgoVUNoYXIpaXRlci5nZXRDb2RlcG9pbnQoKSk7IH0KKworICAgICAgICAvLyBTZXQgYml0IDE1IG9uIHRoZSBsYXN0IHNjcmlwdCBjb2RlLCBmb3IgdGVybWluYXRpb24uCisgICAgICAgIGludDMyX3QgbGVuZ3RoPWNvZGVzLmxlbmd0aCgpOworICAgICAgICBjb2Rlcy5zZXRDaGFyQXQobGVuZ3RoLTEsIChVQ2hhcikoY29kZXNbbGVuZ3RoLTFdfDB4ODAwMCkpOworICAgICAgICAvLyBGaW5kIHRoaXMgbGlzdCBvZiBjb2RlcyBpbiB0aGUgU2NyaXB0X0V4dGVuc2lvbnMgZGF0YSBzbyBmYXIsIG9yIGFkZCB0aGlzIGxpc3QuCisgICAgICAgIGludDMyX3QgaW5kZXg9c2NyaXB0RXh0ZW5zaW9ucy5pbmRleE9mKGNvZGVzKTsKKyAgICAgICAgaWYoaW5kZXg8MCkgeworICAgICAgICAgICAgaW5kZXg9c2NyaXB0RXh0ZW5zaW9ucy5sZW5ndGgoKTsKKyAgICAgICAgICAgIHNjcmlwdEV4dGVuc2lvbnMuYXBwZW5kKGNvZGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuY29kZSB0aGUgKFNjcmlwdCwgU2NyaXB0X0V4dGVuc2lvbnMgaW5kZXgpIHBhaXIuCisgICAgICAgIGludDMyX3Qgc2NyaXB0PXByb3BzLmdldEludFByb3AoVUNIQVJfU0NSSVBUKTsKKyAgICAgICAgdWludDMyX3Qgc2NyaXB0WDsKKyAgICAgICAgaWYoc2NyaXB0PT1VU0NSSVBUX0NPTU1PTikgeworICAgICAgICAgICAgc2NyaXB0WD1VUFJPUFNfU0NSSVBUX1hfV0lUSF9DT01NT058KHVpbnQzMl90KWluZGV4OworICAgICAgICB9IGVsc2UgaWYoc2NyaXB0PT1VU0NSSVBUX0lOSEVSSVRFRCkgeworICAgICAgICAgICAgc2NyaXB0WD1VUFJPUFNfU0NSSVBUX1hfV0lUSF9JTkhFUklURUR8KHVpbnQzMl90KWluZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU3RvcmUgYW4gYWRkaXRpb25hbCBwYWlyIG9mIDE2LWJpdCB1bml0cyBmb3IgYW4gdW51c3VhbCBtYWluIFNjcmlwdCBjb2RlCisgICAgICAgICAgICAvLyB0b2dldGhlciB3aXRoIHRoZSBTY3JpcHRfRXh0ZW5zaW9ucyBpbmRleC4KKyAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcgY29kZUluZGV4UGFpcjsKKyAgICAgICAgICAgIGNvZGVJbmRleFBhaXIuYXBwZW5kKChVQ2hhcilzY3JpcHQpLmFwcGVuZCgoVUNoYXIpaW5kZXgpOworICAgICAgICAgICAgaW5kZXg9c2NyaXB0RXh0ZW5zaW9ucy5pbmRleE9mKGNvZGVJbmRleFBhaXIpOworICAgICAgICAgICAgaWYoaW5kZXg8MCkgeworICAgICAgICAgICAgICAgIGluZGV4PXNjcmlwdEV4dGVuc2lvbnMubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgc2NyaXB0RXh0ZW5zaW9ucy5hcHBlbmQoY29kZUluZGV4UGFpcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY3JpcHRYPVVQUk9QU19TQ1JJUFRfWF9XSVRIX09USEVSfCh1aW50MzJfdClpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpZihpbmRleD5VUFJPUFNfU0NSSVBUX01BU0spIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHM6IFNjcmlwdF9FeHRlbnNpb25zIGluZGV4ZXMgb3ZlcmZsb3cgYml0IGZpZWxkXG4iKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB1cHZlY19zZXRWYWx1ZShwdiwgc3RhcnQsIGVuZCwgMCwgc2NyaXB0WCwgVVBST1BTX1NDUklQVF9YX01BU0ssICZlcnJvckNvZGUpOworICAgIH0KKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiB1bmFibGUgdG8gc2V0IHByb3BzMiB2YWx1ZXMgZm9yICUwNGxYLi4lMDRsWDogJXNcbiIsCisgICAgICAgICAgICAgICAgKGxvbmcpc3RhcnQsIChsb25nKWVuZCwgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBpbmRleGVzW1VQUk9QU19JTkRFWF9DT1VOVF09eworICAgIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyB1aW50OF90IHRyaWVCbG9ja1s0MDAwMF07CitzdGF0aWMgaW50MzJfdCB0cmllU2l6ZTsKK3N0YXRpYyB1aW50OF90IHByb3BzMlRyaWVCbG9ja1sxMDAwMDBdOworc3RhdGljIGludDMyX3QgcHJvcHMyVHJpZVNpemU7CisKK3N0YXRpYyBpbnQzMl90IHRvdGFsU2l6ZTsKKwordm9pZAorQ29yZVByb3BzQnVpbGRlcjo6YnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICB1dHJpZTJfZnJlZXplKHBUcmllLCBVVFJJRTJfMTZfVkFMVUVfQklUUywgJmVycm9yQ29kZSk7CisgICAgdHJpZVNpemU9dXRyaWUyX3NlcmlhbGl6ZShwVHJpZSwgdHJpZUJsb2NrLCBzaXplb2YodHJpZUJsb2NrKSwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiB1dHJpZTJfZnJlZXplKG1haW4gdHJpZSkrdXRyaWUyX3NlcmlhbGl6ZSgpICIKKyAgICAgICAgICAgICAgICAiZmFpbGVkOiAlcyAobGVuZ3RoICVsZClcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSwgKGxvbmcpdHJpZVNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJvcHMyVHJpZT11cHZlY19jb21wYWN0VG9VVHJpZTJXaXRoUm93SW5kZXhlcyhwdiwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5hYmxlIHRvIGJ1aWxkIHRyaWUgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllczogJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm9wczJUcmllU2l6ZT11dHJpZTJfc2VyaWFsaXplKHByb3BzMlRyaWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczJUcmllQmxvY2ssIChpbnQzMl90KXNpemVvZihwcm9wczJUcmllQmxvY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiB1dHJpZTJfZnJlZXplKGFkZGl0aW9uYWwgcHJvcGVydGllcykrdXRyaWUyX3NlcmlhbGl6ZSgpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQzMl90IHB2Um93czsKKyAgICBjb25zdCB1aW50MzJfdCAqcHZBcnJheT11cHZlY19nZXRBcnJheShwdiwgJnB2Um93cywgTlVMTCk7CisgICAgaW50MzJfdCBwdkNvdW50PXB2Um93cypVUFJPUFNfVkVDVE9SX1dPUkRTOworCisgICAgLyogcm91bmQgdXAgc2NyaXB0RXh0ZW5zaW9ucyB0byBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCisgICAgaWYoc2NyaXB0RXh0ZW5zaW9ucy5sZW5ndGgoKSYxKSB7CisgICAgICAgIHNjcmlwdEV4dGVuc2lvbnMuYXBwZW5kKChVQ2hhcikwKTsKKyAgICB9CisKKyAgICAvKiBzZXQgaW5kZXhlcyAqLworICAgIGludDMyX3Qgb2Zmc2V0PXNpemVvZihpbmRleGVzKS80OyAgICAgICAvKiB1aW50MzJfdCBvZmZzZXQgdG8gdGhlIHByb3BlcnRpZXMgdHJpZSAqLworICAgIG9mZnNldCs9dHJpZVNpemU+PjI7CisgICAgaW5kZXhlc1tVUFJPUFNfUFJPUFMzMl9JTkRFWF09ICAgICAgICAgIC8qIHNldCBpbmRleGVzIHRvIHRoZSBzYW1lIG9mZnNldHMgZm9yIGVtcHR5ICovCisgICAgaW5kZXhlc1tVUFJPUFNfRVhDRVBUSU9OU19JTkRFWF09ICAgICAgIC8qIHN0cnVjdHVyZXMgZnJvbSB0aGUgb2xkIGZvcm1hdCB2ZXJzaW9uIDMgKi8KKyAgICBpbmRleGVzW1VQUk9QU19FWENFUFRJT05TX1RPUF9JTkRFWF09ICAgLyogc28gdGhhdCBsZXNzIHJ1bnRpbWUgY29kZSBoYXMgdG8gYmUgY2hhbmdlZCAqLworICAgIGluZGV4ZXNbVVBST1BTX0FERElUSU9OQUxfVFJJRV9JTkRFWF09b2Zmc2V0OworCisgICAgb2Zmc2V0Kz1wcm9wczJUcmllU2l6ZS80OworICAgIGluZGV4ZXNbVVBST1BTX0FERElUSU9OQUxfVkVDVE9SU19JTkRFWF09b2Zmc2V0OworICAgIGluZGV4ZXNbVVBST1BTX0FERElUSU9OQUxfVkVDVE9SU19DT0xVTU5TX0lOREVYXT1VUFJPUFNfVkVDVE9SX1dPUkRTOworICAgIG9mZnNldCs9cHZDb3VudDsKKyAgICBpbmRleGVzW1VQUk9QU19TQ1JJUFRfRVhURU5TSU9OU19JTkRFWF09b2Zmc2V0OworICAgIG9mZnNldCs9c2NyaXB0RXh0ZW5zaW9ucy5sZW5ndGgoKS8yOworICAgIGluZGV4ZXNbVVBST1BTX1JFU0VSVkVEX0lOREVYXzddPW9mZnNldDsKKyAgICBpbmRleGVzW1VQUk9QU19SRVNFUlZFRF9JTkRFWF84XT1vZmZzZXQ7CisgICAgaW5kZXhlc1tVUFJPUFNfREFUQV9UT1BfSU5ERVhdPW9mZnNldDsKKyAgICB0b3RhbFNpemU9NCpvZmZzZXQ7CisKKyAgICBpbmRleGVzW1VQUk9QU19NQVhfVkFMVUVTX0lOREVYXT0KKyAgICAgICAgKCgoaW50MzJfdClVX0VBX0NPVU5ULTEpPDxVUFJPUFNfRUFfU0hJRlQpfAorICAgICAgICAoKChpbnQzMl90KVVCTE9DS19DT1VOVC0xKTw8VVBST1BTX0JMT0NLX1NISUZUKXwKKyAgICAgICAgKCgoaW50MzJfdClVU0NSSVBUX0NPREVfTElNSVQtMSkmVVBST1BTX1NDUklQVF9NQVNLKTsKKyAgICBpbmRleGVzW1VQUk9QU19NQVhfVkFMVUVTXzJfSU5ERVhdPQorICAgICAgICAoKChpbnQzMl90KVVfTEJfQ09VTlQtMSk8PFVQUk9QU19MQl9TSElGVCl8CisgICAgICAgICgoKGludDMyX3QpVV9TQl9DT1VOVC0xKTw8VVBST1BTX1NCX1NISUZUKXwKKyAgICAgICAgKCgoaW50MzJfdClVX1dCX0NPVU5ULTEpPDxVUFJPUFNfV0JfU0hJRlQpfAorICAgICAgICAoKChpbnQzMl90KVVfR0NCX0NPVU5ULTEpPDxVUFJPUFNfR0NCX1NISUZUKXwKKyAgICAgICAgKChpbnQzMl90KVVfRFRfQ09VTlQtMSk7CisKKyAgICBpZighYmVRdWlldCkgeworICAgICAgICBwdXRzKCIqIHVwcm9wcy5pY3Ugc3RhdHMgKiIpOworICAgICAgICBwcmludGYoInRyaWUgc2l6ZSBpbiBieXRlczogICAgICAgICAgICAgICAgICAgICU1dVxuIiwgKGludCl0cmllU2l6ZSk7CisgICAgICAgIHByaW50Zigic2l6ZSBpbiBieXRlcyBvZiBhZGRpdGlvbmFsIHByb3BzIHRyaWU6JTV1XG4iLCAoaW50KXByb3BzMlRyaWVTaXplKTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgYWRkaXRpb25hbCBwcm9wcyB2ZWN0b3JzOiAgICAlNXVcbiIsIChpbnQpcHZSb3dzKTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgMzItYml0IHdvcmRzIHBlciB2ZWN0b3I6ICAgICAlNXVcbiIsIFVQUk9QU19WRUNUT1JfV09SRFMpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiAxNi1iaXQgc2NyaXB0RXh0ZW5zaW9uczogICAgICU1dVxuIiwgKGludClzY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpKTsKKyAgICAgICAgcHJpbnRmKCJkYXRhIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICU2bGRcbiIsIChsb25nKXRvdGFsU2l6ZSk7CisgICAgfQorfQorCit2b2lkCitDb3JlUHJvcHNCdWlsZGVyOjp3cml0ZUNTb3VyY2VGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgaW50MzJfdCBwdlJvd3M7CisgICAgY29uc3QgdWludDMyX3QgKnB2QXJyYXk9dXB2ZWNfZ2V0QXJyYXkocHYsICZwdlJvd3MsIE5VTEwpOworICAgIGludDMyX3QgcHZDb3VudD1wdlJvd3MqVVBST1BTX1ZFQ1RPUl9XT1JEUzsKKworICAgIEZJTEUgKmY9dXNyY19jcmVhdGUocGF0aCwgInVjaGFyX3Byb3BzX2RhdGEuaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaWN1L3Rvb2xzL3VuaWNvZGUvYy9nZW5wcm9wcy9jb3JlcHJvcHNidWlsZGVyLmNwcCIpOworICAgIGlmKGY9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfRklMRV9BQ0NFU1NfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnB1dHMoIiNpZm5kZWYgSU5DTFVERURfRlJPTV9VQ0hBUl9DXG4iCisgICAgICAgICAgIiMgICBlcnJvciBUaGlzIGZpbGUgbXVzdCBiZSAjaW5jbHVkZWQgZnJvbSB1Y2hhci5jIG9ubHkuXG4iCisgICAgICAgICAgIiNlbmRpZlxuXG4iLCBmKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBVVmVyc2lvbkluZm8gZGF0YVZlcnNpb249eyIsCisgICAgICAgIGRhdGFJbmZvLmRhdGFWZXJzaW9uLCA4LCA0LAorICAgICAgICAifTtcblxuIik7CisgICAgdXNyY193cml0ZVVUcmllMkFycmF5cyhmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQxNl90IHByb3BzVHJpZV9pbmRleFslbGRdPXtcbiIsIE5VTEwsCisgICAgICAgIHBUcmllLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyU3RydWN0KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgVVRyaWUyIHByb3BzVHJpZT17XG4iLAorICAgICAgICBwVHJpZSwgInByb3BzVHJpZV9pbmRleCIsIE5VTEwsCisgICAgICAgICJ9O1xuXG4iKTsKKworICAgIHVzcmNfd3JpdGVVVHJpZTJBcnJheXMoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCBwcm9wc1ZlY3RvcnNUcmllX2luZGV4WyVsZF09e1xuIiwgTlVMTCwKKyAgICAgICAgcHJvcHMyVHJpZSwKKyAgICAgICAgIlxufTtcblxuIik7CisgICAgdXNyY193cml0ZVVUcmllMlN0cnVjdChmLAorICAgICAgICAic3RhdGljIGNvbnN0IFVUcmllMiBwcm9wc1ZlY3RvcnNUcmllPXtcbiIsCisgICAgICAgIHByb3BzMlRyaWUsICJwcm9wc1ZlY3RvcnNUcmllX2luZGV4IiwgTlVMTCwKKyAgICAgICAgIn07XG5cbiIpOworCisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDMyX3QgcHJvcHNWZWN0b3JzWyVsZF09e1xuIiwKKyAgICAgICAgcHZBcnJheSwgMzIsIHB2Q291bnQsCisgICAgICAgICJ9O1xuXG4iKTsKKyAgICBmcHJpbnRmKGYsICJzdGF0aWMgY29uc3QgaW50MzJfdCBjb3VudFByb3BzVmVjdG9ycz0lbGQ7XG4iLCAobG9uZylwdkNvdW50KTsKKyAgICBmcHJpbnRmKGYsICJzdGF0aWMgY29uc3QgaW50MzJfdCBwcm9wc1ZlY3RvcnNDb2x1bW5zPSVsZDtcbiIsIChsb25nKVVQUk9QU19WRUNUT1JfV09SRFMpOworCisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDE2X3Qgc2NyaXB0RXh0ZW5zaW9uc1slbGRdPXtcbiIsCisgICAgICAgIHNjcmlwdEV4dGVuc2lvbnMuZ2V0QnVmZmVyKCksIDE2LCBzY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpLAorICAgICAgICAifTtcblxuIik7CisKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBpbnQzMl90IGluZGV4ZXNbVVBST1BTX0lOREVYX0NPVU5UXT17IiwKKyAgICAgICAgaW5kZXhlcywgMzIsIFVQUk9QU19JTkRFWF9DT1VOVCwKKyAgICAgICAgIn07XG5cbiIpOworICAgIGZjbG9zZShmKTsKK30KKwordm9pZAorQ29yZVByb3BzQnVpbGRlcjo6d3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgaW50MzJfdCBwdlJvd3M7CisgICAgY29uc3QgdWludDMyX3QgKnB2QXJyYXk9dXB2ZWNfZ2V0QXJyYXkocHYsICZwdlJvd3MsIE5VTEwpOworICAgIGludDMyX3QgcHZDb3VudD1wdlJvd3MqVVBST1BTX1ZFQ1RPUl9XT1JEUzsKKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YT11ZGF0YV9jcmVhdGUocGF0aCwgImljdSIsICJ1cHJvcHMiLCAmZGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29weXJpZ2h0ID8gVV9DT1BZUklHSFRfU1RSSU5HIDogTlVMTCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdWRhdGFfY3JlYXRlKCVzLCB1cHJvcHMuaWN1KSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBwYXRoLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGluZGV4ZXMsIHNpemVvZihpbmRleGVzKSk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgdHJpZUJsb2NrLCB0cmllU2l6ZSk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgcHJvcHMyVHJpZUJsb2NrLCBwcm9wczJUcmllU2l6ZSk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgcHZBcnJheSwgcHZDb3VudCo0KTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBzY3JpcHRFeHRlbnNpb25zLmdldEJ1ZmZlcigpLCBzY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpKjIpOworCisgICAgbG9uZyBkYXRhTGVuZ3RoPXVkYXRhX2ZpbmlzaChwRGF0YSwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogZXJyb3IgJXMgd3JpdGluZyB0aGUgb3V0cHV0IGZpbGVcbiIsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoZGF0YUxlbmd0aCE9KGxvbmcpdG90YWxTaXplKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJ1ZGF0YV9maW5pc2godXByb3BzLmljdSkgcmVwb3J0cyAlbGQgYnl0ZXMgd3JpdHRlbiBidXQgc2hvdWxkIGJlICVsZFxuIiwKKyAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoLCAobG9uZyl0b3RhbFNpemUpOworICAgICAgICBlcnJvckNvZGU9VV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SOworICAgIH0KK30KKworUHJvcHNCdWlsZGVyICoKK2NyZWF0ZUNvcmVQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICBQcm9wc0J1aWxkZXIgKnBiPW5ldyBDb3JlUHJvcHNCdWlsZGVyKGVycm9yQ29kZSk7CisgICAgaWYocGI9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgfQorICAgIHJldHVybiBwYjsKK30KKworLyoKKyAqIEhleSwgRW1hY3MsIHBsZWFzZSBzZXQgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqCisgKi8KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy5jcHAgYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTg0ODkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuY3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgZ2VucHJvcHMuY3BwCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OWRlYzA4CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBUaGlzIHByb2dyYW0gcGFyc2VzIHRoZSBwcHVjZC50eHQgcHJlcGFyc2VkIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGUKKyogICBhbmQgd3JpdGVzIHNldmVyYWwgc291cmNlIGFuZCBiaW5hcnkgZmlsZXMgaW50byB0aGUgSUNVIHNvdXJjZSB0cmVlLgorKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJjaGFyc3RyLmgiCisjaW5jbHVkZSAiZ2VucHJvcHMuaCIKKyNpbmNsdWRlICJwcHVjZC5oIgorI2luY2x1ZGUgInRvb2x1dGlsLmgiCisjaW5jbHVkZSAidW9wdGlvbnMuaCIKKworVV9OQU1FU1BBQ0VfVVNFCisKK1VCb29sIGJlVmVyYm9zZT1GQUxTRTsKK1VCb29sIGJlUXVpZXQ9RkFMU0U7CisKK1Byb3BzQnVpbGRlcjo6UHJvcHNCdWlsZGVyKCkge30KK1Byb3BzQnVpbGRlcjo6flByb3BzQnVpbGRlcigpIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6c2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvKSB7fQordm9pZCBQcm9wc0J1aWxkZXI6OnNldEFsZ05hbWVzUmFuZ2UoVUNoYXIzMiwgVUNoYXIzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBVRXJyb3JDb2RlICYpIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6c2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJiwgY29uc3QgVW5pY29kZVNldCAmLCBVRXJyb3JDb2RlICYpIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6YnVpbGQoVUVycm9yQ29kZSAmKSB7fQordm9pZCBQcm9wc0J1aWxkZXI6OndyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqLCBVRXJyb3JDb2RlICYpIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6d3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKiwgVUJvb2wsIFVFcnJvckNvZGUgJikge30KKworZW51bSB7CisgICAgSEVMUF9ILAorICAgIEhFTFBfUVVFU1RJT05fTUFSSywKKyAgICBWRVJCT1NFLAorICAgIFFVSUVULAorICAgIENPUFlSSUdIVAorfTsKKworLyogS2VlcCB0aGVzZSB2YWx1ZXMgaW4gc3luYyB3aXRoIHRoZSBhYm92ZSBlbnVtcyAqLworc3RhdGljIFVPcHRpb24gb3B0aW9uc1tdPXsKKyAgICBVT1BUSU9OX0hFTFBfSCwKKyAgICBVT1BUSU9OX0hFTFBfUVVFU1RJT05fTUFSSywKKyAgICBVT1BUSU9OX1ZFUkJPU0UsCisgICAgVU9QVElPTl9RVUlFVCwKKyAgICBVT1BUSU9OX0NPUFlSSUdIVAorfTsKKworZXh0ZXJuIGludAorbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CisgICAgVV9NQUlOX0lOSVRfQVJHUyhhcmdjLCBhcmd2KTsKKyAgICBhcmdjPXVfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YsIExFTkdUSE9GKG9wdGlvbnMpLCBvcHRpb25zKTsKKworICAgIC8qIGVycm9yIGhhbmRsaW5nLCBwcmludGluZyB1c2FnZSBtZXNzYWdlICovCisgICAgaWYoYXJnYzwwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgImVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudCBcIiVzXCJcbiIsCisgICAgICAgICAgICBhcmd2Wy1hcmdjXSk7CisgICAgfQorICAgIGlmKGFyZ2M8MiB8fCBvcHRpb25zW0hFTFBfSF0uZG9lc09jY3VyIHx8IG9wdGlvbnNbSEVMUF9RVUVTVElPTl9NQVJLXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQnJva2VuIGludG8gY2h1bmtzIGJlY2F1c2UgdGhlIEM4OSBzdGFuZGFyZCBzYXlzIHRoZSBtaW5pbXVtCisgICAgICAgICAqIHJlcXVpcmVkIHN1cHBvcnRlZCBzdHJpbmcgbGVuZ3RoIGlzIDUwOSBieXRlcy4KKyAgICAgICAgICovCisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIlVzYWdlOiAlcyBbLW9wdGlvbnNdIHBhdGgvdG8vSUNVL3NyYy9yb290XG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiUmVhZHMgdGhlIHByZXBhcnNlZCBVQ0QgZmlsZSBwYXRoL3RvL0lDVS9zcmMvcm9vdC9zb3VyY2UvZGF0YS91bmlkYXRhL3BwdWNkLnR4dCBhbmRcbiIKKyAgICAgICAgICAgICJ3cml0ZXMgc291cmNlIGFuZCBiaW5hcnkgZGF0YSBmaWxlcyB3aXRoIHRoZSBjaGFyYWN0ZXIgcHJvcGVydGllcy5cbiIKKyAgICAgICAgICAgICIoVUNEPVVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlKVxuIgorICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgIGFyZ3ZbMF0pOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJPcHRpb25zOlxuIgorICAgICAgICAgICAgIlx0LWggb3IgLT8gb3IgLS1oZWxwICB0aGlzIHVzYWdlIHRleHRcbiIKKyAgICAgICAgICAgICJcdC12IG9yIC0tdmVyYm9zZSAgICAgdmVyYm9zZSBvdXRwdXRcbiIKKyAgICAgICAgICAgICJcdC1xIG9yIC0tcXVpZXQgICAgICAgbm8gb3V0cHV0XG4iCisgICAgICAgICAgICAiXHQtYyBvciAtLWNvcHlyaWdodCAgIGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlXG4iKTsKKyAgICAgICAgcmV0dXJuIGFyZ2M8MiA/IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUiA6IFVfWkVST19FUlJPUjsKKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIG9wdGlvbnMgdmFsdWVzICovCisgICAgYmVWZXJib3NlPW9wdGlvbnNbVkVSQk9TRV0uZG9lc09jY3VyOworICAgIGJlUXVpZXQ9b3B0aW9uc1tRVUlFVF0uZG9lc09jY3VyOworCisgICAgLyogaW5pdGlhbGl6ZSAqLworICAgIEljdVRvb2xFcnJvckNvZGUgZXJyb3JDb2RlKCJnZW5wcm9wcyIpOworICAgIExvY2FsUG9pbnRlcjxQTmFtZXNCdWlsZGVyPiBwbmFtZXNCdWlsZGVyKGNyZWF0ZVBOYW1lc0J1aWxkZXIoZXJyb3JDb2RlKSk7CisgICAgTG9jYWxQb2ludGVyPFByb3BzQnVpbGRlcj4gY29yZVByb3BzQnVpbGRlcihjcmVhdGVDb3JlUHJvcHNCdWlsZGVyKGVycm9yQ29kZSkpOworICAgIExvY2FsUG9pbnRlcjxQcm9wc0J1aWxkZXI+IGJpZGlQcm9wc0J1aWxkZXIoY3JlYXRlQmlEaVByb3BzQnVpbGRlcihlcnJvckNvZGUpKTsKKyAgICBMb2NhbFBvaW50ZXI8UHJvcHNCdWlsZGVyPiBjYXNlUHJvcHNCdWlsZGVyKGNyZWF0ZUNhc2VQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKSk7CisgICAgTG9jYWxQb2ludGVyPFByb3BzQnVpbGRlcj4gbmFtZXNQcm9wc0J1aWxkZXIoY3JlYXRlTmFtZXNQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKSk7CisgICAgaWYoZXJyb3JDb2RlLmlzRmFpbHVyZSgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHM6IHVuYWJsZSB0byBjcmVhdGUgUHJvcHNCdWlsZGVycyAtICVzXG4iLCBlcnJvckNvZGUuZXJyb3JOYW1lKCkpOworICAgICAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisgICAgfQorCisgICAgQ2hhclN0cmluZyBpY3VTcmNSb290KGFyZ3ZbMV0sIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIGljdVNvdXJjZShpY3VTcmNSb290LCBlcnJvckNvZGUpOworICAgIGljdVNvdXJjZS5hcHBlbmRQYXRoUGFydCgic291cmNlIiwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgaWN1U291cmNlRGF0YShpY3VTb3VyY2UsIGVycm9yQ29kZSk7CisgICAgaWN1U291cmNlRGF0YS5hcHBlbmRQYXRoUGFydCgiZGF0YSIsIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIHBwdWNkUGF0aChpY3VTb3VyY2VEYXRhLCBlcnJvckNvZGUpOworICAgIHBwdWNkUGF0aC5hcHBlbmRQYXRoUGFydCgidW5pZGF0YSIsIGVycm9yQ29kZSk7CisgICAgcHB1Y2RQYXRoLmFwcGVuZFBhdGhQYXJ0KCJwcHVjZC50eHQiLCBlcnJvckNvZGUpOworCisgICAgUHJlcGFyc2VkVUNEIHBwdWNkKHBwdWNkUGF0aC5kYXRhKCksIGVycm9yQ29kZSk7CisgICAgaWYoZXJyb3JDb2RlLmlzRmFpbHVyZSgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHM6IHVuYWJsZSB0byBvcGVuICVzIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgcHB1Y2RQYXRoLmRhdGEoKSwgZXJyb3JDb2RlLmVycm9yTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZS5yZXNldCgpOworICAgIH0KKworICAgIC8vIFRoZSBQTmFtZXNCdWlsZGVyIHVzZXMgcHJlcGFyc2VkIHBuYW1lc19kYXRhLmguCisgICAgcG5hbWVzQnVpbGRlci0+YnVpbGQoZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiBQTmFtZXNCdWlsZGVyOjpidWlsZCgpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIGVycm9yQ29kZS5lcnJvck5hbWUoKSk7CisgICAgICAgIHJldHVybiBlcnJvckNvZGUucmVzZXQoKTsKKyAgICB9CisgICAgcHB1Y2Quc2V0UHJvcGVydHlOYW1lcyhwbmFtZXNCdWlsZGVyLT5nZXRQcm9wZXJ0eU5hbWVzKCkpOworCisgICAgUHJlcGFyc2VkVUNEOjpMaW5lVHlwZSBsaW5lVHlwZTsKKyAgICBVbmljb2RlU2V0IG5ld1ZhbHVlczsKKyAgICB3aGlsZSgobGluZVR5cGU9cHB1Y2QucmVhZExpbmUoZXJyb3JDb2RlKSkhPVByZXBhcnNlZFVDRDo6Tk9fTElORSkgeworICAgICAgICBpZihwcHVjZC5saW5lSGFzUHJvcGVydHlWYWx1ZXMoKSkgeworICAgICAgICAgICAgY29uc3QgVW5pUHJvcHMgKnByb3BzPXBwdWNkLmdldFByb3BzKG5ld1ZhbHVlcywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGNvcmVQcm9wc0J1aWxkZXItPnNldFByb3BzKCpwcm9wcywgbmV3VmFsdWVzLCBlcnJvckNvZGUpOworICAgICAgICAgICAgYmlkaVByb3BzQnVpbGRlci0+c2V0UHJvcHMoKnByb3BzLCBuZXdWYWx1ZXMsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBjYXNlUHJvcHNCdWlsZGVyLT5zZXRQcm9wcygqcHJvcHMsIG5ld1ZhbHVlcywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIG5hbWVzUHJvcHNCdWlsZGVyLT5zZXRQcm9wcygqcHJvcHMsIG5ld1ZhbHVlcywgZXJyb3JDb2RlKTsKKyAgICAgICAgfSBlbHNlIGlmKGxpbmVUeXBlPT1QcmVwYXJzZWRVQ0Q6OlVOSUNPREVfVkVSU0lPTl9MSU5FKSB7CisgICAgICAgICAgICBjb25zdCBVVmVyc2lvbkluZm8gJnZlcnNpb249cHB1Y2QuZ2V0VW5pY29kZVZlcnNpb24oKTsKKyAgICAgICAgICAgIGNvcmVQcm9wc0J1aWxkZXItPnNldFVuaWNvZGVWZXJzaW9uKHZlcnNpb24pOworICAgICAgICAgICAgYmlkaVByb3BzQnVpbGRlci0+c2V0VW5pY29kZVZlcnNpb24odmVyc2lvbik7CisgICAgICAgICAgICBjYXNlUHJvcHNCdWlsZGVyLT5zZXRVbmljb2RlVmVyc2lvbih2ZXJzaW9uKTsKKyAgICAgICAgICAgIG5hbWVzUHJvcHNCdWlsZGVyLT5zZXRVbmljb2RlVmVyc2lvbih2ZXJzaW9uKTsKKyAgICAgICAgfSBlbHNlIGlmKGxpbmVUeXBlPT1QcmVwYXJzZWRVQ0Q6OkFMR19OQU1FU19SQU5HRV9MSU5FKSB7CisgICAgICAgICAgICBVQ2hhcjMyIHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICBpZihwcHVjZC5nZXRSYW5nZUZvckFsZ05hbWVzKHN0YXJ0LCBlbmQsIGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlPXBwdWNkLm5leHRGaWVsZCgpOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeD1wcHVjZC5uZXh0RmllbGQoKTsgIC8vIE5VTEwgaWYgdHlwZT09aGFuZ3VsCisgICAgICAgICAgICAgICAgbmFtZXNQcm9wc0J1aWxkZXItPnNldEFsZ05hbWVzUmFuZ2Uoc3RhcnQsIGVuZCwgdHlwZSwgcHJlZml4LCBlcnJvckNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGVycm9yQ29kZS5pc0ZhaWx1cmUoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wczogZXJyb3IgcGFyc2luZyBvciBzZXR0aW5nIHZhbHVlcyBmcm9tIHBwdWNkLnR4dCBsaW5lICVsZCAtICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZylwcHVjZC5nZXRMaW5lTnVtYmVyKCksIGVycm9yQ29kZS5lcnJvck5hbWUoKSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb3JlUHJvcHNCdWlsZGVyLT5idWlsZChlcnJvckNvZGUpOworICAgIGJpZGlQcm9wc0J1aWxkZXItPmJ1aWxkKGVycm9yQ29kZSk7CisgICAgY2FzZVByb3BzQnVpbGRlci0+YnVpbGQoZXJyb3JDb2RlKTsKKyAgICBuYW1lc1Byb3BzQnVpbGRlci0+YnVpbGQoZXJyb3JDb2RlKTsKKyAgICBpZihlcnJvckNvZGUuaXNGYWlsdXJlKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogZmFpbHVyZSBmaW5hbGl6aW5nIHRoZSBkYXRhIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgZXJyb3JDb2RlLmVycm9yTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZS5yZXNldCgpOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgZGF0YS4KKyAgICBDaGFyU3RyaW5nIHNvdXJjZUNvbW1vbihpY3VTb3VyY2UsIGVycm9yQ29kZSk7CisgICAgc291cmNlQ29tbW9uLmFwcGVuZFBhdGhQYXJ0KCJjb21tb24iLCBlcnJvckNvZGUpOworCisgICAgQ2hhclN0cmluZyBzb3VyY2VEYXRhSW4oaWN1U291cmNlRGF0YSwgZXJyb3JDb2RlKTsKKyAgICBzb3VyY2VEYXRhSW4uYXBwZW5kUGF0aFBhcnQoImluIiwgZXJyb3JDb2RlKTsKKworICAgIFVCb29sIHdpdGhDb3B5cmlnaHQ9b3B0aW9uc1tDT1BZUklHSFRdLmRvZXNPY2N1cjsKKworICAgIHBuYW1lc0J1aWxkZXItPndyaXRlQ1NvdXJjZUZpbGUoc291cmNlQ29tbW9uLmRhdGEoKSwgZXJyb3JDb2RlKTsKKyAgICBwbmFtZXNCdWlsZGVyLT53cml0ZUJpbmFyeURhdGEoc291cmNlRGF0YUluLmRhdGEoKSwgd2l0aENvcHlyaWdodCwgZXJyb3JDb2RlKTsKKyAgICBjb3JlUHJvcHNCdWlsZGVyLT53cml0ZUNTb3VyY2VGaWxlKHNvdXJjZUNvbW1vbi5kYXRhKCksIGVycm9yQ29kZSk7CisgICAgY29yZVByb3BzQnVpbGRlci0+d3JpdGVCaW5hcnlEYXRhKHNvdXJjZURhdGFJbi5kYXRhKCksIHdpdGhDb3B5cmlnaHQsIGVycm9yQ29kZSk7CisgICAgYmlkaVByb3BzQnVpbGRlci0+d3JpdGVDU291cmNlRmlsZShzb3VyY2VDb21tb24uZGF0YSgpLCBlcnJvckNvZGUpOworICAgIGJpZGlQcm9wc0J1aWxkZXItPndyaXRlQmluYXJ5RGF0YShzb3VyY2VEYXRhSW4uZGF0YSgpLCB3aXRoQ29weXJpZ2h0LCBlcnJvckNvZGUpOworICAgIGNhc2VQcm9wc0J1aWxkZXItPndyaXRlQ1NvdXJjZUZpbGUoc291cmNlQ29tbW9uLmRhdGEoKSwgZXJyb3JDb2RlKTsKKyAgICBjYXNlUHJvcHNCdWlsZGVyLT53cml0ZUJpbmFyeURhdGEoc291cmNlRGF0YUluLmRhdGEoKSwgd2l0aENvcHlyaWdodCwgZXJyb3JDb2RlKTsKKyAgICBuYW1lc1Byb3BzQnVpbGRlci0+d3JpdGVCaW5hcnlEYXRhKHNvdXJjZURhdGFJbi5kYXRhKCksIHdpdGhDb3B5cmlnaHQsIGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gZXJyb3JDb2RlOworfQorCisvKgorICogSGV5LCBFbWFjcywgcGxlYXNlIHNldCB0aGUgZm9sbG93aW5nOgorICoKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzLmggYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWVmMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGdlbnByb3BzLmgKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5ZGVjMTMKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKi8KKworI2lmbmRlZiBfX0dFTlBST1BTX0hfXworI2RlZmluZSBfX0dFTlBST1BTX0hfXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAicHB1Y2QuaCIKKyNpbmNsdWRlICJ1bmV3ZGF0YS5oIgorCisjZGVmaW5lIExFTkdUSE9GKGFycmF5KSAoaW50MzJfdCkoc2l6ZW9mKGFycmF5KS9zaXplb2YoKGFycmF5KVswXSkpCisKK2NsYXNzIFByb3BzQnVpbGRlciB7CitwdWJsaWM6CisgICAgUHJvcHNCdWlsZGVyKCk7CisgICAgdmlydHVhbCB+UHJvcHNCdWlsZGVyKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWxnTmFtZXNSYW5nZShVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpwcmVmaXgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BzKGNvbnN0IGljdTo6VW5pUHJvcHMgJnByb3BzLCBjb25zdCBpY3U6OlVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKK307CisKK2NsYXNzIFBOYW1lc0J1aWxkZXIgOiBwdWJsaWMgUHJvcHNCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IFByb3BlcnR5TmFtZXMgKmdldFByb3BlcnR5TmFtZXMoKSA9IDA7Cit9OworCitQTmFtZXNCdWlsZGVyICpjcmVhdGVQTmFtZXNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CitQcm9wc0J1aWxkZXIgKmNyZWF0ZUNvcmVQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKK1Byb3BzQnVpbGRlciAqY3JlYXRlQmlEaVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworUHJvcHNCdWlsZGVyICpjcmVhdGVDYXNlUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CitQcm9wc0J1aWxkZXIgKmNyZWF0ZU5hbWVzUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKKy8qIGdsb2JhbCBmbGFncyAqLworZXh0ZXJuIFVCb29sIGJlVmVyYm9zZTsKK2V4dGVybiBVQm9vbCBiZVF1aWV0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy52Y3Byb2ogYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWFiZjMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMudmNwcm9qCkBAIC0wLDAgKzEsNDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJnZW5wcm9wcyIKKwlQcm9qZWN0R1VJRD0iezZGNzQ0NjQ4LUQxNUYtNDc4QS05MEM2LTU4RTM1M0I1RERCM30iCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5ceDg2XFJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2XFJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW4mI3gwRDsmI3gwQTsiCisJCQkJT3V0cHV0cz0iLi5cLi5cLi5cYmluXCQoVGFyZ2V0RmlsZU5hbWUpIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIuXHg4NlxSZWxlYXNlL2dlbnByb3BzLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cY29tbW9uOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIKKwkJCQlUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlPSJ0cnVlIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx4ODZcUmVsZWFzZS9nZW5wcm9wcy5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlPYmplY3RGaWxlPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx4ODZcUmVsZWFzZS8iCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9Ii5ceDg2XFJlbGVhc2UvZ2VucHJvcHMuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlx4ODZcUmVsZWFzZS9nZW5wcm9wcy5wZGIiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXHg4NlxEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODZcRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW4mI3gwRDsmI3gwQTsiCisJCQkJT3V0cHV0cz0iLi5cLi5cLi5cYmluXCQoVGFyZ2V0RmlsZU5hbWUpIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIuXHg4NlxEZWJ1Zy9nZW5wcm9wcy50bGIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxjb21tb247Li5cdG9vbHV0aWwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9InRydWUiCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIKKwkJCQlUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlPSJ0cnVlIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx4ODZcRGVidWcvZ2VucHJvcHMucGNoIgorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlx4ODZcRGVidWcvIgorCQkJCU9iamVjdEZpbGU9Ii5ceDg2XERlYnVnLyIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx4ODZcRGVidWcvIgorCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9Ii5ceDg2XERlYnVnL2dlbnByb3BzLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg4NlxEZWJ1Zy9nZW5wcm9wcy5wZGIiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkJVXNlRkFUMzJXb3JrYXJvdW5kPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4NjRcUmVsZWFzZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4NjRcUmVsZWFzZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IC4uXC4uXC4uXGJpbjY0JiN4MEQ7JiN4MEE7IgorCQkJCU91dHB1dHM9Ii4uXC4uXC4uXGJpbjY0XCQoVGFyZ2V0RmlsZU5hbWUpIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIuXHg2NFxSZWxlYXNlL2dlbnByb3BzLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cY29tbW9uOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU42NDtXSU4zMjtOREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIKKwkJCQlUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlPSJ0cnVlIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx4NjRcUmVsZWFzZS9nZW5wcm9wcy5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg2NFxSZWxlYXNlLyIKKwkJCQlPYmplY3RGaWxlPSIuXHg2NFxSZWxlYXNlLyIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx4NjRcUmVsZWFzZS8iCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9Ii5ceDY0XFJlbGVhc2UvZ2VucHJvcHMuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlx4NjRcUmVsZWFzZS9nZW5wcm9wcy5wZGIiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4NjRcRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDY0XERlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgLi5cLi5cLi5cYmluNjQmI3gwRDsmI3gwQTsiCisJCQkJT3V0cHV0cz0iLi5cLi5cLi5cYmluNjRcJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDY0XERlYnVnL2dlbnByb3BzLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlx0b29sdXRpbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lONjQ7V0lOMzI7X0RFQlVHO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg2NFxEZWJ1Zy9nZW5wcm9wcy5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg2NFxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4NjRcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcRGVidWcvZ2VucHJvcHMuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5ceDY0XERlYnVnL2dlbnByb3BzLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJCVVzZUZBVDMyV29ya2Fyb3VuZD0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iYztjcHA7cmMiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW5wcm9wcy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHByb3BzMi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHN0b3JlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VucHJvcHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorCQkJPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZGNvcHkucHkgYi91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2Rjb3B5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwN2Y1NDAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2Rjb3B5LnB5CkBAIC0wLDAgKzEsMTgyIEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgZmlsZSBuYW1lOiAgdWNkY29weS5weQorIyAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisjICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisjICAgaW5kZW50YXRpb246NAorIworIyAgIGNyZWF0ZWQgb246IDIwMDlhdWcwNAorIyAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisjCisjIENvcHkgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKHVjZCkgZmlsZXMgZnJvbSBhIHRyZWUKKyMgb2YgZmlsZXMgZG93bmxvYWRlZCBmcm9tIGZ0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNS4yLjAvCisjIHRvIGEgZm9sZGVyIGxpa2UgSUNVJ3Mgc291cmNlL2RhdGEvdW5pZGF0YS8KKyMgYW5kIG1vZGlmeSBzb21lIG9mIHRoZSBmaWxlcyB0byBtYWtlIHRoZW0gbW9yZSBjb21wYWN0LgorIworIyBJbnZva2Ugd2l0aCB0d28gY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGZvciB0aGUgc291cmNlCisjIGFuZCBkZXN0aW5hdGlvbiBmb2xkZXJzLgorCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKKworX3N0cmlwX3JlID0gcmUuY29tcGlsZSgiXihbMC05YS1mQS1GXSsuKz8pICojLioiKQorX2NvZGVfcG9pbnRfcmUgPSByZS5jb21waWxlKCJccyooWzAtOWEtZkEtRl0rKVxzKjsiKQorCitkZWYgQ29weUFuZFN0cmlwV2l0aE9wdGlvbmFsTWVyZ2UocywgdCwgZG9fbWVyZ2UpOgorICBpbl9maWxlID0gb3BlbihzLCAiciIpCisgIG91dF9maWxlID0gb3Blbih0LCAidyIpCisgIGZpcnN0ID0gLTEgICMgRmlyc3QgY29kZSBwb2ludCB3aXRoIGZpcnN0X2RhdGEuCisgIGxhc3QgPSAtMSAgIyBMYXN0IGNvZGUgcG9pbnQgd2l0aCBmaXJzdF9kYXRhLgorICBmaXJzdF9kYXRhID0gIiIgICMgQ29tbW9uIGRhdGEgZm9yIGNvZGUgcG9pbnRzIFtmaXJzdC4ubGFzdF0uCisgIGZvciBsaW5lIGluIGluX2ZpbGU6CisgICAgbWF0Y2ggPSBfc3RyaXBfcmUubWF0Y2gobGluZSkKKyAgICBpZiBtYXRjaDoKKyAgICAgIGxpbmUgPSBtYXRjaC5ncm91cCgxKQorICAgIGVsc2U6CisgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgIGlmIGRvX21lcmdlOgorICAgICAgbWF0Y2ggPSBfY29kZV9wb2ludF9yZS5tYXRjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIGMgPSBpbnQobWF0Y2guZ3JvdXAoMSksIDE2KQorICAgICAgICBkYXRhID0gbGluZVttYXRjaC5lbmQoKSAtIDE6XQorICAgICAgZWxzZToKKyAgICAgICAgYyA9IC0xCisgICAgICAgIGRhdGEgPSAiIgorICAgICAgaWYgbGFzdCA+PSAwIGFuZCAoYyAhPSAobGFzdCArIDEpIG9yIGRhdGEgIT0gZmlyc3RfZGF0YSk6CisgICAgICAgICMgb3V0cHV0IHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgIGlmIGZpcnN0ID09IGxhc3Q6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFglc1xuIiAlIChmaXJzdCwgZmlyc3RfZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFguLiUwNFglc1xuIiAlIChmaXJzdCwgbGFzdCwgZmlyc3RfZGF0YSkpCisgICAgICAgIGZpcnN0ID0gLTEKKyAgICAgICAgbGFzdCA9IC0xCisgICAgICAgIGZpcnN0X2RhdGEgPSAiIgorICAgICAgaWYgYyA8IDA6CisgICAgICAgICMgbm8gZGF0YSBvbiB0aGlzIGxpbmUsIG91dHB1dCBhcyBpcworICAgICAgICBvdXRfZmlsZS53cml0ZShsaW5lKQorICAgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgZWxzZToKKyAgICAgICAgIyBkYXRhIG9uIHRoaXMgbGluZSwgc3RvcmUgZm9yIHBvc3NpYmxlIHJhbmdlIGNvbXBhY3Rpb24KKyAgICAgICAgaWYgbGFzdCA8IDA6CisgICAgICAgICAgIyBzZXQgYXMgdGhlIGZpcnN0IGxpbmUgaW4gYSBwb3NzaWJsZSByYW5nZQorICAgICAgICAgIGZpcnN0ID0gYworICAgICAgICAgIGxhc3QgPSBjCisgICAgICAgICAgZmlyc3RfZGF0YSA9IGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAjIG11c3QgYmUgYyA9PSAobGFzdCArIDEpIGFuZCBkYXRhID09IGZpcnN0X2RhdGEKKyAgICAgICAgICAjIGJlY2F1c2Ugb2YgcHJldmlvdXMgY29uZGl0aW9ucworICAgICAgICAgICMgY29udGludWUgd2l0aCB0aGUgY3VycmVudCByYW5nZQorICAgICAgICAgIGxhc3QgPSBjCisgICAgZWxzZToKKyAgICAgICMgT25seSBzdHJpcCwgZG9uJ3QgbWVyZ2U6IGp1c3Qgb3V0cHV0IHRoZSBzdHJpcHBlZCBsaW5lLgorICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgIG91dF9maWxlLndyaXRlKCJcbiIpCisgIGlmIGRvX21lcmdlIGFuZCBsYXN0ID49IDA6CisgICAgIyBvdXRwdXQgdGhlIGxhc3QgcmFuZ2UgaW4gdGhlIGZpbGUKKyAgICBpZiBmaXJzdCA9PSBsYXN0OgorICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFglc1xuIiAlIChmaXJzdCwgZmlyc3RfZGF0YSkpCisgICAgZWxzZToKKyAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYLi4lMDRYJXNcbiIgJSAoZmlyc3QsIGxhc3QsIGZpcnN0X2RhdGEpKQorICAgIGZpcnN0ID0gLTEKKyAgICBsYXN0ID0gLTEKKyAgICBmaXJzdF9kYXRhID0gIiIKKyAgaW5fZmlsZS5jbG9zZSgpCisgIG91dF9maWxlLmZsdXNoKCkKKyAgb3V0X2ZpbGUuY2xvc2UoKQorCisKK2RlZiBDb3B5QW5kU3RyaXAocywgdCk6CisgICIiIkNvcGllcyBhIGZpbGUgYW5kIHJlbW92ZXMgY29tbWVudHMgYmVoaW5kIGRhdGEgbGluZXMgYnV0IG5vdCBpbiBvdGhlcnMuIiIiCisgIENvcHlBbmRTdHJpcFdpdGhPcHRpb25hbE1lcmdlKHMsIHQsIEZhbHNlKQorCisKK2RlZiBDb3B5QW5kU3RyaXBBbmRNZXJnZShzLCB0KToKKyAgIiIiQ29waWVzIGFuZCBzdHJpcHMgYSBmaWxlIGFuZCBtZXJnZXMgbGluZXMuCisKKyAgQ29waWVzIGEgZmlsZSwgcmVtb3ZlcyBjb21tZW50cywgYW5kCisgIG1lcmdlcyBsaW5lcyB3aXRoIGFkamFjZW50IGNvZGUgcG9pbnQgcmFuZ2VzIGFuZCBpZGVudGljYWwgcGVyLWNvZGUgcG9pbnQKKyAgZGF0YSBsaW5lcyBpbnRvIG9uZSBsaW5lIHdpdGggcmFuZ2Ugc3ludGF4LgorICAiIiIKKyAgQ29weUFuZFN0cmlwV2l0aE9wdGlvbmFsTWVyZ2UocywgdCwgVHJ1ZSkKKworCitfZmlsZXMgPSB7CisgICMgU2ltcGx5IGNvcHkgdGhlc2UgZmlsZXMuCisgICJCaWRpTWlycm9yaW5nLnR4dCI6IHNodXRpbC5jb3B5LAorICAiQmlkaVRlc3QudHh0IjogKHNodXRpbC5jb3B5LCAidGVzdGRhdGEiKSwKKyAgIkJsb2Nrcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIkNhc2VGb2xkaW5nLnR4dCI6IHNodXRpbC5jb3B5LAorICAiRGVyaXZlZEFnZS50eHQiOiBzaHV0aWwuY29weSwKKyAgIkRlcml2ZWRCaWRpQ2xhc3MudHh0Ijogc2h1dGlsLmNvcHksCisgICJEZXJpdmVkSm9pbmluZ0dyb3VwLnR4dCI6IHNodXRpbC5jb3B5LAorICAiRGVyaXZlZEpvaW5pbmdUeXBlLnR4dCI6IHNodXRpbC5jb3B5LAorICAiRGVyaXZlZE51bWVyaWNWYWx1ZXMudHh0Ijogc2h1dGlsLmNvcHksCisgICJHcmFwaGVtZUJyZWFrVGVzdC50eHQiOiAoc2h1dGlsLmNvcHksICJ0ZXN0ZGF0YSIpLAorICAiTGluZUJyZWFrVGVzdC50eHQiOiAoc2h1dGlsLmNvcHksICJ0ZXN0ZGF0YSIpLAorICAiTmFtZUFsaWFzZXMudHh0Ijogc2h1dGlsLmNvcHksCisgICJOb3JtYWxpemF0aW9uQ29ycmVjdGlvbnMudHh0Ijogc2h1dGlsLmNvcHksCisgICJQcm9wZXJ0eUFsaWFzZXMudHh0Ijogc2h1dGlsLmNvcHksCisgICJQcm9wZXJ0eVZhbHVlQWxpYXNlcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIlNlbnRlbmNlQnJlYWtUZXN0LnR4dCI6IChzaHV0aWwuY29weSwgInRlc3RkYXRhIiksCisgICJTY3JpcHRFeHRlbnNpb25zLnR4dCI6IHNodXRpbC5jb3B5LAorICAiU3BlY2lhbENhc2luZy50eHQiOiBzaHV0aWwuY29weSwKKyAgIlVuaWNvZGVEYXRhLnR4dCI6IHNodXRpbC5jb3B5LAorICAiV29yZEJyZWFrVGVzdC50eHQiOiAoc2h1dGlsLmNvcHksICJ0ZXN0ZGF0YSIpLAorCisgICMgQ29weSB0aGVzZSBmaWxlcyBhbmQgcmVtb3ZlIGNvbW1lbnRzIGJlaGluZCBkYXRhIGxpbmVzIGJ1dCBub3QgaW4gb3RoZXJzLgorICAiRGVyaXZlZENvcmVQcm9wZXJ0aWVzLnR4dCI6IENvcHlBbmRTdHJpcCwKKyAgIkRlcml2ZWROb3JtYWxpemF0aW9uUHJvcHMudHh0IjogQ29weUFuZFN0cmlwLAorICAiR3JhcGhlbWVCcmVha1Byb3BlcnR5LnR4dCI6IENvcHlBbmRTdHJpcCwKKyAgIk5vcm1hbGl6YXRpb25UZXN0LnR4dCI6IENvcHlBbmRTdHJpcCwKKyAgIlByb3BMaXN0LnR4dCI6IENvcHlBbmRTdHJpcCwKKyAgIlNjcmlwdHMudHh0IjogQ29weUFuZFN0cmlwLAorICAiU2VudGVuY2VCcmVha1Byb3BlcnR5LnR4dCI6IENvcHlBbmRTdHJpcCwKKyAgIldvcmRCcmVha1Byb3BlcnR5LnR4dCI6IENvcHlBbmRTdHJpcCwKKworICAjIEFsc28gbWVyZ2UgbGluZXMgd2l0aCBhZGphY2VudCBjb2RlIHBvaW50IHJhbmdlcy4KKyAgIkVhc3RBc2lhbldpZHRoLnR4dCI6IENvcHlBbmRTdHJpcEFuZE1lcmdlLAorICAiTGluZUJyZWFrLnR4dCI6IENvcHlBbmRTdHJpcEFuZE1lcmdlCit9CisKK19maWxlX3ZlcnNpb25fcmUgPSByZS5jb21waWxlKCJeKFthLXpBLVowLTldKykiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWzAtOV0oPzpcXC5bMC05XSkqKD86ZFswLTldKyk/IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFxcLlthLXpdKykkIikKKworZGVmIG1haW4oKToKKyAgc291cmNlX3Jvb3QgPSBzeXMuYXJndlsxXQorICBkZXN0X3Jvb3QgPSBzeXMuYXJndlsyXQorICBzb3VyY2VfZmlsZXMgPSBbXQorICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhzb3VyY2Vfcm9vdCk6CisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICBzb3VyY2VfZmlsZXMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBmaWxlKSkKKyAgZmlsZXNfcHJvY2Vzc2VkID0gc2V0KCkKKyAgZm9yIHNvdXJjZV9maWxlIGluIHNvdXJjZV9maWxlczoKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc291cmNlX2ZpbGUpCisgICAgbWF0Y2ggPSBfZmlsZV92ZXJzaW9uX3JlLm1hdGNoKGJhc2VuYW1lKQorICAgIGlmIG1hdGNoOgorICAgICAgYmFzZW5hbWUgPSBtYXRjaC5ncm91cCgxKSArIG1hdGNoLmdyb3VwKDIpCisgICAgICBwcmludCBiYXNlbmFtZQorICAgIGlmIGJhc2VuYW1lIGluIF9maWxlczoKKyAgICAgIGlmIGJhc2VuYW1lIGluIGZpbGVzX3Byb2Nlc3NlZDoKKyAgICAgICAgcHJpbnQgImR1cGxpY2F0ZSBmaWxlIGJhc2VuYW1lICVzISIgJSBiYXNlbmFtZQorICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgZmlsZXNfcHJvY2Vzc2VkLmFkZChiYXNlbmFtZSkKKyAgICAgIGFjdGlvbiA9IF9maWxlc1tiYXNlbmFtZV0KKyAgICAgIGlmIGlzaW5zdGFuY2UoYWN0aW9uLCB0dXBsZSk6CisgICAgICAgIGRlc3RfZm9sZGVyID0gYWN0aW9uWzFdCisgICAgICAgIGFjdGlvbiA9IGFjdGlvblswXQorICAgICAgZWxzZToKKyAgICAgICAgZGVzdF9mb2xkZXIgPSAidW5pZGF0YSIKKyAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihkZXN0X3Jvb3QsIGRlc3RfZm9sZGVyKQorICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfcGF0aCk6IG9zLm1ha2VkaXJzKGRlc3RfcGF0aCkKKyAgICAgIGRlc3RfZmlsZSA9IG9zLnBhdGguam9pbihkZXN0X3BhdGgsIGJhc2VuYW1lKQorICAgICAgYWN0aW9uKHNvdXJjZV9maWxlLCBkZXN0X2ZpbGUpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgbWFpbigpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2RtZXJnZS5jIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWY2ODUwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkbWVyZ2UuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICB1Y2RtZXJnZS5jCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMjAwM2ZlYjIwCisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBTaW1wbGUgdG9vbCBmb3IgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgZmlsZXMgd2l0aCBzZW1pY29sb24tZGVsaW1pdGVkIGZpZWxkcy4KKyogICBNZXJnZXMgYWRqYWNlbnQsIGlkZW50aWNhbCBwZXItY29kZSBwb2ludCBkYXRhIGxpbmVzIGludG8gb25lIGxpbmUgd2l0aCByYW5nZSBzeW50YXguCisqCisqICAgVG8gY29tcGlsZSwganVzdCBjYWxsIGEgQyBjb21waWxlci9saW5rZXIgd2l0aCB0aGlzIHNvdXJjZSBmaWxlLgorKiAgIE9uIFdpbmRvd3M6IGNsIHVjZG1lcmdlLmMKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqCitza2lwV2hpdGVzcGFjZShjb25zdCBjaGFyICpzKSB7CisgICAgd2hpbGUoKnM9PScgJyB8fCAqcz09J1x0JykgeworICAgICAgICArK3M7CisgICAgfQorICAgIHJldHVybiBzOworfQorCisvKiByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBwb3NpdGlvbiBhZnRlciB0aGUgZW5kIG9mIHRoZSBkYXRhICovCitzdGF0aWMgY2hhciAqCitlbmRPZkRhdGEoY29uc3QgY2hhciAqbCkgeworICAgIGNoYXIgKmVuZDsKKyAgICBjaGFyIGM7CisKKyAgICBlbmQ9c3RyY2hyKGwsICcjJyk7CisgICAgaWYoZW5kIT1OVUxMKSB7CisgICAgICAgIC8qIGlnbm9yZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgY29tbWVudCAqLworICAgICAgICB3aGlsZShsIT1lbmQgJiYgKChjPSooZW5kLTEpKT09JyAnIHx8IGM9PSdcdCcpKSB7CisgICAgICAgICAgICAtLWVuZDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVuZD1zdHJjaHIobCwgMCk7CisgICAgfQorICAgIHJldHVybiBlbmQ7Cit9CisKK3N0YXRpYyBpbnQKK3NhbWVEYXRhKGNvbnN0IGNoYXIgKmwxLCBjb25zdCBjaGFyICpsMikgeworICAgIGNoYXIgKmVuZDEsICplbmQyOworICAgIGludCBsZW5ndGg7CisKKyAgICAvKiBmaW5kIHRoZSBmaXJzdCBzZW1pY29sb24gaW4gZWFjaCBsaW5lIC0gdGhlcmUgbXVzdCBiZSBvbmUgKi8KKyAgICBsMT1zdHJjaHIobDEsICc7JykrMTsKKyAgICBsMj1zdHJjaHIobDIsICc7JykrMTsKKworICAgIC8qIGZpbmQgdGhlIGVuZCBvZiBkYXRhOiBlbmQgb2Ygc3RyaW5nIG9yIHN0YXJ0IG9mIGNvbW1lbnQgKi8KKyAgICBlbmQxPWVuZE9mRGF0YShsMSk7CisgICAgZW5kMj1lbmRPZkRhdGEobDIpOworCisgICAgLyogY29tcGFyZSB0aGUgbGluZSBkYXRhIHBvcnRpb25zICovCisgICAgbGVuZ3RoPWVuZDEtbDE7CisgICAgcmV0dXJuIGxlbmd0aD09KGVuZDItbDIpICYmIDA9PW1lbWNtcChsMSwgbDIsIGxlbmd0aCk7Cit9CisKK2V4dGVybiBpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgeworICAgIHN0YXRpYyBjaGFyIGxpbmVbMjAwMF0sIGZpcnN0TGluZVsyMDAwXSwgbGFzdExpbmVbMjAwMF07CisgICAgY2hhciAqZW5kOworICAgIGxvbmcgZmlyc3QsIGxhc3QsIGM7CisgICAgaW50IGZpbmlzaGVkOworCisgICAgZmlyc3Q9bGFzdD0tMTsKKyAgICBmaW5pc2hlZD0wOworCisgICAgZm9yKDs7KSB7CisgICAgICAgIGlmKGdldHMobGluZSkhPU5VTEwpIHsKKyAgICAgICAgICAgIC8qIHBhcnNlIHRoZSBpbml0aWFsIGNvZGUgcG9pbnQsIGlmIGFueSAqLworICAgICAgICAgICAgYz1zdHJ0b2wobGluZSwgJmVuZCwgMTYpOworICAgICAgICAgICAgaWYoZW5kIT1saW5lICYmICpza2lwV2hpdGVzcGFjZShlbmQpPT0nOycpIHsKKyAgICAgICAgICAgICAgICAvKiBzaW5nbGUgY29kZSBwb2ludCBmb2xsb3dlZCBieSBzZW1pY29sb24gYW5kIGRhdGEsIGtlZXAgYyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjPS0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZVswXT0wOworICAgICAgICAgICAgYz0tMTsKKyAgICAgICAgICAgIGZpbmlzaGVkPTE7CisgICAgICAgIH0KKworICAgICAgICBpZihsYXN0Pj0wICYmIChjIT0obGFzdCsxKSB8fCAhc2FtZURhdGEoZmlyc3RMaW5lLCBsaW5lKSkpIHsKKyAgICAgICAgICAgIC8qIG91dHB1dCB0aGUgY3VycmVudCByYW5nZSAqLworICAgICAgICAgICAgaWYoZmlyc3Q9PWxhc3QpIHsKKyAgICAgICAgICAgICAgICAvKiB0aGVyZSB3YXMgbm8gcmFuZ2UsIGp1c3Qgb3V0cHV0IHRoZSBvbmUgbGluZSB3ZSBmb3VuZCAqLworICAgICAgICAgICAgICAgIHB1dHMoZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogdGhlcmUgd2FzIGEgcmVhbCByYW5nZSwgbWVyZ2UgdGhlaXIgbGluZXMgKi8KKyAgICAgICAgICAgICAgICBlbmQ9c3RyY2hyKGxhc3RMaW5lLCAnIycpOworICAgICAgICAgICAgICAgIGlmKGVuZD09TlVMTCkgeworICAgICAgICAgICAgICAgICAgICAvKiBubyBjb21tZW50IGluIHNlY29uZCBsaW5lICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTA0bFguLiUwNGxYJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QsIGxhc3QsICAgICAgICAgICAgLyogY29kZSBwb2ludCByYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNocihmaXJzdExpbmUsICc7JykpOy8qIGZpcnN0IGxpbmUgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgOyAqLworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihzdHJjaHIoZmlyc3RMaW5lLCAnIycpPT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNvbW1lbnQgaW4gZmlyc3QgbGluZSAqLworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUwNGxYLi4lMDRsWCVzJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QsIGxhc3QsICAgICAgICAgICAgLyogY29kZSBwb2ludCByYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNocihmaXJzdExpbmUsICc7JyksIC8qIGZpcnN0IGxpbmUgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgOyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCk7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1lbnQgZnJvbSBzZWNvbmQgbGluZSAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIGNvbW1lbnRzIGZyb20gYm90aCBsaW5lcyAqLworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUwNGxYLi4lMDRsWCVzLi4lc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbGFzdCwgICAgICAgICAgICAvKiBjb2RlIHBvaW50IHJhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2hyKGZpcnN0TGluZSwgJzsnKSwgLyogZmlyc3QgbGluZSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCA7ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdoaXRlc3BhY2UoZW5kKzEpKTsgLyogY29tbWVudCBmcm9tIHNlY29uZCBsaW5lLCBhZnRlciAjIGFuZCBzcGFjZXMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXJzdD1sYXN0PS0xOworICAgICAgICB9CisKKyAgICAgICAgaWYoYzwwKSB7CisgICAgICAgICAgICBpZihmaW5pc2hlZCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBubyBkYXRhIG9uIHRoaXMgbGluZSwgb3V0cHV0IGFzIGlzICovCisgICAgICAgICAgICBwdXRzKGxpbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogZGF0YSBvbiB0aGlzIGxpbmUsIHN0b3JlIGZvciBwb3NzaWJsZSByYW5nZSBjb21wYWN0aW9uICovCisgICAgICAgICAgICBpZihsYXN0PDApIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgYXMgdGhlIGZpcnN0IGxpbmUgaW4gYSBwb3NzaWJsZSByYW5nZSAqLworICAgICAgICAgICAgICAgIGZpcnN0PWxhc3Q9YzsKKyAgICAgICAgICAgICAgICBzdHJjcHkoZmlyc3RMaW5lLCBsaW5lKTsKKyAgICAgICAgICAgICAgICBsYXN0TGluZVswXT0wOworICAgICAgICAgICAgfSBlbHNlIC8qIG11c3QgYmUgYz09KGxhc3QrMSkgJiYgc2FtZURhdGEoKSBiZWNhdXNlIG9mIHByZXZpb3VzIGNvbmRpdGlvbnMgKi8geworICAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICBsYXN0PWM7CisgICAgICAgICAgICAgICAgc3RyY3B5KGxhc3RMaW5lLCBsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAuYyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZHN0cmlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhODY3NgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZHN0cmlwLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIHVjZHN0cmlwLmMKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAyMDAzZmViMjAKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFNpbXBsZSB0b29sIGZvciBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSBmaWxlcyB3aXRoIHNlbWljb2xvbi1kZWxpbWl0ZWQgZmllbGRzLgorKiAgIFJlbW92ZXMgY29tbWVudHMgYmVoaW5kIGRhdGEgbGluZXMgYnV0IG5vdCBpbiBvdGhlcnMuCisqCisqICAgVG8gY29tcGlsZSwganVzdCBjYWxsIGEgQyBjb21waWxlci9saW5rZXIgd2l0aCB0aGlzIHNvdXJjZSBmaWxlLgorKiAgIE9uIFdpbmRvd3M6IGNsIHVjZHN0cmlwLmMKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleHRlcm4gaW50CittYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKKyAgICBzdGF0aWMgY2hhciBsaW5lWzIwMDBdOworCisgICAgLyoKKyAgICAgKiBDYXJlZnVsOiBEbyBub3Qgc3RyaXAgYSBjb21tZW50IHJpZ2h0IGFmdGVyIHRoZQorICAgICAqIFVURi04IHNpZ25hdHVyZSBieXRlIHNlcXVlbmNlIEVGIEJCIEJGIChVK0ZFRkYgIkJPTSIpCisgICAgICogd2hpY2ggY2FuIG9jY3VyIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgVVRGLTggdGV4dCBmaWxlLgorICAgICAqLworICAgIHdoaWxlKGdldHMobGluZSkhPU5VTEwpIHsKKyAgICAgICAgY2hhciAqZW5kPXN0cnJjaHIobGluZSwgJyMnKTsKKyAgICAgICAgY2hhciBjOworICAgICAgICAvKgorICAgICAgICAgKiBBc3N1bWUgdGhhdCBhIGRhdGEgbGluZSBjb21tZW50IGlzIHByZWNlZGVkIGJ5IHNvbWUgd2hpdGUgc3BhY2UuCisgICAgICAgICAqIFRoaXMgYWxzbyBwcm90ZWN0cyBkYXRhIGxpa2UgJyMnIGluIFVDQV9SdWxlcy50eHQuCisgICAgICAgICAqLworICAgICAgICBpZihlbmQhPU5VTEwgJiYgZW5kIT1saW5lICYmICgoYz0qKGVuZC0xKSk9PScgJyB8fCBjPT0nXHQnKSkgeworICAgICAgICAgICAgLyogaWdub3JlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBjb21tZW50ICovCisgICAgICAgICAgICB3aGlsZShlbmQhPWxpbmUgJiYgKChjPSooZW5kLTEpKT09JyAnIHx8IGM9PSdcdCcpKSB7CisgICAgICAgICAgICAgICAgLS1lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZW5kPTA7CisgICAgICAgIH0KKyAgICAgICAgcHV0cyhsaW5lKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZHN0cmlwLnBsIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjEwOTc3MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZHN0cmlwLnBsCkBAIC0wLDAgKzEsNyBAQAorIyEvdXNyL2xpYi9wZXJsIC1wCisjIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgU2ltcGxlIHRvb2wgZm9yIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGVzIHdpdGggc2VtaWNvbG9uLWRlbGltaXRlZCBmaWVsZHMuCisjIFJlbW92ZXMgY29tbWVudHMgYmVoaW5kIGRhdGEgbGluZXMgYnV0IG5vdCBpbiBvdGhlcnMuCisjIFRoZSBQZXJsIG9wdGlvbiAtcCBhYm92ZSBydW5zIGEgd2hpbGUoPD4pIGxvb3AgYW5kIHByaW50cyB0aGUgZXhwcmVzc2lvbiBvdXRwdXQuCitzL14oWzAtOWEtZkEtRl0rLis/KSAqIy4qL1wxLzsKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9uYW1lc3Byb3BzYnVpbGRlci5jcHAgYi91bmljb2RlL2MvZ2VucHJvcHMvbmFtZXNwcm9wc2J1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OGRkM2UKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvbmFtZXNwcm9wc2J1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMTEzNyBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIG5hbWVzcHJvcHNidWlsZGVyLmNwcCAod2FzIGdlbm5hbWVzL2dlbm5hbWVzLmMpCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OXNlcDMwCisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBUaGlzIGJ1aWxkZXIgcmVhZHMgVW5pY29kZSBjaGFyYWN0ZXIgbmFtZXMgYW5kIGFsaWFzZXMsCisqICAgdG9rZW5pemVzIGFuZCBjb21wcmVzc2VzIHRoZW0sIGFuZCBidWlsZHMKKyogICBjb21wYWN0IGJpbmFyeSB0YWJsZXMgZm9yIHJhbmRvbS1hY2Nlc3MgbG9va3VwCisqICAgaW4gYSB1X2NoYXJOYW1lKCkgQVBJIGZ1bmN0aW9uLgorKgorKiB1bmFtZXMuaWN1IGZpbGUgZm9ybWF0IChhZnRlciBVRGF0YUluZm8gaGVhZGVyIGV0Yy4gLSBzZWUgdWRhdGEuYykKKyogKGFsbCBkYXRhIGlzIHN0YXRpYyBjb25zdCkKKyoKKyogVURhdGFJbmZvIGZpZWxkczoKKyogICBkYXRhRm9ybWF0ICJ1bmFtIgorKiAgIGZvcm1hdFZlcnNpb24gMS4wCisqICAgZGF0YVZlcnNpb24gPSBVbmljb2RlIHZlcnNpb24gZnJvbSAtdSBvciAtLXVuaWNvZGUgY29tbWFuZCBsaW5lIG9wdGlvbiwgZGVmYXVsdHMgdG8gMy4wLjAKKyoKKyogLS0gZGF0YS1iYXNlZCBuYW1lcworKiB1aW50MzJfdCB0b2tlblN0cmluZ09mZnNldCwKKyogICAgICAgICAgZ3JvdXBzT2Zmc2V0LAorKiAgICAgICAgICBncm91cFN0cmluZ09mZnNldCwKKyogICAgICAgICAgYWxnTmFtZXNPZmZzZXQ7CisqCisqIHVpbnQxNl90IHRva2VuQ291bnQ7CisqIHVpbnQxNl90IHRva2VuVGFibGVbdG9rZW5Db3VudF07CisqCisqIGNoYXIgICAgIHRva2VuU3RyaW5nc1tdOyAtLSBwYWRkZWQgdG8gZXZlbiBjb3VudAorKgorKiAtLSBzdHJpbmdzIChncm91cFN0cmluZ3MpIGFyZSB0b2tlbml6ZWQgYXMgZm9sbG93czoKKyogICBmb3IgZWFjaCBjaGFyYWN0ZXIgYworKiAgICAgICBpZihjPj10b2tlbkNvdW50KSB3cml0ZSB0aGF0IGNoYXJhY3RlciBjIGRpcmVjdGx5CisqICAgZWxzZQorKiAgICAgICB0b2tlbj10b2tlblRhYmxlW2NdOworKiAgICAgICBpZih0b2tlbj09MHhmZmZlKSAtLSBsZWFkIGJ5dGUgb2YgZG91YmxlLWJ5dGUgdG9rZW4KKyogICAgICAgICAgIHRva2VuPXRva2VuVGFibGVbYzw8OHxuZXh0IGNoYXJhY3Rlcl07CisqICAgICAgIGlmKHRva2VuPT0tMSkKKyogICAgICAgICAgIHdyaXRlIGMgZGlyZWN0bHkKKyogICAgICAgZWxzZQorKiAgICAgICAgICAgdG9rZW5TdHJpbmc9dG9rZW5TdHJpbmdzK3Rva2VuOyAodG9rZW5TdHJpbmdzPXN0YXJ0IG9mIG5hbWVzIGRhdGEgKyB0b2tlblN0cmluZ09mZnNldDspCisqICAgICAgICAgICBhcHBlbmQgemVyby10ZXJtaW5hdGVkIHRva2VuU3RyaW5nOworKgorKiAgICBEaWZmZXJlbnQgc3RyaW5ncyBmb3IgYSBjb2RlIHBvaW50IC0gbm9ybWFsIG5hbWUsIDEuMCBuYW1lLCBhbmQgSVNPIGNvbW1lbnQgLQorKiAgICBhcmUgc2VwYXJhdGVkIGJ5ICc7Jy4KKyoKKyogdWludDE2X3QgZ3JvdXBDb3VudDsKKyogc3RydWN0IHsKKyogICB1aW50MTZfdCBncm91cE1TQjsgLS0gZm9yIGEgZ3JvdXAgb2YgMzIgY2hhcmFjdGVyIG5hbWVzIHN0b3JlZCwgdGhpcyBpcyBjb2RlIHBvaW50Pj41CisqICAgdWludDE2X3Qgb2Zmc2V0SGlnaDsgLS0gZ3JvdXAgc3RyaW5ncyBhcmUgYXQgc3RhcnQgb2YgbmFtZXMgZGF0YSArIGdyb3VwU3RyaW5nc09mZnNldCArIHRoaXMgMzIgYml0LW9mZnNldAorKiAgIHVpbnQxNl90IG9mZnNldExvdzsKKyogfSBncm91cFRhYmxlW2dyb3VwQ291bnRdOworKgorKiBjaGFyICAgICBncm91cFN0cmluZ3NbXTsgLS0gcGFkZGVkIHRvIDQtY291bnQKKyoKKyogLS0gVGhlIGFjdHVhbCwgdG9rZW5pemVkIGdyb3VwIHN0cmluZ3MgYXJlIG5vdCB6ZXJvLXRlcm1pbmF0ZWQgYmVjYXVzZQorKiAgIHRoYXQgd291bGQgdGFrZSB1cCB0b28gbXVjaCBzcGFjZS4KKyogICBJbnN0ZWFkLCB0aGV5IGFyZSBwcmVjZWVkZWQgYnkgdGhlaXIgbGVuZ3RoLCB3cml0dGVuIGluIGEgdmFyaWFibGUtbGVuZ3RoIHNlcXVlbmNlOgorKiAgIEZvciBlYWNoIG9mIHRoZSAzMiBncm91cCBzdHJpbmdzLCBvbmUgb3IgdHdvIG5pYmJsZXMgYXJlIHN0b3JlZCBmb3IgaXRzIGxlbmd0aC4KKyogICBOaWJibGVzICg0LWJpdCB2YWx1ZXMsIGhhbGYtYnl0ZXMpIGFyZSByZWFkIE1TQiBmaXJzdC4KKyogICBBIG5pYmJsZSB3aXRoIGEgdmFsdWUgb2YgMC4uMTEgZGlyZWN0bHkgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgc3RyaW5nLgorKiAgIEEgbmliYmxlIG4gd2l0aCBhIHZhbHVlIG9mIDEyLi4xNSBpcyBhIGxlYWQgbmliYmxlIGFuZCBmb3JtcyBhIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyBuaWJibGUgbQorKiAgIGJ5ICgoKG4tMTIpPDw0KXxtKSsxMiwgcmVhY2hpbmcgdmFsdWVzIG9mIDEyLi43NS4KKyogICBUaGVzZSBsZW5ndGhzIGFyZSBzZXF1ZW50aWFsbHkgZm9yIGVhY2ggdG9rZW5pemVkIHN0cmluZywgbm90IGZvciB0aGUgZGUtdG9rZW5pemVkIHJlc3VsdC4KKyogICBGb3IgdGhlIGRlLXRva2VuaXppbmcsIHNlZSB0b2tlbiBkZXNjcmlwdGlvbiBhYm92ZTsgdGhlIHN0cmluZ3MgaW1tZWRpYXRlbHkgZm9sbG93IHRoZQorKiAgIDMyIGxlbmd0aHMuCisqCisqIC0tIGFsZ29yaXRobWljIG5hbWVzCisqCisqIHR5cGVkZWYgc3RydWN0IEFsZ29yaXRobWljUmFuZ2UgeworKiAgICAgdWludDMyX3QgcmFuZ2VTdGFydCwgcmFuZ2VFbmQ7CisqICAgICB1aW50OF90IGFsZ29yaXRobVR5cGUsIGFsZ29yaXRobVZhcmlhbnQ7CisqICAgICB1aW50MTZfdCByYW5nZVNpemU7CisqIH0gQWxnb3JpdGhtaWNSYW5nZTsKKyoKKyogdWludDMyX3QgYWxnUmFuZ2VzQ291bnQ7IC0tIG51bWJlciBvZiBkYXRhIGJsb2NrcyBmb3IgcmFuZ2VzIG9mCisqICAgICAgICAgICAgICAgYWxnb3JpdGhtaWMgbmFtZXMgKFVuaWNvZGUgMy4wLjA6IDMsIGhhcmRjb2RlZCBpbiBnZW5uYW1lcykKKyoKKyogc3RydWN0IHsKKyogICAgIEFsZ29yaXRobWljUmFuZ2UgYWxnUmFuZ2U7CisqICAgICB1aW50OF90IGFsZ1JhbmdlRGF0YVtdOyAtLSBwYWRkZWQgdG8gNC1jb3VudCBleGNlcHQgaW4gbGFzdCByYW5nZQorKiB9IGFsZ1Jhbmdlc1thbGdOYW1lc0NvdW50XTsKKyogLS0gbm90IGEgcmVhbCBhcnJheSBiZWNhdXNlIGVhY2ggcGFydCBoYXMgYSBkaWZmZXJlbnQgc2l6ZQorKiAgICBvZiBhbGdSYW5nZS5yYW5nZVNpemUgKGluY2x1ZGluZyBBbGdvcml0aG1pY1JhbmdlKQorKgorKiAtLSBhbGdvcml0aG1pYyByYW5nZSB0eXBlczoKKyoKKyogMCBOYW1lcyBhcmUgZm9ybWVkIGZyb20gYSBzdHJpbmcgcHJlZml4IHRoYXQgaXMgc3RvcmVkIGluCisqICAgdGhlIGFsZ1JhbmdlRGF0YSAoemVyby10ZXJtaW5hdGVkKSwgZm9sbG93ZWQgYnkgdGhlIFVuaWNvZGUgY29kZSBwb2ludAorKiAgIG9mIHRoZSBjaGFyYWN0ZXIgaW4gaGV4YWRlY2ltYWwgZGlnaXRzOworKiAgIGFsZ1JhbmdlLmFsZ29yaXRobVZhcmlhbnQgZGlnaXRzIGFyZSB3cml0dGVuCisqCisqIDEgTmFtZXMgYXJlIGZvcm1lZCBieSBjYWxjdWxhdGluZyBtb2R1bG8tZmFjdG9ycyBvZiB0aGUgY29kZSBwb2ludCB2YWx1ZSBhcyBmb2xsb3dzOgorKiAgIGFsZ1JhbmdlLmFsZ29yaXRobVZhcmlhbnQgaXMgdGhlIGNvdW50IG9mIG1vZHVsbyBmYWN0b3JzCisqICAgYWxnUmFuZ2VEYXRhIGNvbnRhaW5zCisqICAgICAgIHVpbnQxNl90IGZhY3RvcnNbYWxnUmFuZ2UuYWxnb3JpdGhtVmFyaWFudF07CisqICAgICAgIGNoYXIgc3RyaW5nc1tdOworKiAgIHRoZSBmaXJzdCB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIGlzIHdyaXR0ZW4gYXMgdGhlIHByZWZpeDsgdGhlbjoKKyoKKyogICBUaGUgcmFuZ2VTdGFydCBpcyBzdWJ0cmFjdGVkOyB3aXRoIHRoZSBkaWZmZXJlbmNlLCBoZXJlICJjb2RlIjoKKyogICBmb3IoaT1hbGdSYW5nZS5hbGdvcml0aG1WYXJpYW50LTEgdG8gMCBzdGVwIC0xKQorKiAgICAgICBpbmRleFtpXT1jb2RlJWZhY3RvcltpXTsKKyogICAgICAgY29kZS89ZmFjdG9yW2ldOworKgorKiAgIFRoZSBzdHJpbmdzIGFmdGVyIHRoZSBwcmVmaXggYXJlIHNob3J0IHBpZWNlcyB0aGF0IGFyZSB0aGVuIGFwcGVuZGVkIHRvIHRoZSByZXN1bHQKKyogICBhY2NvcmRpbmcgdG8gaW5kZXhbMC4uYWxnUmFuZ2UuYWxnb3JpdGhtVmFyaWFudC0xXS4KKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9wdXRpbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdGEuaCIKKyNpbmNsdWRlICJjaGFyc3RyLmgiCisjaW5jbHVkZSAiY21lbW9yeS5oIgorI2luY2x1ZGUgImNzdHJpbmcuaCIKKyNpbmNsdWRlICJnZW5wcm9wcy5oIgorI2luY2x1ZGUgInBwdWNkLmgiCisjaW5jbHVkZSAidWFycnNvcnQuaCIKKyNpbmNsdWRlICJ1YXNzZXJ0LmgiCisjaW5jbHVkZSAidW5ld2RhdGEuaCIKKyNpbmNsdWRlICJ1b3B0aW9ucy5oIgorCisjZGVmaW5lIFNUUklOR19TVE9SRV9TSVpFIDIwMDAwMDAKKyNkZWZpbmUgR1JPVVBfU1RPUkVfU0laRSA1MDAwCisKKyNkZWZpbmUgR1JPVVBfU0hJRlQgNQorI2RlZmluZSBMSU5FU19QRVJfR1JPVVAgKDFVTDw8R1JPVVBfU0hJRlQpCisjZGVmaW5lIEdST1VQX01BU0sgKExJTkVTX1BFUl9HUk9VUC0xKQorCisjZGVmaW5lIE1BWF9MSU5FX0NPVU5UIDUwMDAwCisjZGVmaW5lIE1BWF9XT1JEX0NPVU5UIDIwMDAwCisjZGVmaW5lIE1BWF9HUk9VUF9DT1VOVCA1MDAwCisKKyNkZWZpbmUgTkFNRV9TRVBBUkFUT1JfQ0hBUiAnOycKKworLyogZ2VuZXJhdG9yIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworVV9OQU1FU1BBQ0VfVVNFCisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIFVEYXRhSW5mbyBkYXRhSW5mbz17CisgICAgc2l6ZW9mKFVEYXRhSW5mbyksCisgICAgMCwKKworICAgIFVfSVNfQklHX0VORElBTiwKKyAgICBVX0NIQVJTRVRfRkFNSUxZLAorICAgIHNpemVvZihVQ2hhciksCisgICAgMCwKKworICAgIHsweDc1LCAweDZlLCAweDYxLCAweDZkfSwgICAgIC8qIGRhdGFGb3JtYXQ9InVuYW0iICovCisgICAgezEsIDAsIDAsIDB9LCAgICAgICAgICAgICAgICAgLyogZm9ybWF0VmVyc2lvbiAqLworICAgIHszLCAwLCAwLCAwfSAgICAgICAgICAgICAgICAgIC8qIGRhdGFWZXJzaW9uICovCit9OworCitzdGF0aWMgdWludDhfdCBzdHJpbmdTdG9yZVtTVFJJTkdfU1RPUkVfU0laRV0sCisgICAgICAgICAgICAgICBncm91cFN0b3JlW0dST1VQX1NUT1JFX1NJWkVdLAorICAgICAgICAgICAgICAgbGluZUxlbmd0aHNbTElORVNfUEVSX0dST1VQXTsKKworc3RhdGljIHVpbnQzMl90IGxpbmVUb3A9MCwgZ3JvdXBCb3R0b20sIHdvcmRCb3R0b209U1RSSU5HX1NUT1JFX1NJWkUsIGxpbmVMZW5ndGhzVG9wOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDMyX3QgY29kZTsKKyAgICBpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90ICpzOworfSBMaW5lOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50MzJfdCB3ZWlnaHQ7IC8qIC0oY29zdCBmb3IgdG9rZW4pICsgKG51bWJlciBvZiBvY2N1cmVuY2VzKSAqIChsZW5ndGgtMSkgKi8KKyAgICBpbnQxNl90IGNvdW50OworICAgIGludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgKnM7Cit9IFdvcmQ7CisKK3N0YXRpYyBMaW5lIGxpbmVzW01BWF9MSU5FX0NPVU5UXTsKK3N0YXRpYyBXb3JkIHdvcmRzW01BWF9XT1JEX0NPVU5UXTsKKworc3RhdGljIHVpbnQzMl90IGxpbmVDb3VudD0wLCB3b3JkQ291bnQ9MDsKKworc3RhdGljIGludDE2X3QgbGVhZEJ5dGVDb3VudDsKKworI2RlZmluZSBMRUFEQllURV9MSU1JVCAxNgorCitzdGF0aWMgaW50MTZfdCB0b2tlbnNbTEVBREJZVEVfTElNSVQqMjU2XTsKK3N0YXRpYyB1aW50MzJfdCB0b2tlbkNvdW50OworCisvKiB0aGUgc3RydWN0dXJlIGZvciBhbGdvcml0aG1pYyBuYW1lcyBuZWVkcyB0byBiZSA0LWFsaWduZWQgKi8KK3N0cnVjdCBBbGdvcml0aG1pY1JhbmdlIHsKKyAgICBVQ2hhcjMyIHN0YXJ0LCBlbmQ7CisgICAgdWludDhfdCB0eXBlLCB2YXJpYW50OworICAgIHVpbnQxNl90IHNpemU7Cit9OworCitjbGFzcyBOYW1lc1Byb3BzQnVpbGRlciA6IHB1YmxpYyBQcm9wc0J1aWxkZXIgeworcHVibGljOgorICAgIE5hbWVzUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB+TmFtZXNQcm9wc0J1aWxkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BzKGNvbnN0IFVuaVByb3BzICYsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHNldEFsZ05hbWVzUmFuZ2UoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqcHJlZml4LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgQ2hhclN0cmluZyBhbGdSYW5nZXM7CisgICAgaW50MzJfdCBjb3VudEFsZ1JhbmdlczsKK307CisKK05hbWVzUHJvcHNCdWlsZGVyOjpOYW1lc1Byb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpCisgICAgICAgIDogY291bnRBbGdSYW5nZXMoMCkgeworICAgIGZvcihpbnQgaT0wOyBpPDI1NjsgKytpKSB7CisgICAgICAgIHRva2Vuc1tpXT0wOworICAgIH0KK30KKworTmFtZXNQcm9wc0J1aWxkZXI6On5OYW1lc1Byb3BzQnVpbGRlcigpIHsKK30KKwordm9pZAorTmFtZXNQcm9wc0J1aWxkZXI6OnNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKSB7CisgICAgdXBydl9tZW1jcHkoZGF0YUluZm8uZGF0YVZlcnNpb24sIHZlcnNpb24sIDQpOworfQorCisvKiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorcGFyc2VOYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludDE2X3QgbGVuZ3RoKTsKKworc3RhdGljIGludDE2X3QKK3NraXBOb2lzZShjb25zdCBjaGFyICpsaW5lLCBpbnQxNl90IHN0YXJ0LCBpbnQxNl90IGxpbWl0KTsKKworc3RhdGljIGludDE2X3QKK2dldFdvcmQoY29uc3QgY2hhciAqbGluZSwgaW50MTZfdCBzdGFydCwgaW50MTZfdCBsaW1pdCk7CisKK3N0YXRpYyB2b2lkCitjb21wcmVzcyhVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCitzdGF0aWMgdm9pZAorY29tcHJlc3NMaW5lcyh2b2lkKTsKKworc3RhdGljIGludDE2X3QKK2NvbXByZXNzTGluZSh1aW50OF90ICpzLCBpbnQxNl90IGxlbmd0aCwgaW50MTZfdCAqcEdyb3VwVG9wKTsKKworc3RhdGljIGludDMyX3QKK2NvbXBhcmVXb3Jkcyhjb25zdCB2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICp3b3JkMSwgY29uc3Qgdm9pZCAqd29yZDIpOworCitzdGF0aWMgaW50MTZfdAorZmluZFRva2VuKHVpbnQ4X3QgKnMsIGludDE2X3QgbGVuZ3RoKTsKKworc3RhdGljIFdvcmQgKgorZmluZFdvcmQoY29uc3QgY2hhciAqcywgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgV29yZCAqCithZGRXb3JkKGNvbnN0IGNoYXIgKnMsIGludDE2X3QgbGVuZ3RoKTsKKworc3RhdGljIHZvaWQKK2NvdW50V29yZChXb3JkICp3b3JkKTsKKworc3RhdGljIHZvaWQKK2FkZExpbmUoVUNoYXIzMiBjb2RlLCBjb25zdCBjaGFyICpuYW1lc1tdLCBpbnQxNl90IGxlbmd0aHNbXSwgaW50MTZfdCBjb3VudCk7CisKK3N0YXRpYyB2b2lkCithZGRHcm91cCh1aW50MzJfdCBncm91cE1TQiwgdWludDhfdCAqc3RyaW5ncywgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgdWludDMyX3QKK2FkZFRva2VuKHVpbnQ4X3QgKnMsIGludDE2X3QgbGVuZ3RoKTsKKworc3RhdGljIHZvaWQKK2FwcGVuZExpbmVMZW5ndGgoaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgdm9pZAorYXBwZW5kTGluZUxlbmd0aE5pYmJsZSh1aW50OF90IG5pYmJsZSk7CisKK3N0YXRpYyB1aW50OF90ICoKK2FsbG9jTGluZShpbnQzMl90IGxlbmd0aCk7CisKK3N0YXRpYyB1aW50OF90ICoKK2FsbG9jV29yZCh1aW50MzJfdCBsZW5ndGgpOworCisvKiBwYXJzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkCitOYW1lc1Byb3BzQnVpbGRlcjo6c2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJnByb3BzLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisgICAgaWYoIW5ld1ZhbHVlcy5jb250YWlucyhVQ0hBUl9OQU1FKSAmJiAhbmV3VmFsdWVzLmNvbnRhaW5zKFBQVUNEX05BTUVfQUxJQVMpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBVX0FTU0VSVChwcm9wcy5zdGFydD09cHJvcHMuZW5kKTsKKworICAgIGNvbnN0IGNoYXIgKm5hbWVzWzRdPXsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICAgIGludDE2X3QgbGVuZ3Roc1s0XT17IDAsIDAsIDAsIDAgfTsKKworICAgIC8qIGdldCB0aGUgY2hhcmFjdGVyIG5hbWUgKi8KKyAgICBpZihwcm9wcy5uYW1lIT1OVUxMKSB7CisgICAgICAgIG5hbWVzWzBdPXByb3BzLm5hbWU7CisgICAgICAgIGxlbmd0aHNbMF09KGludDE2X3QpdXBydl9zdHJsZW4ocHJvcHMubmFtZSk7CisgICAgICAgIHBhcnNlTmFtZShuYW1lc1swXSwgbGVuZ3Roc1swXSk7CisgICAgfQorCisgICAgQ2hhclN0cmluZyBidWZmZXI7CisgICAgaWYocHJvcHMubmFtZUFsaWFzIT1OVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIE9ubHkgdXNlICJjb3JyZWN0aW9uIiBhbGlhc2VzIGZvciBub3csIGZyb20gVW5pY29kZSA2LjEgTmFtZUFsaWFzZXMudHh0IHdpdGggMyBmaWVsZHMgcGVyIGxpbmUuCisgICAgICAgICAqIFRPRE86IFdvcmsgb24gdGlja2V0ICM4OTYzIHRvIGRlYWwgd2l0aCBtdWx0aXBsZSB0eXBlOmFsaWFzIHBhaXJzIHBlciBjaGFyYWN0ZXIuCisgICAgICAgICAqLworICAgICAgICBjb25zdCBjaGFyICpjb3JyPXVwcnZfc3Ryc3RyKHByb3BzLm5hbWVBbGlhcywgImNvcnJlY3Rpb249Iik7CisgICAgICAgIGlmKGNvcnIhPU5VTEwpIHsKKyAgICAgICAgICAgIGNvcnIrPTExOyAgLy8gc2tpcCAiY29ycmVjdGlvbj0iCisgICAgICAgICAgICBjb25zdCBjaGFyICpsaW1pdD11cHJ2X3N0cmNocihjb3JyLCAnLCcpOworICAgICAgICAgICAgaWYobGltaXQhPU5VTEwpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNvcnIsIGxpbWl0LWNvcnIsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgbmFtZXNbM109YnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBsZW5ndGhzWzNdPShpbnQxNl90KShsaW1pdC1jb3JyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZXNbM109Y29ycjsKKyAgICAgICAgICAgICAgICBsZW5ndGhzWzNdPShpbnQxNl90KXVwcnZfc3RybGVuKGNvcnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VOYW1lKG5hbWVzWzNdLCBsZW5ndGhzWzNdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFkZExpbmUocHJvcHMuc3RhcnQsIG5hbWVzLCBsZW5ndGhzLCBMRU5HVEhPRihuYW1lcykpOworfQorCitzdGF0aWMgdm9pZAorcGFyc2VOYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludDE2X3QgbGVuZ3RoKSB7CisgICAgaW50MTZfdCBzdGFydD0wLCBsaW1pdCwgd29yZExlbmd0aC8qLCBwcmV2U3RhcnQ9LTEqLzsKKyAgICBXb3JkICp3b3JkOworCisgICAgd2hpbGUoc3RhcnQ8bGVuZ3RoKSB7CisgICAgICAgIC8qIHNraXAgYW55ICJub2lzZSIgY2hhcmFjdGVycyAqLworICAgICAgICBsaW1pdD1za2lwTm9pc2UobmFtZSwgc3RhcnQsIGxlbmd0aCk7CisgICAgICAgIGlmKHN0YXJ0PGxpbWl0KSB7CisgICAgICAgICAgICAvKnByZXZTdGFydD0tMTsqLworICAgICAgICAgICAgc3RhcnQ9bGltaXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoc3RhcnQ9PWxlbmd0aCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgYSB3b3JkIGFuZCBhZGQgaXQgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gMSAqLworICAgICAgICBsaW1pdD1nZXRXb3JkKG5hbWUsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICB3b3JkTGVuZ3RoPShpbnQxNl90KShsaW1pdC1zdGFydCk7CisgICAgICAgIGlmKHdvcmRMZW5ndGg+MSkgeworICAgICAgICAgICAgd29yZD1maW5kV29yZChuYW1lK3N0YXJ0LCB3b3JkTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmKHdvcmQ9PU5VTEwpIHsKKyAgICAgICAgICAgICAgICB3b3JkPWFkZFdvcmQobmFtZStzdGFydCwgd29yZExlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudFdvcmQod29yZCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlcmUgd2FzIGEgd29yZCBiZWZvcmUgdGhpcworICAgICAgICAgKiAod2l0aCBubyBub2lzZSBpbiBiZXR3ZWVuKSwgdGhlbiBhZGQgdGhlIHBhaXIgb2Ygd29yZHMsIHRvbworICAgICAgICAgKi8KKyAgICAgICAgaWYocHJldlN0YXJ0IT0tMSkgeworICAgICAgICAgICAgd29yZExlbmd0aD1saW1pdC1wcmV2U3RhcnQ7CisgICAgICAgICAgICB3b3JkPWZpbmRXb3JkKG5hbWUrcHJldlN0YXJ0LCB3b3JkTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmKHdvcmQ9PU5VTEwpIHsKKyAgICAgICAgICAgICAgICB3b3JkPWFkZFdvcmQobmFtZStwcmV2U3RhcnQsIHdvcmRMZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnRXb3JkKHdvcmQpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvKnByZXZTdGFydD1zdGFydDsqLworICAgICAgICBzdGFydD1saW1pdDsKKyAgICB9Cit9CisKK3N0YXRpYyBVQm9vbAoraXNXb3JkQ2hhcihjaGFyIGMpIHsKKyAgICByZXR1cm4gKCdBJzw9YyAmJiBjPD0nSScpIHx8IC8qIEVCQ0RJQy1zYWZlIGNoZWNrIGZvciBsZXR0ZXJzICovCisgICAgICAgICAgICgnSic8PWMgJiYgYzw9J1InKSB8fAorICAgICAgICAgICAoJ1MnPD1jICYmIGM8PSdaJykgfHwKKworICAgICAgICAgICAoJzAnPD1jICYmIGM8PSc5Jyk7Cit9CisKK3N0YXRpYyBpbnQxNl90Citza2lwTm9pc2UoY29uc3QgY2hhciAqbGluZSwgaW50MTZfdCBzdGFydCwgaW50MTZfdCBsaW1pdCkgeworICAgIC8qIHNraXAgYW55dGhpbmcgdGhhdCBpcyBub3QgcGFydCBvZiBhIHdvcmQgaW4gdGhpcyBzZW5zZSAqLworICAgIHdoaWxlKHN0YXJ0PGxpbWl0ICYmICFpc1dvcmRDaGFyKGxpbmVbc3RhcnRdKSkgeworICAgICAgICArK3N0YXJ0OworICAgIH0KKworICAgIHJldHVybiBzdGFydDsKK30KKworc3RhdGljIGludDE2X3QKK2dldFdvcmQoY29uc3QgY2hhciAqbGluZSwgaW50MTZfdCBzdGFydCwgaW50MTZfdCBsaW1pdCkgeworICAgIGNoYXIgYz0wOyAvKiBpbml0aWFsaXplIHRvIGF2b2lkIGEgY29tcGlsZXIgd2FybmluZyBhbHRob3VnaCB0aGUgY29kZSB3YXMgc2FmZSAqLworCisgICAgLyogYSB1bmljb2RlIGNoYXJhY3RlciBuYW1lIHdvcmQgY29uc2lzdHMgb2YgQS1aMC05ICovCisgICAgd2hpbGUoc3RhcnQ8bGltaXQgJiYgaXNXb3JkQ2hhcihsaW5lW3N0YXJ0XSkpIHsKKyAgICAgICAgKytzdGFydDsKKyAgICB9CisKKyAgICAvKiBpbmNsdWRlIGEgZm9sbG93aW5nIHNwYWNlIG9yIGRhc2ggKi8KKyAgICBpZihzdGFydDxsaW1pdCAmJiAoKGM9bGluZVtzdGFydF0pPT0nICcgfHwgYz09Jy0nKSkgeworICAgICAgICArK3N0YXJ0OworICAgIH0KKworICAgIHJldHVybiBzdGFydDsKK30KKwordm9pZAorTmFtZXNQcm9wc0J1aWxkZXI6OnNldEFsZ05hbWVzUmFuZ2UoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCAgLy8gbnVtYmVyIG9mIGhleCBkaWdpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIC8qIG1vZHVsbyBmYWN0b3JzLCBtYXhpbXVtIDggKi8KKyAgICAvKiAzIGZhY3RvcnM6IDE5LCAyMSwgMjgsIG1vc3QtdG8tbGVhc3Qtc2lnbmlmaWNhbnQgKi8KKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgaGFuZ3VsRmFjdG9yc1szXT17CisgICAgICAgIDE5LCAyMSwgMjgKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgamFtb1tdPQorICAgICAgICAiSEFOR1VMIFNZTExBQkxFIFwwIgorCisgICAgICAgICJHXDBHR1wwTlwwRFwwRERcMFJcME1cMEJcMEJCXDAiCisgICAgICAgICJTXDBTU1wwXDBKXDBKSlwwQ1wwS1wwVFwwUFwwSFwwIgorCisgICAgICAgICJBXDBBRVwwWUFcMFlBRVwwRU9cMEVcMFlFT1wwWUVcME9cMCIKKyAgICAgICAgIldBXDBXQUVcME9FXDBZT1wwVVwwV0VPXDBXRVwwV0lcMCIKKyAgICAgICAgIllVXDBFVVwwWUlcMElcMCIKKworICAgICAgICAiXDBHXDBHR1wwR1NcME5cME5KXDBOSFwwRFwwTFwwTEdcMExNXDAiCisgICAgICAgICJMQlwwTFNcMExUXDBMUFwwTEhcME1cMEJcMEJTXDAiCisgICAgICAgICJTXDBTU1wwTkdcMEpcMENcMEtcMFRcMFBcMEgiOworCisgICAgaW50MzJfdCBwcmVmaXhMZW5ndGg9MDsKKyAgICBBbGdvcml0aG1pY1JhbmdlIHJhbmdlOworICAgIHVwcnZfbWVtc2V0KCZyYW5nZSwgMCwgc2l6ZW9mKEFsZ29yaXRobWljUmFuZ2UpKTsKKyAgICBpbnQzMl90IHJhbmdlU2l6ZT0oaW50MzJfdClzaXplb2YoQWxnb3JpdGhtaWNSYW5nZSk7CisgICAgcmFuZ2Uuc3RhcnQ9c3RhcnQ7CisgICAgcmFuZ2UuZW5kPWVuZDsKKyAgICBpZigwPT11cHJ2X3N0cmNtcCh0eXBlLCAiaGFuIikpIHsKKyAgICAgICAgcmFuZ2UudHlwZT0wOworICAgICAgICByYW5nZS52YXJpYW50PSBlbmQ8PTB4ZmZmZiA/IDQgOiA1OworICAgICAgICBwcmVmaXhMZW5ndGg9dXBydl9zdHJsZW4ocHJlZml4KSsxOworICAgICAgICByYW5nZVNpemUrPXByZWZpeExlbmd0aDsKKyAgICB9IGVsc2UgaWYoMD09dXBydl9zdHJjbXAodHlwZSwgImhhbmd1bCIpKSB7CisgICAgICAgIHJhbmdlLnR5cGU9MTsKKyAgICAgICAgcmFuZ2UudmFyaWFudD0odWludDhfdClMRU5HVEhPRihoYW5ndWxGYWN0b3JzKTsKKyAgICAgICAgcmFuZ2VTaXplKz0oaW50MzJfdClzaXplb2YoaGFuZ3VsRmFjdG9ycyk7CisgICAgICAgIHJhbmdlU2l6ZSs9KGludDMyX3Qpc2l6ZW9mKGphbW8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHVua25vd24gYWxnbmFtZXNyYW5nZSB0eXBlICclcydcbiIsIHByZWZpeCk7CisgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50MzJfdCBwYWRkaW5nTGVuZ3RoPXBhZGRpbmdMZW5ndGg9cmFuZ2VTaXplJjM7CisgICAgaWYocGFkZGluZ0xlbmd0aCkgeworICAgICAgICBwYWRkaW5nTGVuZ3RoPTQtcGFkZGluZ0xlbmd0aDsKKyAgICAgICAgcmFuZ2VTaXplKz1wYWRkaW5nTGVuZ3RoOworICAgIH0KKyAgICByYW5nZS5zaXplPSh1aW50MTZfdClyYW5nZVNpemU7CisgICAgYWxnUmFuZ2VzLmFwcGVuZCgoY2hhciAqKSZyYW5nZSwgKGludDMyX3Qpc2l6ZW9mKEFsZ29yaXRobWljUmFuZ2UpLCBlcnJvckNvZGUpOworICAgIGlmKHJhbmdlLnR5cGU9PTApIHsgIC8vIGhhbgorICAgICAgICBhbGdSYW5nZXMuYXBwZW5kKHByZWZpeCwgcHJlZml4TGVuZ3RoLCBlcnJvckNvZGUpOworICAgIH0gZWxzZSAvKiB0eXBlPT0xICovIHsgIC8vIGhhbmd1bAorICAgICAgICBhbGdSYW5nZXMuYXBwZW5kKChjaGFyICopaGFuZ3VsRmFjdG9ycywgKGludDMyX3Qpc2l6ZW9mKGhhbmd1bEZhY3RvcnMpLCBlcnJvckNvZGUpOworICAgICAgICBhbGdSYW5nZXMuYXBwZW5kKGphbW8sIChpbnQzMl90KXNpemVvZihqYW1vKSwgZXJyb3JDb2RlKTsKKyAgICB9CisgICAgd2hpbGUocGFkZGluZ0xlbmd0aCkgeworICAgICAgICBhbGdSYW5nZXMuYXBwZW5kKChjaGFyKTB4YWEsIGVycm9yQ29kZSk7CisgICAgICAgIC0tcGFkZGluZ0xlbmd0aDsKKyAgICB9CisgICAgKytjb3VudEFsZ1JhbmdlczsKK30KKworLyogY29tcHJlc3NpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQKK2NvbXByZXNzKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIHVpbnQzMl90IGksIGxldHRlckNvdW50OworICAgIGludDE2X3Qgd29yZE51bWJlcjsKKworICAgIC8qIHNvcnQgdGhlIHdvcmRzIGluIHJldmVyc2Ugb3JkZXIgYnkgd2VpZ2h0ICovCisgICAgdXBydl9zb3J0QXJyYXkod29yZHMsIHdvcmRDb3VudCwgc2l6ZW9mKFdvcmQpLAorICAgICAgICAgICAgICAgICAgIGNvbXBhcmVXb3JkcywgTlVMTCwgRkFMU0UsICZlcnJvckNvZGUpOworCisgICAgLyogcmVtb3ZlIHRoZSB3b3JkcyB0aGF0IGRvIG5vdCBzYXZlIGFueXRoaW5nICovCisgICAgd2hpbGUod29yZENvdW50PjAgJiYgd29yZHNbd29yZENvdW50LTFdLndlaWdodDwxKSB7CisgICAgICAgIC0td29yZENvdW50OworICAgIH0KKworICAgIC8qIGNvdW50IHRoZSBsZXR0ZXJzIGluIHRoZSB0b2tlbiByYW5nZSAqLworICAgIGxldHRlckNvdW50PTA7CisgICAgZm9yKGk9TEVBREJZVEVfTElNSVQ7IGk8MjU2OyArK2kpIHsKKyAgICAgICAgaWYodG9rZW5zW2ldPT0tMSkgeworICAgICAgICAgICAgKytsZXR0ZXJDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZighYmVRdWlldCkgeworICAgICAgICBwcmludGYoIm51bWJlciBvZiBsZXR0ZXJzIHVzZWQgaW4gdGhlIG5hbWVzOiAlZFxuIiwgKGludClsZXR0ZXJDb3VudCk7CisgICAgfQorCisgICAgLyogZG8gd2UgbmVlZCBkb3VibGUtYnl0ZSB0b2tlbnM/ICovCisgICAgaWYod29yZENvdW50K2xldHRlckNvdW50PD0yNTYpIHsKKyAgICAgICAgLyogbm8sIHNpbmdsZS1ieXRlIHRva2VucyBhcmUgZW5vdWdoICovCisgICAgICAgIGxlYWRCeXRlQ291bnQ9MDsKKyAgICAgICAgZm9yKGk9MCwgd29yZE51bWJlcj0wOyB3b3JkTnVtYmVyPChpbnQxNl90KXdvcmRDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZih0b2tlbnNbaV0hPS0xKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zW2ldPXdvcmROdW1iZXI7CisgICAgICAgICAgICAgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigidG9rZW5zWzB4JTAzeF06IHdvcmQlOGxkIFwiJS4qc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpaSwgKGxvbmcpd29yZHNbd29yZE51bWJlcl0ud2VpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3dvcmROdW1iZXJdLmxlbmd0aCwgd29yZHNbd29yZE51bWJlcl0ucyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrd29yZE51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlbkNvdW50PWk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHRva2VucyB0aGF0IG5lZWQgdHdvIHRva2VuIGJ5dGVzCisgICAgICAgICAqIGdldCB0aGVpciB3ZWlnaHQgcmVkdWNlZCBieSB0aGVpciBjb3VudAorICAgICAgICAgKiBiZWNhdXNlIHRoZXkgc2F2ZSBsZXNzLgorICAgICAgICAgKi8KKyAgICAgICAgdG9rZW5Db3VudD0yNTYtbGV0dGVyQ291bnQ7CisgICAgICAgIGZvcihpPXRva2VuQ291bnQ7IGk8d29yZENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHdvcmRzW2ldLndlaWdodC09d29yZHNbaV0uY291bnQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBzb3J0IHRoZXNlIHdvcmRzIGluIHJldmVyc2Ugb3JkZXIgYnkgd2VpZ2h0ICovCisgICAgICAgIGVycm9yQ29kZT1VX1pFUk9fRVJST1I7CisgICAgICAgIHVwcnZfc29ydEFycmF5KHdvcmRzK3Rva2VuQ291bnQsIHdvcmRDb3VudC10b2tlbkNvdW50LCBzaXplb2YoV29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlV29yZHMsIE5VTEwsIEZBTFNFLCAmZXJyb3JDb2RlKTsKKworICAgICAgICAvKiByZW1vdmUgdGhlIHdvcmRzIHRoYXQgZG8gbm90IHNhdmUgYW55dGhpbmcgKi8KKyAgICAgICAgd2hpbGUod29yZENvdW50PjAgJiYgd29yZHNbd29yZENvdW50LTFdLndlaWdodDwxKSB7CisgICAgICAgICAgICAtLXdvcmRDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGhvdyBtYW55IHRva2VucyBhbmQgbGVhZCBieXRlcyBkbyB3ZSBoYXZlIG5vdz8gKi8KKyAgICAgICAgdG9rZW5Db3VudD13b3JkQ291bnQrbGV0dGVyQ291bnQrKExFQURCWVRFX0xJTUlULTEpOworICAgICAgICAvKgorICAgICAgICAgKiBhZGp1c3QgdXB3YXJkcyB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0CisgICAgICAgICAqIGRvdWJsZS1ieXRlIHRva2VucyBtdXN0IG5vdAorICAgICAgICAgKiB1c2UgTkFNRV9TRVBBUkFUT1JfQ0hBUiBhcyBhIHNlY29uZCBieXRlCisgICAgICAgICAqLworICAgICAgICB0b2tlbkNvdW50Kz0odG9rZW5Db3VudC0yNTYrMjU0KS8yNTU7CisKKyAgICAgICAgbGVhZEJ5dGVDb3VudD0oaW50MTZfdCkodG9rZW5Db3VudD4+OCk7CisgICAgICAgIGlmKGxlYWRCeXRlQ291bnQ8TEVBREJZVEVfTElNSVQpIHsKKyAgICAgICAgICAgIC8qIGFkanVzdCBmb3IgdGhlIHJlYWwgbnVtYmVyIG9mIGxlYWQgYnl0ZXMgKi8KKyAgICAgICAgICAgIHRva2VuQ291bnQtPShMRUFEQllURV9MSU1JVC0xKS1sZWFkQnl0ZUNvdW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbGltaXQgdGhlIG51bWJlciBvZiBsZWFkIGJ5dGVzICovCisgICAgICAgICAgICBsZWFkQnl0ZUNvdW50PUxFQURCWVRFX0xJTUlULTE7CisgICAgICAgICAgICB0b2tlbkNvdW50PUxFQURCWVRFX0xJTUlUKjI1NjsKKyAgICAgICAgICAgIHdvcmRDb3VudD10b2tlbkNvdW50LWxldHRlckNvdW50LShMRUFEQllURV9MSU1JVC0xKTsKKyAgICAgICAgICAgIC8qIGFkanVzdCBhZ2FpbiB0byBza2lwIGRvdWJsZS1ieXRlIHRva2VucyB3aXRoICc7JyAqLworICAgICAgICAgICAgd29yZENvdW50LT0odG9rZW5Db3VudC0yNTYrMjU0KS8yNTU7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXQgdG9rZW4gMCB0byB3b3JkIDAgKi8KKyAgICAgICAgdG9rZW5zWzBdPTA7CisgICAgICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICAgICAgcHJpbnRmKCJ0b2tlbnNbMHgwMDBdOiB3b3JkJThsZCBcIiUuKnNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpd29yZHNbMF0ud2VpZ2h0LAorICAgICAgICAgICAgICAgICAgICB3b3Jkc1swXS5sZW5ndGgsIHdvcmRzWzBdLnMpOworICAgICAgICB9CisgICAgICAgIHdvcmROdW1iZXI9MTsKKworICAgICAgICAvKiBzZXQgdGhlIGxlYWQgYnl0ZSB0b2tlbnMgKi8KKyAgICAgICAgZm9yKGk9MTsgKGludDE2X3QpaTw9bGVhZEJ5dGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICB0b2tlbnNbaV09LTI7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXQgdGhlIHRva2VucyAqLworICAgICAgICBmb3IoOyBpPDI1NjsgKytpKSB7CisgICAgICAgICAgICAvKiBpZiBzdG9yZTEwTmFtZXMgdGhlbiB0aGUgcGFyc2VyIHNldCB0b2tlbnNbTkFNRV9TRVBBUkFUT1JfQ0hBUl09LTEgKi8KKyAgICAgICAgICAgIGlmKHRva2Vuc1tpXSE9LTEpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNbaV09d29yZE51bWJlcjsKKyAgICAgICAgICAgICAgICBpZihiZVZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0b2tlbnNbMHglMDN4XTogd29yZCU4bGQgXCIlLipzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClpLCAobG9uZyl3b3Jkc1t3b3JkTnVtYmVyXS53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbd29yZE51bWJlcl0ubGVuZ3RoLCB3b3Jkc1t3b3JkTnVtYmVyXS5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyt3b3JkTnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogY29udGludWUgYWJvdmUgMjU1IHdoZXJlIHRoZXJlIGFyZSBubyBsZXR0ZXJzICovCisgICAgICAgIGZvcig7ICh1aW50MzJfdCl3b3JkTnVtYmVyPHdvcmRDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZigoaSYweGZmKT09TkFNRV9TRVBBUkFUT1JfQ0hBUikgeworICAgICAgICAgICAgICAgIHRva2Vuc1tpXT0tMTsgLyogZG8gbm90IHVzZSBOQU1FX1NFUEFSQVRPUl9DSEFSIGFzIGEgc2Vjb25kIHRva2VuIGJ5dGUgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9rZW5zW2ldPXdvcmROdW1iZXI7CisgICAgICAgICAgICAgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigidG9rZW5zWzB4JTAzeF06IHdvcmQlOGxkIFwiJS4qc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpaSwgKGxvbmcpd29yZHNbd29yZE51bWJlcl0ud2VpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3dvcmROdW1iZXJdLmxlbmd0aCwgd29yZHNbd29yZE51bWJlcl0ucyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrd29yZE51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlbkNvdW50PWk7IC8qIHNob3VsZCBiZSBhbHJlYWR5IHRva2VuQ291bnQ9e2kgb3IgaSsxfSAqLworICAgIH0KKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIGxlYWQgYnl0ZXM6ICVkXG4iLCBsZWFkQnl0ZUNvdW50KTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2Ygc2luZ2xlLWJ5dGUgdG9rZW5zOiAlbHVcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZykyNTYtbGV0dGVyQ291bnQtbGVhZEJ5dGVDb3VudCk7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIHRva2VuczogJWx1XG4iLCAodW5zaWduZWQgbG9uZyl0b2tlbkNvdW50KTsKKyAgICB9CisKKyAgICBjb21wcmVzc0xpbmVzKCk7Cit9CisKK3N0YXRpYyB2b2lkCitjb21wcmVzc0xpbmVzKCkgeworICAgIExpbmUgKmxpbmU9TlVMTDsKKyAgICB1aW50MzJfdCBpPTAsIGluTGluZSwgb3V0TGluZT0weGZmZmZmZmZmIC8qICh1aW50MzJfdCkoLTEpICovLAorICAgICAgICAgICAgIGdyb3VwTVNCPTB4ZmZmZiwgbGluZUNvdW50MjsKKyAgICBpbnQxNl90IGdyb3VwVG9wPTA7CisKKyAgICAvKiBzdG9yZSB0aGUgZ3JvdXBzIGxpa2UgbGluZXMsIHdpdGggY29tcHJlc3NlZCBkYXRhIGFmdGVyIHJhdyBzdHJpbmdzICovCisgICAgZ3JvdXBCb3R0b209bGluZVRvcDsKKyAgICBsaW5lQ291bnQyPWxpbmVDb3VudDsKKyAgICBsaW5lQ291bnQ9MDsKKworICAgIC8qIGxvb3Agb3ZlciBhbGwgbGluZXMgKi8KKyAgICB3aGlsZShpPGxpbmVDb3VudDIpIHsKKyAgICAgICAgbGluZT1saW5lcytpKys7CisgICAgICAgIGluTGluZT1saW5lLT5jb2RlOworCisgICAgICAgIC8qIHNlZ21lbnQgdGhlIGxpbmVzIHRvIGdyb3VwcyBvZiAzMiAqLworICAgICAgICBpZihpbkxpbmU+PkdST1VQX1NISUZUIT1ncm91cE1TQikgeworICAgICAgICAgICAgLyogZmluaXNoIHRoZSBjdXJyZW50IGdyb3VwIHdpdGggZW1wdHkgbGluZXMgKi8KKyAgICAgICAgICAgIHdoaWxlKCgrK291dExpbmUmR1JPVVBfTUFTSykhPTApIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRMaW5lTGVuZ3RoKDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzdG9yZSB0aGUgZ3JvdXAgbGlrZSBhIGxpbmUgKi8KKyAgICAgICAgICAgIGlmKGdyb3VwVG9wPjApIHsKKyAgICAgICAgICAgICAgICBpZihncm91cFRvcD5HUk9VUF9TVE9SRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IGdyb3VwIHN0b3JlIG92ZXJmbG93XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZEdyb3VwKGdyb3VwTVNCLCBncm91cFN0b3JlLCBncm91cFRvcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHN0YXJ0IHRoZSBuZXcgZ3JvdXAgKi8KKyAgICAgICAgICAgIGxpbmVMZW5ndGhzVG9wPTA7CisgICAgICAgICAgICBncm91cFRvcD0wOworICAgICAgICAgICAgZ3JvdXBNU0I9aW5MaW5lPj5HUk9VUF9TSElGVDsKKyAgICAgICAgICAgIG91dExpbmU9KGluTGluZSZ+R1JPVVBfTUFTSyktMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyaXRlIGVtcHR5IGxpbmVzIGJldHdlZW4gdGhlIHByZXZpb3VzIGxpbmUgaW4gdGhlIGdyb3VwIGFuZCB0aGlzIG9uZSAqLworICAgICAgICB3aGlsZSgrK291dExpbmU8aW5MaW5lKSB7CisgICAgICAgICAgICBhcHBlbmRMaW5lTGVuZ3RoKDApOworICAgICAgICB9CisKKyAgICAgICAgLyogd3JpdGUgY2hhcmFjdGVycyBhbmQgdG9rZW5zIGZvciB0aGlzIGxpbmUgKi8KKyAgICAgICAgYXBwZW5kTGluZUxlbmd0aChjb21wcmVzc0xpbmUobGluZS0+cywgbGluZS0+bGVuZ3RoLCAmZ3JvdXBUb3ApKTsKKyAgICB9CisKKyAgICAvKiBmaW5pc2ggYW5kIHN0b3JlIHRoZSBsYXN0IGdyb3VwICovCisgICAgaWYobGluZSAmJiBncm91cE1TQiE9MHhmZmZmKSB7CisgICAgICAgIC8qIGZpbmlzaCB0aGUgY3VycmVudCBncm91cCB3aXRoIGVtcHR5IGxpbmVzICovCisgICAgICAgIHdoaWxlKCgrK291dExpbmUmR1JPVVBfTUFTSykhPTApIHsKKyAgICAgICAgICAgIGFwcGVuZExpbmVMZW5ndGgoMCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzdG9yZSB0aGUgZ3JvdXAgbGlrZSBhIGxpbmUgKi8KKyAgICAgICAgaWYoZ3JvdXBUb3A+MCkgeworICAgICAgICAgICAgaWYoZ3JvdXBUb3A+R1JPVVBfU1RPUkVfU0laRSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IGdyb3VwIHN0b3JlIG92ZXJmbG93XG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZEdyb3VwKGdyb3VwTVNCLCBncm91cFN0b3JlLCBncm91cFRvcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZighYmVRdWlldCkgeworICAgICAgICBwcmludGYoIm51bWJlciBvZiBncm91cHM6ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpbGluZUNvdW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQxNl90Citjb21wcmVzc0xpbmUodWludDhfdCAqcywgaW50MTZfdCBsZW5ndGgsIGludDE2X3QgKnBHcm91cFRvcCkgeworICAgIGludDE2X3Qgc3RhcnQsIGxpbWl0LCB0b2tlbiwgZ3JvdXBUb3A9KnBHcm91cFRvcDsKKworICAgIHN0YXJ0PTA7CisgICAgZG8geworICAgICAgICAvKiB3cml0ZSBhbnkgIm5vaXNlIiBjaGFyYWN0ZXJzICovCisgICAgICAgIGxpbWl0PXNraXBOb2lzZSgoY2hhciAqKXMsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICB3aGlsZShzdGFydDxsaW1pdCkgeworICAgICAgICAgICAgZ3JvdXBTdG9yZVtncm91cFRvcCsrXT1zW3N0YXJ0KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYoc3RhcnQ9PWxlbmd0aCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiB3cml0ZSBhIHdvcmQsIGFzIHRva2VuIG9yIGRpcmVjdGx5ICovCisgICAgICAgIGxpbWl0PWdldFdvcmQoKGNoYXIgKilzLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgaWYobGltaXQtc3RhcnQ9PTEpIHsKKyAgICAgICAgICAgIGdyb3VwU3RvcmVbZ3JvdXBUb3ArK109c1tzdGFydCsrXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRva2VuPWZpbmRUb2tlbihzK3N0YXJ0LCAoaW50MTZfdCkobGltaXQtc3RhcnQpKTsKKyAgICAgICAgICAgIGlmKHRva2VuIT0tMSkgeworICAgICAgICAgICAgICAgIGlmKHRva2VuPjB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdG9yZVtncm91cFRvcCsrXT0odWludDhfdCkodG9rZW4+PjgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncm91cFN0b3JlW2dyb3VwVG9wKytdPSh1aW50OF90KXRva2VuOworICAgICAgICAgICAgICAgIHN0YXJ0PWxpbWl0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZShzdGFydDxsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICBncm91cFN0b3JlW2dyb3VwVG9wKytdPXNbc3RhcnQrK107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZShzdGFydDxsZW5ndGgpOworCisgICAgbGVuZ3RoPShpbnQxNl90KShncm91cFRvcC0qcEdyb3VwVG9wKTsKKyAgICAqcEdyb3VwVG9wPWdyb3VwVG9wOworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQzMl90Citjb21wYXJlV29yZHMoY29uc3Qgdm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqd29yZDEsIGNvbnN0IHZvaWQgKndvcmQyKSB7CisgICAgLyogcmV2ZXJzZSBzb3J0IGJ5IHdvcmQgd2VpZ2h0ICovCisgICAgcmV0dXJuICgoV29yZCAqKXdvcmQyKS0+d2VpZ2h0LSgoV29yZCAqKXdvcmQxKS0+d2VpZ2h0OworfQorCit2b2lkCitOYW1lc1Byb3BzQnVpbGRlcjo6YnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBpZighYmVRdWlldCkgeworICAgICAgICBwdXRzKCIqIHVuYW1lcy5pY3Ugc3RhdHMgKiIpOworICAgICAgICBwcmludGYoInNpemUgb2YgYWxsIG5hbWVzIGluIHRoZSBkYXRhYmFzZTogJWx1XG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGluZVRvcCk7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIG5hbWVkIFVuaWNvZGUgY2hhcmFjdGVyczogJWx1XG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGluZUNvdW50KTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2Ygd29yZHMgaW4gdGhlIGRpY3Rpb25hcnkgZnJvbSB0aGVzZSBuYW1lczogJWx1XG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpd29yZENvdW50KTsKKyAgICB9CisgICAgY29tcHJlc3MoZXJyb3JDb2RlKTsKK30KKworLyogZ2VuZXJhdGUgb3V0cHV0IGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZAorTmFtZXNQcm9wc0J1aWxkZXI6OndyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YT11ZGF0YV9jcmVhdGUocGF0aCwgImljdSIsICJ1bmFtZXMiLCAmZGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29weXJpZ2h0ID8gVV9DT1BZUklHSFRfU1RSSU5HIDogTlVMTCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdWRhdGFfY3JlYXRlKCVzLCB1bmFtZXMuaWN1KSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBwYXRoLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQxNl90IGdyb3VwV29yZHNbM107CisgICAgdWludDMyX3QgaSwgZ3JvdXBUb3A9bGluZVRvcCwgc2l6ZSwKKyAgICAgICAgICAgICB0b2tlblN0cmluZ09mZnNldCwgZ3JvdXBzT2Zmc2V0LCBncm91cFN0cmluZ09mZnNldCwgYWxnTmFtZXNPZmZzZXQ7CisgICAgbG9uZyBkYXRhTGVuZ3RoOworICAgIGludDE2X3QgdG9rZW47CisKKyAgICAvKiBmaXJzdCwgc2VlIGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQsIGFuZCBwcmVwYXJlIHRoZSB0b2tlbiBzdHJpbmdzICovCisgICAgZm9yKGk9MDsgaTx0b2tlbkNvdW50OyArK2kpIHsKKyAgICAgICAgdG9rZW49dG9rZW5zW2ldOworICAgICAgICBpZih0b2tlbiE9LTEgJiYgdG9rZW4hPS0yKSB7CisgICAgICAgICAgICB0b2tlbnNbaV09KGludDE2X3QpKGFkZFRva2VuKHdvcmRzW3Rva2VuXS5zLCB3b3Jkc1t0b2tlbl0ubGVuZ3RoKS1ncm91cFRvcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlcXVpcmVkIHBhZGRpbmcgZm9yIGRhdGEgc3dhcHBpbmc6CisgICAgICogVGhlIHRva2VuIHRhYmxlIHVuZGVyZ29lcyBhIHBlcm11dGF0aW9uIGR1cmluZyBkYXRhIHN3YXBwaW5nIHdoZW4gdGhlCisgICAgICogaW5wdXQgYW5kIG91dHB1dCBjaGFyc2V0cyBhcmUgZGlmZmVyZW50LgorICAgICAqIFRoZSB0b2tlbiB0YWJsZSBjYW5ub3QgZ3JvdyBkdXJpbmcgc3dhcHBpbmcsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgKiB0aGUgdGFibGUgaXMgbG9uZyBlbm91Z2ggZm9yIHN1Y2Nlc3NmdWwgaW4tcGxhY2UgcGVybXV0YXRpb24uCisgICAgICoKKyAgICAgKiBXZSBzaW1wbHkgcm91bmQgdXAgdG9rZW5Db3VudCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAyNTYgdG8gYWNjb3VudCBmb3IKKyAgICAgKiBhbGwgcG9zc2libGUgcGVybXV0YXRpb25zLgorICAgICAqCisgICAgICogQW4gb3B0aW1pemF0aW9uIGlzIHBvc3NpYmxlIGlmIHdlIG9ubHkgZXZlciBzd2FwIGJldHdlZW4gQVNDSUkgYW5kIEVCQ0RJQzoKKyAgICAgKgorICAgICAqIElmIHRva2VuQ291bnQ+MjU2LCB0aGVuIGEgc2VtaWNvbG9uIChOQU1FX1NFUEFSQVRPUl9DSEFSKSBpcyB1c2VkCisgICAgICogYW5kIHdpbGwgYmUgc3dhcHBlZCBiZXR3ZWVuIEFTQ0lJIGFuZCBFQkNESUMgYmV0d2VlbgorICAgICAqIHBvc2l0aW9ucyAweDNiIChBU0NJSSBzZW1pY29sb24pIGFuZCAweDVlIChFQkNESUMgc2VtaWNvbG9uKS4KKyAgICAgKiBUaGlzIHNob3VsZCBiZSB0aGUgb25seSAtMSBlbnRyeSBpbiB0b2tlbnNbMjU2Li41MTFdIG9uIHdoaWNoIHRoZSBkYXRhCisgICAgICogc3dhcHBlciBiYXNlcyBpdHMgdHJhaWwgYnl0ZSBwZXJtdXRhdGlvbiBtYXAgKHRyYWlsTWFwW10pLgorICAgICAqCisgICAgICogSXQgd291bGQgYmUgc3VmZmljaWVudCB0byBpbmNyZWFzZSB0b2tlbkNvdW50IHNvIHRoYXQgaXRzIGxvd2VyIDggYml0cworICAgICAqIGFyZSBhdCBsZWFzdCAweDVlKzEgdG8gbWFrZSByb29tIGZvciBzd2FwcGluZyBiZXR3ZWVuIHRoZSB0d28gc2VtaWNvbG9ucy4KKyAgICAgKiBGb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDB4NWUsIHRoZSB0cmFpbCBieXRlIHBlcm11dGF0aW9uIG1hcCAodHJhaWxNYXBbXSkKKyAgICAgKiBzaG91bGQgYWx3YXlzIGJlIGFuIGlkZW50aXR5IG1hcCwgd2hlcmUgd2UgZG8gbm90IG5lZWQgYWRkaXRpb25hbCByb29tLgorICAgICAqLworICAgIGk9dG9rZW5Db3VudDsKKyAgICB0b2tlbkNvdW50PSh0b2tlbkNvdW50KzB4ZmYpJn4weGZmOworICAgIGlmKCFiZVF1aWV0ICYmIGk8dG9rZW5Db3VudCkgeworICAgICAgICBwcmludGYoIm51bWJlciBvZiB0b2tlbnNbXSBwYWRkaW5nIGVudHJpZXMgZm9yIGRhdGEgc3dhcHBpbmc6ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHRva2VuQ291bnQtaSkpOworICAgIH0KKyAgICBmb3IoOyBpPHRva2VuQ291bnQ7ICsraSkgeworICAgICAgICBpZigoaSYweGZmKT09TkFNRV9TRVBBUkFUT1JfQ0hBUikgeworICAgICAgICAgICAgdG9rZW5zW2ldPS0xOyAvKiBkbyBub3QgdXNlIE5BTUVfU0VQQVJBVE9SX0NIQVIgYXMgYSBzZWNvbmQgdG9rZW4gYnl0ZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW5zW2ldPTA7IC8qIHVudXNlZCB0b2tlbiBmb3IgcGFkZGluZyAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGRhdGEgaW5jbHVkaW5nOgorICAgICAqIC0gdGhlIG9mZnNldCB0byB0aGUgdG9rZW4gc3RyaW5ncywgdWludDMyX3QgKDQpCisgICAgICogLSB0aGUgb2Zmc2V0IHRvIHRoZSBncm91cCB0YWJsZSwgdWludDMyX3QgKDQpCisgICAgICogLSB0aGUgb2Zmc2V0IHRvIHRoZSBncm91cCBzdHJpbmdzLCB1aW50MzJfdCAoNCkKKyAgICAgKiAtIHRoZSBvZmZzZXQgdG8gdGhlIGFsZ29yaXRobWljIG5hbWVzLCB1aW50MzJfdCAoNCkKKyAgICAgKgorICAgICAqIC0gdGhlIG51bWJlciBvZiB0b2tlbnMsIHVpbnQxNl90ICgyKQorICAgICAqIC0gdGhlIHRva2VuIHRhYmxlLCB1aW50MTZfdFt0b2tlbkNvdW50XSAoMip0b2tlbkNvdW50KQorICAgICAqCisgICAgICogLSB0aGUgdG9rZW4gc3RyaW5ncywgZWFjaCB6ZXJvLXRlcm1pbmF0ZWQgKHRva2VuU2l6ZT0obGluZVRvcC1ncm91cFRvcCkpLCAyLXBhZGRlZAorICAgICAqCisgICAgICogLSB0aGUgbnVtYmVyIG9mIGdyb3VwcywgdWludDE2X3QgKDIpCisgICAgICogLSB0aGUgZ3JvdXAgdGFibGUsIHsgdWludDE2X3QgZ3JvdXBNU0IsIHVpbnQxNl90IG9mZnNldEhpZ2gsIHVpbnQxNl90IG9mZnNldExvdyB9WzYqZ3JvdXBDb3VudF0KKyAgICAgKgorICAgICAqIC0gdGhlIGdyb3VwIHN0cmluZ3MgKGdyb3VwVG9wLWdyb3VwQm90dG9tKSwgMi1wYWRkZWQKKyAgICAgKgorICAgICAqIC0gdGhlIHNpemUgb2YgdGhlIGRhdGEgZm9yIHRoZSBhbGdvcml0aG1pYyBuYW1lcworICAgICAqLworICAgIHRva2VuU3RyaW5nT2Zmc2V0PTQrNCs0KzQrMisyKnRva2VuQ291bnQ7CisgICAgZ3JvdXBzT2Zmc2V0PSh0b2tlblN0cmluZ09mZnNldCsobGluZVRvcC1ncm91cFRvcCkrMSkmfjE7CisgICAgZ3JvdXBTdHJpbmdPZmZzZXQ9Z3JvdXBzT2Zmc2V0KzIrNipsaW5lQ291bnQ7CisgICAgYWxnTmFtZXNPZmZzZXQ9KGdyb3VwU3RyaW5nT2Zmc2V0Kyhncm91cFRvcC1ncm91cEJvdHRvbSkrMykmfjM7CisKKyAgICBzaXplPWFsZ05hbWVzT2Zmc2V0KzQrYWxnUmFuZ2VzLmxlbmd0aCgpOworCisgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgcHJpbnRmKCJzaXplIG9mIHRoZSBVbmljb2RlIE5hbWVzIGRhdGE6XG4iCisgICAgICAgICAgICAgICAidG90YWwgZGF0YSBsZW5ndGggJWx1LCB0b2tlbiBzdHJpbmdzICVsdSwgY29tcHJlc3NlZCBzdHJpbmdzICVsdSwgYWxnb3JpdGhtaWMgbmFtZXMgJWx1XG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemUsICh1bnNpZ25lZCBsb25nKShsaW5lVG9wLWdyb3VwVG9wKSwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ3JvdXBUb3AtZ3JvdXBCb3R0b20pLCAodW5zaWduZWQgbG9uZykoNCthbGdSYW5nZXMubGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICAvKiB3cml0ZSB0aGUgZGF0YSB0byB0aGUgZmlsZSAqLworICAgIC8qIG9mZnNldHMgKi8KKyAgICB1ZGF0YV93cml0ZTMyKHBEYXRhLCB0b2tlblN0cmluZ09mZnNldCk7CisgICAgdWRhdGFfd3JpdGUzMihwRGF0YSwgZ3JvdXBzT2Zmc2V0KTsKKyAgICB1ZGF0YV93cml0ZTMyKHBEYXRhLCBncm91cFN0cmluZ09mZnNldCk7CisgICAgdWRhdGFfd3JpdGUzMihwRGF0YSwgYWxnTmFtZXNPZmZzZXQpOworCisgICAgLyogdG9rZW4gdGFibGUgKi8KKyAgICB1ZGF0YV93cml0ZTE2KHBEYXRhLCAodWludDE2X3QpdG9rZW5Db3VudCk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgdG9rZW5zLCAyKnRva2VuQ291bnQpOworCisgICAgLyogdG9rZW4gc3RyaW5ncyAqLworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHN0cmluZ1N0b3JlK2dyb3VwVG9wLCBsaW5lVG9wLWdyb3VwVG9wKTsKKyAgICBpZigobGluZVRvcC1ncm91cFRvcCkmMSkgeworICAgICAgICAvKiAyLXBhZGRpbmcgKi8KKyAgICAgICAgdWRhdGFfd3JpdGVQYWRkaW5nKHBEYXRhLCAxKTsKKyAgICB9CisKKyAgICAvKiBncm91cCB0YWJsZSAqLworICAgIHVkYXRhX3dyaXRlMTYocERhdGEsICh1aW50MTZfdClsaW5lQ291bnQpOworICAgIGZvcihpPTA7IGk8bGluZUNvdW50OyArK2kpIHsKKyAgICAgICAgLyogZ3JvdXBNU0IgKi8KKyAgICAgICAgZ3JvdXBXb3Jkc1swXT0odWludDE2X3QpbGluZXNbaV0uY29kZTsKKworICAgICAgICAvKiBvZmZzZXQgKi8KKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gKHVpbnQzMl90KSgobGluZXNbaV0ucyAtIHN0cmluZ1N0b3JlKS1ncm91cEJvdHRvbSk7CisgICAgICAgIGdyb3VwV29yZHNbMV09KHVpbnQxNl90KShvZmZzZXQ+PjE2KTsKKyAgICAgICAgZ3JvdXBXb3Jkc1syXT0odWludDE2X3QpKG9mZnNldCk7CisgICAgICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGdyb3VwV29yZHMsIDYpOworICAgIH0KKworICAgIC8qIGdyb3VwIHN0cmluZ3MgKi8KKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBzdHJpbmdTdG9yZStncm91cEJvdHRvbSwgZ3JvdXBUb3AtZ3JvdXBCb3R0b20pOworCisgICAgLyogNC1hbGlnbiB0aGUgYWxnb3JpdGhtaWMgbmFtZXMgZGF0YSAqLworICAgIHVkYXRhX3dyaXRlUGFkZGluZyhwRGF0YSwgYWxnTmFtZXNPZmZzZXQtKGdyb3VwU3RyaW5nT2Zmc2V0Kyhncm91cFRvcC1ncm91cEJvdHRvbSkpKTsKKworICAgIHVkYXRhX3dyaXRlMzIocERhdGEsIGNvdW50QWxnUmFuZ2VzKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBhbGdSYW5nZXMuZGF0YSgpLCBhbGdSYW5nZXMubGVuZ3RoKCkpOworCisgICAgLyogZmluaXNoIHVwICovCisgICAgZGF0YUxlbmd0aD11ZGF0YV9maW5pc2gocERhdGEsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IGVycm9yICVkIHdyaXRpbmcgdGhlIG91dHB1dCBmaWxlXG4iLCBlcnJvckNvZGUpOworICAgICAgICBleGl0KGVycm9yQ29kZSk7CisgICAgfQorCisgICAgaWYoZGF0YUxlbmd0aCE9KGxvbmcpc2l6ZSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzOiBkYXRhIGxlbmd0aCAlbGQgIT0gY2FsY3VsYXRlZCBzaXplICVsdVxuIiwKK2RhdGFMZW5ndGgsICh1bnNpZ25lZCBsb25nKXNpemUpOworICAgICAgICBleGl0KFVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUik7CisgICAgfQorfQorCisvKiBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50MTZfdAorZmluZFRva2VuKHVpbnQ4X3QgKnMsIGludDE2X3QgbGVuZ3RoKSB7CisgICAgaW50MTZfdCBpLCB0b2tlbjsKKworICAgIGZvcihpPTA7IGk8KGludDE2X3QpdG9rZW5Db3VudDsgKytpKSB7CisgICAgICAgIHRva2VuPXRva2Vuc1tpXTsKKyAgICAgICAgaWYodG9rZW4+PTAgJiYgbGVuZ3RoPT13b3Jkc1t0b2tlbl0ubGVuZ3RoICYmIDA9PXVwcnZfbWVtY21wKHMsIHdvcmRzW3Rva2VuXS5zLCBsZW5ndGgpKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFdvcmQgKgorZmluZFdvcmQoY29uc3QgY2hhciAqcywgaW50MTZfdCBsZW5ndGgpIHsKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yKGk9MDsgaTx3b3JkQ291bnQ7ICsraSkgeworICAgICAgICBpZihsZW5ndGg9PXdvcmRzW2ldLmxlbmd0aCAmJiAwPT11cHJ2X21lbWNtcChzLCB3b3Jkc1tpXS5zLCBsZW5ndGgpKSB7CisgICAgICAgICAgICByZXR1cm4gd29yZHMraTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgV29yZCAqCithZGRXb3JkKGNvbnN0IGNoYXIgKnMsIGludDE2X3QgbGVuZ3RoKSB7CisgICAgdWludDhfdCAqc3RyaW5nU3RhcnQ7CisgICAgV29yZCAqd29yZDsKKworICAgIGlmKHdvcmRDb3VudD09TUFYX1dPUkRfQ09VTlQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogdG9vIG1hbnkgd29yZHNcbiIpOworICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICB9CisKKyAgICBzdHJpbmdTdGFydD1hbGxvY1dvcmQobGVuZ3RoKTsKKyAgICB1cHJ2X21lbWNweShzdHJpbmdTdGFydCwgcywgbGVuZ3RoKTsKKworICAgIHdvcmQ9d29yZHMrd29yZENvdW50OworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIHRoZSB3ZWlnaHQgd2l0aCB0aGUgY29zdHMgZm9yIHRoaXMgdG9rZW46CisgICAgICogYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIGFuZCBhIDE2LWJpdCBvZmZzZXQuCisgICAgICovCisgICAgd29yZC0+d2VpZ2h0PS0obGVuZ3RoKzErMik7CisgICAgd29yZC0+Y291bnQ9MDsKKyAgICB3b3JkLT5sZW5ndGg9bGVuZ3RoOworICAgIHdvcmQtPnM9c3RyaW5nU3RhcnQ7CisKKyAgICArK3dvcmRDb3VudDsKKworICAgIHJldHVybiB3b3JkOworfQorCitzdGF0aWMgdm9pZAorY291bnRXb3JkKFdvcmQgKndvcmQpIHsKKyAgICAvKiBhZGQgdG8gdGhlIHdlaWdodCB0aGUgc2F2aW5nczogdGhlIGxlbmd0aCBvZiB0aGUgd29yZCBtaW51cyAxIGJ5dGUgZm9yIHRoZSB0b2tlbiAqLworICAgIHdvcmQtPndlaWdodCs9d29yZC0+bGVuZ3RoLTE7CisgICAgKyt3b3JkLT5jb3VudDsKK30KKworc3RhdGljIHZvaWQKK2FkZExpbmUoVUNoYXIzMiBjb2RlLCBjb25zdCBjaGFyICpuYW1lc1tdLCBpbnQxNl90IGxlbmd0aHNbXSwgaW50MTZfdCBjb3VudCkgeworICAgIHVpbnQ4X3QgKnN0cmluZ1N0YXJ0OworICAgIExpbmUgKmxpbmU7CisgICAgaW50MTZfdCBpLCBsZW5ndGg7CisKKyAgICBpZihsaW5lQ291bnQ9PU1BWF9MSU5FX0NPVU5UKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IHRvbyBtYW55IGxpbmVzXG4iKTsKKyAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgfQorCisgICAgLyogZmluZCB0aGUgbGFzdCBub24tZW1wdHkgbmFtZSAqLworICAgIHdoaWxlKGNvdW50PjAgJiYgbGVuZ3Roc1tjb3VudC0xXT09MCkgeworICAgICAgICAtLWNvdW50OworICAgIH0KKyAgICBpZihjb3VudD09MCkgeworICAgICAgICByZXR1cm47IC8qIHNob3VsZCBub3Qgb2NjdXI6IGNhbGxlciBzaG91bGQgbm90IGhhdmUgY2FsbGVkICovCisgICAgfQorCisgICAgLyogdGhlcmUgd2lsbCBiZSAoY291bnQtMSkgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKi8KKyAgICBpPWNvdW50OworICAgIGxlbmd0aD1jb3VudC0xOworCisgICAgLyogYWRkIGxlbmd0aHMgb2Ygc3RyaW5ncyAqLworICAgIHdoaWxlKGk+MCkgeworICAgICAgICBsZW5ndGgrPWxlbmd0aHNbLS1pXTsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBsaW5lIG1lbW9yeSAqLworICAgIHN0cmluZ1N0YXJ0PWFsbG9jTGluZShsZW5ndGgpOworCisgICAgLyogY29weSBhbGwgc3RyaW5ncyBpbnRvIHRoZSBsaW5lIG1lbW9yeSAqLworICAgIGxlbmd0aD0wOyAvKiBudW1iZXIgb2YgY2hhcnMgY29waWVkIHNvIGZhciAqLworICAgIGZvcihpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICBpZihpPjApIHsKKyAgICAgICAgICAgIHN0cmluZ1N0YXJ0W2xlbmd0aCsrXT1OQU1FX1NFUEFSQVRPUl9DSEFSOworICAgICAgICB9CisgICAgICAgIGlmKGxlbmd0aHNbaV0+MCkgeworICAgICAgICAgICAgdXBydl9tZW1jcHkoc3RyaW5nU3RhcnQrbGVuZ3RoLCBuYW1lc1tpXSwgbGVuZ3Roc1tpXSk7CisgICAgICAgICAgICBsZW5ndGgrPWxlbmd0aHNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsaW5lPWxpbmVzK2xpbmVDb3VudDsKKworICAgIGxpbmUtPmNvZGU9Y29kZTsKKyAgICBsaW5lLT5sZW5ndGg9bGVuZ3RoOworICAgIGxpbmUtPnM9c3RyaW5nU3RhcnQ7CisKKyAgICArK2xpbmVDb3VudDsKKworICAgIC8qIHByZXZlbnQgYSBjaGFyYWN0ZXIgdmFsdWUgdGhhdCBpcyBhY3R1YWxseSBpbiBhIG5hbWUgZnJvbSBiZWNvbWluZyBhIHRva2VuICovCisgICAgd2hpbGUobGVuZ3RoPjApIHsKKyAgICAgICAgdG9rZW5zW3N0cmluZ1N0YXJ0Wy0tbGVuZ3RoXV09LTE7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorYWRkR3JvdXAodWludDMyX3QgZ3JvdXBNU0IsIHVpbnQ4X3QgKnN0cmluZ3MsIGludDE2X3QgbGVuZ3RoKSB7CisgICAgdWludDhfdCAqc3RyaW5nU3RhcnQ7CisgICAgTGluZSAqbGluZTsKKworICAgIGlmKGxpbmVDb3VudD09TUFYX0xJTkVfQ09VTlQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogdG9vIG1hbnkgZ3JvdXBzXG4iKTsKKyAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgfQorCisgICAgLyogc3RvcmUgdGhlIGxpbmUgbGVuZ3RocyBmaXJzdCwgdGhlbiB0aGUgc3RyaW5ncyAqLworICAgIGxpbmVMZW5ndGhzVG9wPShsaW5lTGVuZ3Roc1RvcCsxKS8yOworICAgIHN0cmluZ1N0YXJ0PWFsbG9jTGluZShsaW5lTGVuZ3Roc1RvcCtsZW5ndGgpOworICAgIHVwcnZfbWVtY3B5KHN0cmluZ1N0YXJ0LCBsaW5lTGVuZ3RocywgbGluZUxlbmd0aHNUb3ApOworICAgIHVwcnZfbWVtY3B5KHN0cmluZ1N0YXJ0K2xpbmVMZW5ndGhzVG9wLCBzdHJpbmdzLCBsZW5ndGgpOworCisgICAgbGluZT1saW5lcytsaW5lQ291bnQ7CisKKyAgICBsaW5lLT5jb2RlPWdyb3VwTVNCOworICAgIGxpbmUtPmxlbmd0aD1sZW5ndGg7CisgICAgbGluZS0+cz1zdHJpbmdTdGFydDsKKworICAgICsrbGluZUNvdW50OworfQorCitzdGF0aWMgdWludDMyX3QKK2FkZFRva2VuKHVpbnQ4X3QgKnMsIGludDE2X3QgbGVuZ3RoKSB7CisgICAgdWludDhfdCAqc3RyaW5nU3RhcnQ7CisKKyAgICBzdHJpbmdTdGFydD1hbGxvY0xpbmUobGVuZ3RoKzEpOworICAgIHVwcnZfbWVtY3B5KHN0cmluZ1N0YXJ0LCBzLCBsZW5ndGgpOworICAgIHN0cmluZ1N0YXJ0W2xlbmd0aF09MDsKKworICAgIHJldHVybiAodWludDMyX3QpKHN0cmluZ1N0YXJ0IC0gc3RyaW5nU3RvcmUpOworfQorCitzdGF0aWMgdm9pZAorYXBwZW5kTGluZUxlbmd0aChpbnQxNl90IGxlbmd0aCkgeworICAgIGlmKGxlbmd0aD49NzYpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogY29tcHJlc3NlZCBsaW5lIHRvbyBsb25nXG4iKTsKKyAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgfQorICAgIGlmKGxlbmd0aD49MTIpIHsKKyAgICAgICAgbGVuZ3RoLT0xMjsKKyAgICAgICAgYXBwZW5kTGluZUxlbmd0aE5pYmJsZSgodWludDhfdCkoKGxlbmd0aD4+NCl8MTIpKTsKKyAgICB9CisgICAgYXBwZW5kTGluZUxlbmd0aE5pYmJsZSgodWludDhfdClsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZAorYXBwZW5kTGluZUxlbmd0aE5pYmJsZSh1aW50OF90IG5pYmJsZSkgeworICAgIGlmKChsaW5lTGVuZ3Roc1RvcCYxKT09MCkgeworICAgICAgICBsaW5lTGVuZ3Roc1tsaW5lTGVuZ3Roc1RvcC8yXT0odWludDhfdCkobmliYmxlPDw0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lTGVuZ3Roc1tsaW5lTGVuZ3Roc1RvcC8yXXw9bmliYmxlJjB4ZjsKKyAgICB9CisgICAgKytsaW5lTGVuZ3Roc1RvcDsKK30KKworc3RhdGljIHVpbnQ4X3QgKgorYWxsb2NMaW5lKGludDMyX3QgbGVuZ3RoKSB7CisgICAgdWludDMyX3QgdG9wPWxpbmVUb3ArbGVuZ3RoOworICAgIHVpbnQ4X3QgKnA7CisKKyAgICBpZih0b3A+d29yZEJvdHRvbSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzIGFsbG9jTGluZSgpOiBvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgZXhpdChVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SKTsKKyAgICB9CisgICAgcD1zdHJpbmdTdG9yZStsaW5lVG9wOworICAgIGxpbmVUb3A9dG9wOworICAgIHJldHVybiBwOworfQorCitzdGF0aWMgdWludDhfdCAqCithbGxvY1dvcmQodWludDMyX3QgbGVuZ3RoKSB7CisgICAgdWludDMyX3QgYm90dG9tPXdvcmRCb3R0b20tbGVuZ3RoOworCisgICAgaWYobGluZVRvcD5ib3R0b20pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lcyBhbGxvY1dvcmQoKTogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIGV4aXQoVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUik7CisgICAgfQorICAgIHdvcmRCb3R0b209Ym90dG9tOworICAgIHJldHVybiBzdHJpbmdTdG9yZStib3R0b207Cit9CisKK1Byb3BzQnVpbGRlciAqCitjcmVhdGVOYW1lc1Byb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gTlVMTDsgfQorICAgIFByb3BzQnVpbGRlciAqcGI9bmV3IE5hbWVzUHJvcHNCdWlsZGVyKGVycm9yQ29kZSk7CisgICAgaWYocGI9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgfQorICAgIHJldHVybiBwYjsKK30KKworLyoKKyAqIEhleSwgRW1hY3MsIHBsZWFzZSBzZXQgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqCisgKi8KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNfZGF0YS5oIGIvdW5pY29kZS9jL2dlbnByb3BzL3BuYW1lc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5ZTc4MgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNfZGF0YS5oCkBAIC0wLDAgKzEsMTA5OSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBtYWNoaW5lLWdlbmVyYXRlZCBieTogaWN1L3Rvb2xzL3VuaWNvZGUvcHkvcHJlcGFyc2V1Y2QucHkKKyAqLworCisjZGVmaW5lIFVOSUNPREVfVkVSU0lPTiB7IDgsIDAsIDAsIDAgfQorCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2JpbnByb3BbMl0gPSB7CisgICAgVmFsdWUoMCwgIk4gTm8gRiBGYWxzZSIpLAorICAgIFZhbHVlKDEsICJZIFllcyBUIFRydWUiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfYmNbMjNdID0geworICAgIFZhbHVlKFVfTEVGVF9UT19SSUdIVCwgIkwgTGVmdF9Ub19SaWdodCIpLAorICAgIFZhbHVlKFVfUklHSFRfVE9fTEVGVCwgIlIgUmlnaHRfVG9fTGVmdCIpLAorICAgIFZhbHVlKFVfRVVST1BFQU5fTlVNQkVSLCAiRU4gRXVyb3BlYW5fTnVtYmVyIiksCisgICAgVmFsdWUoVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SLCAiRVMgRXVyb3BlYW5fU2VwYXJhdG9yIiksCisgICAgVmFsdWUoVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiwgIkVUIEV1cm9wZWFuX1Rlcm1pbmF0b3IiKSwKKyAgICBWYWx1ZShVX0FSQUJJQ19OVU1CRVIsICJBTiBBcmFiaWNfTnVtYmVyIiksCisgICAgVmFsdWUoVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUiwgIkNTIENvbW1vbl9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZShVX0JMT0NLX1NFUEFSQVRPUiwgIkIgUGFyYWdyYXBoX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKFVfU0VHTUVOVF9TRVBBUkFUT1IsICJTIFNlZ21lbnRfU2VwYXJhdG9yIiksCisgICAgVmFsdWUoVV9XSElURV9TUEFDRV9ORVVUUkFMLCAiV1MgV2hpdGVfU3BhY2UiKSwKKyAgICBWYWx1ZShVX09USEVSX05FVVRSQUwsICJPTiBPdGhlcl9OZXV0cmFsIiksCisgICAgVmFsdWUoVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORywgIkxSRSBMZWZ0X1RvX1JpZ2h0X0VtYmVkZGluZyIpLAorICAgIFZhbHVlKFVfTEVGVF9UT19SSUdIVF9PVkVSUklERSwgIkxSTyBMZWZ0X1RvX1JpZ2h0X092ZXJyaWRlIiksCisgICAgVmFsdWUoVV9SSUdIVF9UT19MRUZUX0FSQUJJQywgIkFMIEFyYWJpY19MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HLCAiUkxFIFJpZ2h0X1RvX0xlZnRfRW1iZWRkaW5nIiksCisgICAgVmFsdWUoVV9SSUdIVF9UT19MRUZUX09WRVJSSURFLCAiUkxPIFJpZ2h0X1RvX0xlZnRfT3ZlcnJpZGUiKSwKKyAgICBWYWx1ZShVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsICJQREYgUG9wX0RpcmVjdGlvbmFsX0Zvcm1hdCIpLAorICAgIFZhbHVlKFVfRElSX05PTl9TUEFDSU5HX01BUkssICJOU00gTm9uc3BhY2luZ19NYXJrIiksCisgICAgVmFsdWUoVV9CT1VOREFSWV9ORVVUUkFMLCAiQk4gQm91bmRhcnlfTmV1dHJhbCIpLAorICAgIFZhbHVlKFVfRklSU1RfU1RST05HX0lTT0xBVEUsICJGU0kgRmlyc3RfU3Ryb25nX0lzb2xhdGUiKSwKKyAgICBWYWx1ZShVX0xFRlRfVE9fUklHSFRfSVNPTEFURSwgIkxSSSBMZWZ0X1RvX1JpZ2h0X0lzb2xhdGUiKSwKKyAgICBWYWx1ZShVX1JJR0hUX1RPX0xFRlRfSVNPTEFURSwgIlJMSSBSaWdodF9Ub19MZWZ0X0lzb2xhdGUiKSwKKyAgICBWYWx1ZShVX1BPUF9ESVJFQ1RJT05BTF9JU09MQVRFLCAiUERJIFBvcF9EaXJlY3Rpb25hbF9Jc29sYXRlIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2Jsa1syNjNdID0geworICAgIFZhbHVlKFVCTE9DS19OT19CTE9DSywgIk5CIE5vX0Jsb2NrIiksCisgICAgVmFsdWUoVUJMT0NLX0JBU0lDX0xBVElOLCAiQVNDSUkgQmFzaWNfTGF0aW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fMV9TVVBQTEVNRU5ULCAiTGF0aW5fMV9TdXAgTGF0aW5fMV9TdXBwbGVtZW50IExhdGluXzEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fRVhURU5ERURfQSwgIkxhdGluX0V4dF9BIExhdGluX0V4dGVuZGVkX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fRVhURU5ERURfQiwgIkxhdGluX0V4dF9CIExhdGluX0V4dGVuZGVkX0IiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSVBBX0VYVEVOU0lPTlMsICJJUEFfRXh0IElQQV9FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX1NQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUywgIk1vZGlmaWVyX0xldHRlcnMgU3BhY2luZ19Nb2RpZmllcl9MZXR0ZXJzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUywgIkRpYWNyaXRpY2FscyBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR1JFRUssICJHcmVlayBHcmVla19BbmRfQ29wdGljIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDLCAiQ3lyaWxsaWMgQ3lyaWxsaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQVJNRU5JQU4sICJBcm1lbmlhbiBBcm1lbmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19IRUJSRVcsICJIZWJyZXcgSGVicmV3IiksCisgICAgVmFsdWUoVUJMT0NLX0FSQUJJQywgIkFyYWJpYyBBcmFiaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1lSSUFDLCAiU3lyaWFjIFN5cmlhYyIpLAorICAgIFZhbHVlKFVCTE9DS19USEFBTkEsICJUaGFhbmEgVGhhYW5hIiksCisgICAgVmFsdWUoVUJMT0NLX0RFVkFOQUdBUkksICJEZXZhbmFnYXJpIERldmFuYWdhcmkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQkVOR0FMSSwgIkJlbmdhbGkgQmVuZ2FsaSIpLAorICAgIFZhbHVlKFVCTE9DS19HVVJNVUtISSwgIkd1cm11a2hpIEd1cm11a2hpIiksCisgICAgVmFsdWUoVUJMT0NLX0dVSkFSQVRJLCAiR3VqYXJhdGkgR3VqYXJhdGkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT1JJWUEsICJPcml5YSBPcml5YSIpLAorICAgIFZhbHVlKFVCTE9DS19UQU1JTCwgIlRhbWlsIFRhbWlsIiksCisgICAgVmFsdWUoVUJMT0NLX1RFTFVHVSwgIlRlbHVndSBUZWx1Z3UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOTkFEQSwgIkthbm5hZGEgS2FubmFkYSIpLAorICAgIFZhbHVlKFVCTE9DS19NQUxBWUFMQU0sICJNYWxheWFsYW0gTWFsYXlhbGFtIiksCisgICAgVmFsdWUoVUJMT0NLX1NJTkhBTEEsICJTaW5oYWxhIFNpbmhhbGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVEhBSSwgIlRoYWkgVGhhaSIpLAorICAgIFZhbHVlKFVCTE9DS19MQU8sICJMYW8gTGFvIiksCisgICAgVmFsdWUoVUJMT0NLX1RJQkVUQU4sICJUaWJldGFuIFRpYmV0YW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTVlBTk1BUiwgIk15YW5tYXIgTXlhbm1hciIpLAorICAgIFZhbHVlKFVCTE9DS19HRU9SR0lBTiwgIkdlb3JnaWFuIEdlb3JnaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTkdVTF9KQU1PLCAiSmFtbyBIYW5ndWxfSmFtbyIpLAorICAgIFZhbHVlKFVCTE9DS19FVEhJT1BJQywgIkV0aGlvcGljIEV0aGlvcGljIiksCisgICAgVmFsdWUoVUJMT0NLX0NIRVJPS0VFLCAiQ2hlcm9rZWUgQ2hlcm9rZWUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExBQklDUywgIlVDQVMgVW5pZmllZF9DYW5hZGlhbl9BYm9yaWdpbmFsX1N5bGxhYmljcyBDYW5hZGlhbl9TeWxsYWJpY3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT0dIQU0sICJPZ2hhbSBPZ2hhbSIpLAorICAgIFZhbHVlKFVCTE9DS19SVU5JQywgIlJ1bmljIFJ1bmljIiksCisgICAgVmFsdWUoVUJMT0NLX0tITUVSLCAiS2htZXIgS2htZXIiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTU9OR09MSUFOLCAiTW9uZ29saWFuIE1vbmdvbGlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19MQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMLCAiTGF0aW5fRXh0X0FkZGl0aW9uYWwgTGF0aW5fRXh0ZW5kZWRfQWRkaXRpb25hbCIpLAorICAgIFZhbHVlKFVCTE9DS19HUkVFS19FWFRFTkRFRCwgIkdyZWVrX0V4dCBHcmVla19FeHRlbmRlZCIpLAorICAgIFZhbHVlKFVCTE9DS19HRU5FUkFMX1BVTkNUVUFUSU9OLCAiUHVuY3R1YXRpb24gR2VuZXJhbF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFMsICJTdXBlcl9BbmRfU3ViIFN1cGVyc2NyaXB0c19BbmRfU3Vic2NyaXB0cyIpLAorICAgIFZhbHVlKFVCTE9DS19DVVJSRU5DWV9TWU1CT0xTLCAiQ3VycmVuY3lfU3ltYm9scyBDdXJyZW5jeV9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MUywgIkRpYWNyaXRpY2Fsc19Gb3JfU3ltYm9scyBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfRm9yX1N5bWJvbHMgQ29tYmluaW5nX01hcmtzX0Zvcl9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0xFVFRFUkxJS0VfU1lNQk9MUywgIkxldHRlcmxpa2VfU3ltYm9scyBMZXR0ZXJsaWtlX1N5bWJvbHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTlVNQkVSX0ZPUk1TLCAiTnVtYmVyX0Zvcm1zIE51bWJlcl9Gb3JtcyIpLAorICAgIFZhbHVlKFVCTE9DS19BUlJPV1MsICJBcnJvd3MgQXJyb3dzIiksCisgICAgVmFsdWUoVUJMT0NLX01BVEhFTUFUSUNBTF9PUEVSQVRPUlMsICJNYXRoX09wZXJhdG9ycyBNYXRoZW1hdGljYWxfT3BlcmF0b3JzIiksCisgICAgVmFsdWUoVUJMT0NLX01JU0NFTExBTkVPVVNfVEVDSE5JQ0FMLCAiTWlzY19UZWNobmljYWwgTWlzY2VsbGFuZW91c19UZWNobmljYWwiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ09OVFJPTF9QSUNUVVJFUywgIkNvbnRyb2xfUGljdHVyZXMgQ29udHJvbF9QaWN0dXJlcyIpLAorICAgIFZhbHVlKFVCTE9DS19PUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiwgIk9DUiBPcHRpY2FsX0NoYXJhY3Rlcl9SZWNvZ25pdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19FTkNMT1NFRF9BTFBIQU5VTUVSSUNTLCAiRW5jbG9zZWRfQWxwaGFudW0gRW5jbG9zZWRfQWxwaGFudW1lcmljcyIpLAorICAgIFZhbHVlKFVCTE9DS19CT1hfRFJBV0lORywgIkJveF9EcmF3aW5nIEJveF9EcmF3aW5nIiksCisgICAgVmFsdWUoVUJMT0NLX0JMT0NLX0VMRU1FTlRTLCAiQmxvY2tfRWxlbWVudHMgQmxvY2tfRWxlbWVudHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR0VPTUVUUklDX1NIQVBFUywgIkdlb21ldHJpY19TaGFwZXMgR2VvbWV0cmljX1NoYXBlcyIpLAorICAgIFZhbHVlKFVCTE9DS19NSVNDRUxMQU5FT1VTX1NZTUJPTFMsICJNaXNjX1N5bWJvbHMgTWlzY2VsbGFuZW91c19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0RJTkdCQVRTLCAiRGluZ2JhdHMgRGluZ2JhdHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlJBSUxMRV9QQVRURVJOUywgIkJyYWlsbGUgQnJhaWxsZV9QYXR0ZXJucyIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVOVCwgIkNKS19SYWRpY2Fsc19TdXAgQ0pLX1JhZGljYWxzX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOR1hJX1JBRElDQUxTLCAiS2FuZ3hpIEthbmd4aV9SYWRpY2FscyIpLAorICAgIFZhbHVlKFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTLCAiSURDIElkZW9ncmFwaGljX0Rlc2NyaXB0aW9uX0NoYXJhY3RlcnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OLCAiQ0pLX1N5bWJvbHMgQ0pLX1N5bWJvbHNfQW5kX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVUJMT0NLX0hJUkFHQU5BLCAiSGlyYWdhbmEgSGlyYWdhbmEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FUQUtBTkEsICJLYXRha2FuYSBLYXRha2FuYSIpLAorICAgIFZhbHVlKFVCTE9DS19CT1BPTU9GTywgIkJvcG9tb2ZvIEJvcG9tb2ZvIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZX0pBTU8sICJDb21wYXRfSmFtbyBIYW5ndWxfQ29tcGF0aWJpbGl0eV9KYW1vIiksCisgICAgVmFsdWUoVUJMT0NLX0tBTkJVTiwgIkthbmJ1biBLYW5idW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQsICJCb3BvbW9mb19FeHQgQm9wb21vZm9fRXh0ZW5kZWQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUywgIkVuY2xvc2VkX0NKSyBFbmNsb3NlZF9DSktfTGV0dGVyc19BbmRfTW9udGhzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19DT01QQVRJQklMSVRZLCAiQ0pLX0NvbXBhdCBDSktfQ29tcGF0aWJpbGl0eSIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BLCAiQ0pLX0V4dF9BIENKS19VbmlmaWVkX0lkZW9ncmFwaHNfRXh0ZW5zaW9uX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUywgIkNKSyBDSktfVW5pZmllZF9JZGVvZ3JhcGhzIiksCisgICAgVmFsdWUoVUJMT0NLX1lJX1NZTExBQkxFUywgIllpX1N5bGxhYmxlcyBZaV9TeWxsYWJsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfWUlfUkFESUNBTFMsICJZaV9SYWRpY2FscyBZaV9SYWRpY2FscyIpLAorICAgIFZhbHVlKFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTLCAiSGFuZ3VsIEhhbmd1bF9TeWxsYWJsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSElHSF9TVVJST0dBVEVTLCAiSGlnaF9TdXJyb2dhdGVzIEhpZ2hfU3Vycm9nYXRlcyIpLAorICAgIFZhbHVlKFVCTE9DS19ISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMsICJIaWdoX1BVX1N1cnJvZ2F0ZXMgSGlnaF9Qcml2YXRlX1VzZV9TdXJyb2dhdGVzIiksCisgICAgVmFsdWUoVUJMT0NLX0xPV19TVVJST0dBVEVTLCAiTG93X1N1cnJvZ2F0ZXMgTG93X1N1cnJvZ2F0ZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfUFJJVkFURV9VU0VfQVJFQSwgIlBVQSBQcml2YXRlX1VzZV9BcmVhIFByaXZhdGVfVXNlIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFMsICJDSktfQ29tcGF0X0lkZW9ncmFwaHMgQ0pLX0NvbXBhdGliaWxpdHlfSWRlb2dyYXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19BTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUywgIkFscGhhYmV0aWNfUEYgQWxwaGFiZXRpY19QcmVzZW50YXRpb25fRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19BLCAiQXJhYmljX1BGX0EgQXJhYmljX1ByZXNlbnRhdGlvbl9Gb3Jtc19BIEFyYWJpY19QcmVzZW50YXRpb25fRm9ybXMtQSIpLAorICAgIFZhbHVlKFVCTE9DS19DT01CSU5JTkdfSEFMRl9NQVJLUywgIkhhbGZfTWFya3MgQ29tYmluaW5nX0hhbGZfTWFya3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVMsICJDSktfQ29tcGF0X0Zvcm1zIENKS19Db21wYXRpYmlsaXR5X0Zvcm1zIiksCisgICAgVmFsdWUoVUJMT0NLX1NNQUxMX0ZPUk1fVkFSSUFOVFMsICJTbWFsbF9Gb3JtcyBTbWFsbF9Gb3JtX1ZhcmlhbnRzIiksCisgICAgVmFsdWUoVUJMT0NLX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQiwgIkFyYWJpY19QRl9CIEFyYWJpY19QcmVzZW50YXRpb25fRm9ybXNfQiIpLAorICAgIFZhbHVlKFVCTE9DS19TUEVDSUFMUywgIlNwZWNpYWxzIFNwZWNpYWxzIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TLCAiSGFsZl9BbmRfRnVsbF9Gb3JtcyBIYWxmd2lkdGhfQW5kX0Z1bGx3aWR0aF9Gb3JtcyIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfSVRBTElDLCAiT2xkX0l0YWxpYyBPbGRfSXRhbGljIiksCisgICAgVmFsdWUoVUJMT0NLX0dPVEhJQywgIkdvdGhpYyBHb3RoaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfREVTRVJFVCwgIkRlc2VyZXQgRGVzZXJldCIpLAorICAgIFZhbHVlKFVCTE9DS19CWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTLCAiQnl6YW50aW5lX011c2ljIEJ5emFudGluZV9NdXNpY2FsX1N5bWJvbHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTVVTSUNBTF9TWU1CT0xTLCAiTXVzaWMgTXVzaWNhbF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX01BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MUywgIk1hdGhfQWxwaGFudW0gTWF0aGVtYXRpY2FsX0FscGhhbnVtZXJpY19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0IsICJDSktfRXh0X0IgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fQiIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQsICJDSktfQ29tcGF0X0lkZW9ncmFwaHNfU3VwIENKS19Db21wYXRpYmlsaXR5X0lkZW9ncmFwaHNfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19UQUdTLCAiVGFncyBUYWdzIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDX1NVUFBMRU1FTlQsICJDeXJpbGxpY19TdXAgQ3lyaWxsaWNfU3VwcGxlbWVudCBDeXJpbGxpY19TdXBwbGVtZW50YXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX1RBR0FMT0csICJUYWdhbG9nIFRhZ2Fsb2ciKSwKKyAgICBWYWx1ZShVQkxPQ0tfSEFOVU5PTywgIkhhbnVub28gSGFudW5vbyIpLAorICAgIFZhbHVlKFVCTE9DS19CVUhJRCwgIkJ1aGlkIEJ1aGlkIiksCisgICAgVmFsdWUoVUJMT0NLX1RBR0JBTldBLCAiVGFnYmFud2EgVGFnYmFud2EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9MU19BLCAiTWlzY19NYXRoX1N5bWJvbHNfQSBNaXNjZWxsYW5lb3VzX01hdGhlbWF0aWNhbF9TeW1ib2xzX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1VQUExFTUVOVEFMX0FSUk9XU19BLCAiU3VwX0Fycm93c19BIFN1cHBsZW1lbnRhbF9BcnJvd3NfQSIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQUxfQVJST1dTX0IsICJTdXBfQXJyb3dzX0IgU3VwcGxlbWVudGFsX0Fycm93c19CIiksCisgICAgVmFsdWUoVUJMT0NLX01JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQiwgIk1pc2NfTWF0aF9TeW1ib2xzX0IgTWlzY2VsbGFuZW91c19NYXRoZW1hdGljYWxfU3ltYm9sc19CIiksCisgICAgVmFsdWUoVUJMT0NLX1NVUFBMRU1FTlRBTF9NQVRIRU1BVElDQUxfT1BFUkFUT1JTLCAiU3VwX01hdGhfT3BlcmF0b3JzIFN1cHBsZW1lbnRhbF9NYXRoZW1hdGljYWxfT3BlcmF0b3JzIiksCisgICAgVmFsdWUoVUJMT0NLX0tBVEFLQU5BX1BIT05FVElDX0VYVEVOU0lPTlMsICJLYXRha2FuYV9FeHQgS2F0YWthbmFfUGhvbmV0aWNfRXh0ZW5zaW9ucyIpLAorICAgIFZhbHVlKFVCTE9DS19WQVJJQVRJT05fU0VMRUNUT1JTLCAiVlMgVmFyaWF0aW9uX1NlbGVjdG9ycyIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQSwgIlN1cF9QVUFfQSBTdXBwbGVtZW50YXJ5X1ByaXZhdGVfVXNlX0FyZWFfQSIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQiwgIlN1cF9QVUFfQiBTdXBwbGVtZW50YXJ5X1ByaXZhdGVfVXNlX0FyZWFfQiIpLAorICAgIFZhbHVlKFVCTE9DS19MSU1CVSwgIkxpbWJ1IExpbWJ1IiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9MRSwgIlRhaV9MZSBUYWlfTGUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0hNRVJfU1lNQk9MUywgIktobWVyX1N5bWJvbHMgS2htZXJfU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19QSE9ORVRJQ19FWFRFTlNJT05TLCAiUGhvbmV0aWNfRXh0IFBob25ldGljX0V4dGVuc2lvbnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9BUlJPV1MsICJNaXNjX0Fycm93cyBNaXNjZWxsYW5lb3VzX1N5bWJvbHNfQW5kX0Fycm93cyIpLAorICAgIFZhbHVlKFVCTE9DS19ZSUpJTkdfSEVYQUdSQU1fU1lNQk9MUywgIllpamluZyBZaWppbmdfSGV4YWdyYW1fU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19MSU5FQVJfQl9TWUxMQUJBUlksICJMaW5lYXJfQl9TeWxsYWJhcnkgTGluZWFyX0JfU3lsbGFiYXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX0xJTkVBUl9CX0lERU9HUkFNUywgIkxpbmVhcl9CX0lkZW9ncmFtcyBMaW5lYXJfQl9JZGVvZ3JhbXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQUVHRUFOX05VTUJFUlMsICJBZWdlYW5fTnVtYmVycyBBZWdlYW5fTnVtYmVycyIpLAorICAgIFZhbHVlKFVCTE9DS19VR0FSSVRJQywgIlVnYXJpdGljIFVnYXJpdGljIiksCisgICAgVmFsdWUoVUJMT0NLX1NIQVZJQU4sICJTaGF2aWFuIFNoYXZpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfT1NNQU5ZQSwgIk9zbWFueWEgT3NtYW55YSIpLAorICAgIFZhbHVlKFVCTE9DS19DWVBSSU9UX1NZTExBQkFSWSwgIkN5cHJpb3RfU3lsbGFiYXJ5IEN5cHJpb3RfU3lsbGFiYXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9YVUFOX0pJTkdfU1lNQk9MUywgIlRhaV9YdWFuX0ppbmcgVGFpX1h1YW5fSmluZ19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX1ZBUklBVElPTl9TRUxFQ1RPUlNfU1VQUExFTUVOVCwgIlZTX1N1cCBWYXJpYXRpb25fU2VsZWN0b3JzX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQU5DSUVOVF9HUkVFS19NVVNJQ0FMX05PVEFUSU9OLCAiQW5jaWVudF9HcmVla19NdXNpYyBBbmNpZW50X0dyZWVrX011c2ljYWxfTm90YXRpb24iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQU5DSUVOVF9HUkVFS19OVU1CRVJTLCAiQW5jaWVudF9HcmVla19OdW1iZXJzIEFuY2llbnRfR3JlZWtfTnVtYmVycyIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfU1VQUExFTUVOVCwgIkFyYWJpY19TdXAgQXJhYmljX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlVHSU5FU0UsICJCdWdpbmVzZSBCdWdpbmVzZSIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfU1RST0tFUywgIkNKS19TdHJva2VzIENKS19TdHJva2VzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLU19TVVBQTEVNRU5ULCAiRGlhY3JpdGljYWxzX1N1cCBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19DT1BUSUMsICJDb3B0aWMgQ29wdGljIiksCisgICAgVmFsdWUoVUJMT0NLX0VUSElPUElDX0VYVEVOREVELCAiRXRoaW9waWNfRXh0IEV0aGlvcGljX0V4dGVuZGVkIiksCisgICAgVmFsdWUoVUJMT0NLX0VUSElPUElDX1NVUFBMRU1FTlQsICJFdGhpb3BpY19TdXAgRXRoaW9waWNfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19HRU9SR0lBTl9TVVBQTEVNRU5ULCAiR2VvcmdpYW5fU3VwIEdlb3JnaWFuX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR0xBR09MSVRJQywgIkdsYWdvbGl0aWMgR2xhZ29saXRpYyIpLAorICAgIFZhbHVlKFVCTE9DS19LSEFST1NIVEhJLCAiS2hhcm9zaHRoaSBLaGFyb3NodGhpIiksCisgICAgVmFsdWUoVUJMT0NLX01PRElGSUVSX1RPTkVfTEVUVEVSUywgIk1vZGlmaWVyX1RvbmVfTGV0dGVycyBNb2RpZmllcl9Ub25lX0xldHRlcnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTkVXX1RBSV9MVUUsICJOZXdfVGFpX0x1ZSBOZXdfVGFpX0x1ZSIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfUEVSU0lBTiwgIk9sZF9QZXJzaWFuIE9sZF9QZXJzaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX1BIT05FVElDX0VYVEVOU0lPTlNfU1VQUExFTUVOVCwgIlBob25ldGljX0V4dF9TdXAgUGhvbmV0aWNfRXh0ZW5zaW9uc19TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX1NVUFBMRU1FTlRBTF9QVU5DVFVBVElPTiwgIlN1cF9QdW5jdHVhdGlvbiBTdXBwbGVtZW50YWxfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1lMT1RJX05BR1JJLCAiU3lsb3RpX05hZ3JpIFN5bG90aV9OYWdyaSIpLAorICAgIFZhbHVlKFVCTE9DS19USUZJTkFHSCwgIlRpZmluYWdoIFRpZmluYWdoIiksCisgICAgVmFsdWUoVUJMT0NLX1ZFUlRJQ0FMX0ZPUk1TLCAiVmVydGljYWxfRm9ybXMgVmVydGljYWxfRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTktPLCAiTktvIE5LbyIpLAorICAgIFZhbHVlKFVCTE9DS19CQUxJTkVTRSwgIkJhbGluZXNlIEJhbGluZXNlIiksCisgICAgVmFsdWUoVUJMT0NLX0xBVElOX0VYVEVOREVEX0MsICJMYXRpbl9FeHRfQyBMYXRpbl9FeHRlbmRlZF9DIiksCisgICAgVmFsdWUoVUJMT0NLX0xBVElOX0VYVEVOREVEX0QsICJMYXRpbl9FeHRfRCBMYXRpbl9FeHRlbmRlZF9EIiksCisgICAgVmFsdWUoVUJMT0NLX1BIQUdTX1BBLCAiUGhhZ3NfUGEgUGhhZ3NfUGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfUEhPRU5JQ0lBTiwgIlBob2VuaWNpYW4gUGhvZW5pY2lhbiIpLAorICAgIFZhbHVlKFVCTE9DS19DVU5FSUZPUk0sICJDdW5laWZvcm0gQ3VuZWlmb3JtIiksCisgICAgVmFsdWUoVUJMT0NLX0NVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiwgIkN1bmVpZm9ybV9OdW1iZXJzIEN1bmVpZm9ybV9OdW1iZXJzX0FuZF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19DT1VOVElOR19ST0RfTlVNRVJBTFMsICJDb3VudGluZ19Sb2QgQ291bnRpbmdfUm9kX051bWVyYWxzIiksCisgICAgVmFsdWUoVUJMT0NLX1NVTkRBTkVTRSwgIlN1bmRhbmVzZSBTdW5kYW5lc2UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEVQQ0hBLCAiTGVwY2hhIExlcGNoYSIpLAorICAgIFZhbHVlKFVCTE9DS19PTF9DSElLSSwgIk9sX0NoaWtpIE9sX0NoaWtpIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDX0VYVEVOREVEX0EsICJDeXJpbGxpY19FeHRfQSBDeXJpbGxpY19FeHRlbmRlZF9BIiksCisgICAgVmFsdWUoVUJMT0NLX1ZBSSwgIlZhaSBWYWkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ1lSSUxMSUNfRVhURU5ERURfQiwgIkN5cmlsbGljX0V4dF9CIEN5cmlsbGljX0V4dGVuZGVkX0IiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU0FVUkFTSFRSQSwgIlNhdXJhc2h0cmEgU2F1cmFzaHRyYSIpLAorICAgIFZhbHVlKFVCTE9DS19LQVlBSF9MSSwgIktheWFoX0xpIEtheWFoX0xpIiksCisgICAgVmFsdWUoVUJMT0NLX1JFSkFORywgIlJlamFuZyBSZWphbmciKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0hBTSwgIkNoYW0gQ2hhbSIpLAorICAgIFZhbHVlKFVCTE9DS19BTkNJRU5UX1NZTUJPTFMsICJBbmNpZW50X1N5bWJvbHMgQW5jaWVudF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX1BIQUlTVE9TX0RJU0MsICJQaGFpc3RvcyBQaGFpc3Rvc19EaXNjIiksCisgICAgVmFsdWUoVUJMT0NLX0xZQ0lBTiwgIkx5Y2lhbiBMeWNpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0FSSUFOLCAiQ2FyaWFuIENhcmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19MWURJQU4sICJMeWRpYW4gTHlkaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX01BSEpPTkdfVElMRVMsICJNYWhqb25nIE1haGpvbmdfVGlsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRE9NSU5PX1RJTEVTLCAiRG9taW5vIERvbWlub19UaWxlcyIpLAorICAgIFZhbHVlKFVCTE9DS19TQU1BUklUQU4sICJTYW1hcml0YW4gU2FtYXJpdGFuIiksCisgICAgVmFsdWUoVUJMT0NLX1VOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1NfRVhURU5ERUQsICJVQ0FTX0V4dCBVbmlmaWVkX0NhbmFkaWFuX0Fib3JpZ2luYWxfU3lsbGFiaWNzX0V4dGVuZGVkIiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9USEFNLCAiVGFpX1RoYW0gVGFpX1RoYW0iKSwKKyAgICBWYWx1ZShVQkxPQ0tfVkVESUNfRVhURU5TSU9OUywgIlZlZGljX0V4dCBWZWRpY19FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX0xJU1UsICJMaXN1IExpc3UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQkFNVU0sICJCYW11bSBCYW11bSIpLAorICAgIFZhbHVlKFVCTE9DS19DT01NT05fSU5ESUNfTlVNQkVSX0ZPUk1TLCAiSW5kaWNfTnVtYmVyX0Zvcm1zIENvbW1vbl9JbmRpY19OdW1iZXJfRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfREVWQU5BR0FSSV9FWFRFTkRFRCwgIkRldmFuYWdhcmlfRXh0IERldmFuYWdhcmlfRXh0ZW5kZWQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQSwgIkphbW9fRXh0X0EgSGFuZ3VsX0phbW9fRXh0ZW5kZWRfQSIpLAorICAgIFZhbHVlKFVCTE9DS19KQVZBTkVTRSwgIkphdmFuZXNlIEphdmFuZXNlIiksCisgICAgVmFsdWUoVUJMT0NLX01ZQU5NQVJfRVhURU5ERURfQSwgIk15YW5tYXJfRXh0X0EgTXlhbm1hcl9FeHRlbmRlZF9BIiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9WSUVULCAiVGFpX1ZpZXQgVGFpX1ZpZXQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVFVEVJX01BWUVLLCAiTWVldGVpX01heWVrIE1lZXRlaV9NYXllayIpLAorICAgIFZhbHVlKFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9CLCAiSmFtb19FeHRfQiBIYW5ndWxfSmFtb19FeHRlbmRlZF9CIiksCisgICAgVmFsdWUoVUJMT0NLX0lNUEVSSUFMX0FSQU1BSUMsICJJbXBlcmlhbF9BcmFtYWljIEltcGVyaWFsX0FyYW1haWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT0xEX1NPVVRIX0FSQUJJQU4sICJPbGRfU291dGhfQXJhYmlhbiBPbGRfU291dGhfQXJhYmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19BVkVTVEFOLCAiQXZlc3RhbiBBdmVzdGFuIiksCisgICAgVmFsdWUoVUJMT0NLX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4sICJJbnNjcmlwdGlvbmFsX1BhcnRoaWFuIEluc2NyaXB0aW9uYWxfUGFydGhpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfSU5TQ1JJUFRJT05BTF9QQUhMQVZJLCAiSW5zY3JpcHRpb25hbF9QYWhsYXZpIEluc2NyaXB0aW9uYWxfUGFobGF2aSIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfVFVSS0lDLCAiT2xkX1R1cmtpYyBPbGRfVHVya2ljIiksCisgICAgVmFsdWUoVUJMT0NLX1JVTUlfTlVNRVJBTF9TWU1CT0xTLCAiUnVtaSBSdW1pX051bWVyYWxfU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19LQUlUSEksICJLYWl0aGkgS2FpdGhpIiksCisgICAgVmFsdWUoVUJMT0NLX0VHWVBUSUFOX0hJRVJPR0xZUEhTLCAiRWd5cHRpYW5fSGllcm9nbHlwaHMgRWd5cHRpYW5fSGllcm9nbHlwaHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfQUxQSEFOVU1FUklDX1NVUFBMRU1FTlQsICJFbmNsb3NlZF9BbHBoYW51bV9TdXAgRW5jbG9zZWRfQWxwaGFudW1lcmljX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfSURFT0dSQVBISUNfU1VQUExFTUVOVCwgIkVuY2xvc2VkX0lkZW9ncmFwaGljX1N1cCBFbmNsb3NlZF9JZGVvZ3JhcGhpY19TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0MsICJDSktfRXh0X0MgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fQyIpLAorICAgIFZhbHVlKFVCTE9DS19NQU5EQUlDLCAiTWFuZGFpYyBNYW5kYWljIiksCisgICAgVmFsdWUoVUJMT0NLX0JBVEFLLCAiQmF0YWsgQmF0YWsiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRVRISU9QSUNfRVhURU5ERURfQSwgIkV0aGlvcGljX0V4dF9BIEV0aGlvcGljX0V4dGVuZGVkX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlJBSE1JLCAiQnJhaG1pIEJyYWhtaSIpLAorICAgIFZhbHVlKFVCTE9DS19CQU1VTV9TVVBQTEVNRU5ULCAiQmFtdW1fU3VwIEJhbXVtX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOQV9TVVBQTEVNRU5ULCAiS2FuYV9TdXAgS2FuYV9TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX1BMQVlJTkdfQ0FSRFMsICJQbGF5aW5nX0NhcmRzIFBsYXlpbmdfQ2FyZHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9QSUNUT0dSQVBIUywgIk1pc2NfUGljdG9ncmFwaHMgTWlzY2VsbGFuZW91c19TeW1ib2xzX0FuZF9QaWN0b2dyYXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19FTU9USUNPTlMsICJFbW90aWNvbnMgRW1vdGljb25zIiksCisgICAgVmFsdWUoVUJMT0NLX1RSQU5TUE9SVF9BTkRfTUFQX1NZTUJPTFMsICJUcmFuc3BvcnRfQW5kX01hcCBUcmFuc3BvcnRfQW5kX01hcF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0FMQ0hFTUlDQUxfU1lNQk9MUywgIkFsY2hlbWljYWwgQWxjaGVtaWNhbF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0QsICJDSktfRXh0X0QgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fRCIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfRVhURU5ERURfQSwgIkFyYWJpY19FeHRfQSBBcmFiaWNfRXh0ZW5kZWRfQSIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfTUFUSEVNQVRJQ0FMX0FMUEhBQkVUSUNfU1lNQk9MUywgIkFyYWJpY19NYXRoIEFyYWJpY19NYXRoZW1hdGljYWxfQWxwaGFiZXRpY19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NIQUtNQSwgIkNoYWttYSBDaGFrbWEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVFVEVJX01BWUVLX0VYVEVOU0lPTlMsICJNZWV0ZWlfTWF5ZWtfRXh0IE1lZXRlaV9NYXlla19FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX01FUk9JVElDX0NVUlNJVkUsICJNZXJvaXRpY19DdXJzaXZlIE1lcm9pdGljX0N1cnNpdmUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVST0lUSUNfSElFUk9HTFlQSFMsICJNZXJvaXRpY19IaWVyb2dseXBocyBNZXJvaXRpY19IaWVyb2dseXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19NSUFPLCAiTWlhbyBNaWFvIiksCisgICAgVmFsdWUoVUJMT0NLX1NIQVJBREEsICJTaGFyYWRhIFNoYXJhZGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU09SQV9TT01QRU5HLCAiU29yYV9Tb21wZW5nIFNvcmFfU29tcGVuZyIpLAorICAgIFZhbHVlKFVCTE9DS19TVU5EQU5FU0VfU1VQUExFTUVOVCwgIlN1bmRhbmVzZV9TdXAgU3VuZGFuZXNlX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVEFLUkksICJUYWtyaSBUYWtyaSIpLAorICAgIFZhbHVlKFVCTE9DS19CQVNTQV9WQUgsICJCYXNzYV9WYWggQmFzc2FfVmFoIiksCisgICAgVmFsdWUoVUJMT0NLX0NBVUNBU0lBTl9BTEJBTklBTiwgIkNhdWNhc2lhbl9BbGJhbmlhbiBDYXVjYXNpYW5fQWxiYW5pYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ09QVElDX0VQQUNUX05VTUJFUlMsICJDb3B0aWNfRXBhY3RfTnVtYmVycyBDb3B0aWNfRXBhY3RfTnVtYmVycyIpLAorICAgIFZhbHVlKFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1NfRVhURU5ERUQsICJEaWFjcml0aWNhbHNfRXh0IENvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19FeHRlbmRlZCIpLAorICAgIFZhbHVlKFVCTE9DS19EVVBMT1lBTiwgIkR1cGxveWFuIER1cGxveWFuIiksCisgICAgVmFsdWUoVUJMT0NLX0VMQkFTQU4sICJFbGJhc2FuIEVsYmFzYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfR0VPTUVUUklDX1NIQVBFU19FWFRFTkRFRCwgIkdlb21ldHJpY19TaGFwZXNfRXh0IEdlb21ldHJpY19TaGFwZXNfRXh0ZW5kZWQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR1JBTlRIQSwgIkdyYW50aGEgR3JhbnRoYSIpLAorICAgIFZhbHVlKFVCTE9DS19LSE9KS0ksICJLaG9qa2kgS2hvamtpIiksCisgICAgVmFsdWUoVUJMT0NLX0tIVURBV0FESSwgIktodWRhd2FkaSBLaHVkYXdhZGkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fRVhURU5ERURfRSwgIkxhdGluX0V4dF9FIExhdGluX0V4dGVuZGVkX0UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTElORUFSX0EsICJMaW5lYXJfQSBMaW5lYXJfQSIpLAorICAgIFZhbHVlKFVCTE9DS19NQUhBSkFOSSwgIk1haGFqYW5pIE1haGFqYW5pIiksCisgICAgVmFsdWUoVUJMT0NLX01BTklDSEFFQU4sICJNYW5pY2hhZWFuIE1hbmljaGFlYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVOREVfS0lLQUtVSSwgIk1lbmRlX0tpa2FrdWkgTWVuZGVfS2lrYWt1aSIpLAorICAgIFZhbHVlKFVCTE9DS19NT0RJLCAiTW9kaSBNb2RpIiksCisgICAgVmFsdWUoVUJMT0NLX01STywgIk1ybyBNcm8iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTVlBTk1BUl9FWFRFTkRFRF9CLCAiTXlhbm1hcl9FeHRfQiBNeWFubWFyX0V4dGVuZGVkX0IiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTkFCQVRBRUFOLCAiTmFiYXRhZWFuIE5hYmF0YWVhbiIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfTk9SVEhfQVJBQklBTiwgIk9sZF9Ob3J0aF9BcmFiaWFuIE9sZF9Ob3J0aF9BcmFiaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX09MRF9QRVJNSUMsICJPbGRfUGVybWljIE9sZF9QZXJtaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT1JOQU1FTlRBTF9ESU5HQkFUUywgIk9ybmFtZW50YWxfRGluZ2JhdHMgT3JuYW1lbnRhbF9EaW5nYmF0cyIpLAorICAgIFZhbHVlKFVCTE9DS19QQUhBV0hfSE1PTkcsICJQYWhhd2hfSG1vbmcgUGFoYXdoX0htb25nIiksCisgICAgVmFsdWUoVUJMT0NLX1BBTE1ZUkVORSwgIlBhbG15cmVuZSBQYWxteXJlbmUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfUEFVX0NJTl9IQVUsICJQYXVfQ2luX0hhdSBQYXVfQ2luX0hhdSIpLAorICAgIFZhbHVlKFVCTE9DS19QU0FMVEVSX1BBSExBVkksICJQc2FsdGVyX1BhaGxhdmkgUHNhbHRlcl9QYWhsYXZpIiksCisgICAgVmFsdWUoVUJMT0NLX1NIT1JUSEFORF9GT1JNQVRfQ09OVFJPTFMsICJTaG9ydGhhbmRfRm9ybWF0X0NvbnRyb2xzIFNob3J0aGFuZF9Gb3JtYXRfQ29udHJvbHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU0lEREhBTSwgIlNpZGRoYW0gU2lkZGhhbSIpLAorICAgIFZhbHVlKFVCTE9DS19TSU5IQUxBX0FSQ0hBSUNfTlVNQkVSUywgIlNpbmhhbGFfQXJjaGFpY19OdW1iZXJzIFNpbmhhbGFfQXJjaGFpY19OdW1iZXJzIiksCisgICAgVmFsdWUoVUJMT0NLX1NVUFBMRU1FTlRBTF9BUlJPV1NfQywgIlN1cF9BcnJvd3NfQyBTdXBwbGVtZW50YWxfQXJyb3dzX0MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVElSSFVUQSwgIlRpcmh1dGEgVGlyaHV0YSIpLAorICAgIFZhbHVlKFVCTE9DS19XQVJBTkdfQ0lUSSwgIldhcmFuZ19DaXRpIFdhcmFuZ19DaXRpIiksCisgICAgVmFsdWUoVUJMT0NLX0FIT00sICJBaG9tIEFob20iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQU5BVE9MSUFOX0hJRVJPR0xZUEhTLCAiQW5hdG9saWFuX0hpZXJvZ2x5cGhzIEFuYXRvbGlhbl9IaWVyb2dseXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19DSEVST0tFRV9TVVBQTEVNRU5ULCAiQ2hlcm9rZWVfU3VwIENoZXJva2VlX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRSwgIkNKS19FeHRfRSBDSktfVW5pZmllZF9JZGVvZ3JhcGhzX0V4dGVuc2lvbl9FIiksCisgICAgVmFsdWUoVUJMT0NLX0VBUkxZX0RZTkFTVElDX0NVTkVJRk9STSwgIkVhcmx5X0R5bmFzdGljX0N1bmVpZm9ybSBFYXJseV9EeW5hc3RpY19DdW5laWZvcm0iKSwKKyAgICBWYWx1ZShVQkxPQ0tfSEFUUkFOLCAiSGF0cmFuIEhhdHJhbiIpLAorICAgIFZhbHVlKFVCTE9DS19NVUxUQU5JLCAiTXVsdGFuaSBNdWx0YW5pIiksCisgICAgVmFsdWUoVUJMT0NLX09MRF9IVU5HQVJJQU4sICJPbGRfSHVuZ2FyaWFuIE9sZF9IdW5nYXJpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1VQUExFTUVOVEFMX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTLCAiU3VwX1N5bWJvbHNfQW5kX1BpY3RvZ3JhcGhzIFN1cHBsZW1lbnRhbF9TeW1ib2xzX0FuZF9QaWN0b2dyYXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19TVVRUT05fU0lHTldSSVRJTkcsICJTdXR0b25fU2lnbldyaXRpbmcgU3V0dG9uX1NpZ25Xcml0aW5nIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2NjY1s1N10gPSB7CisgICAgVmFsdWUoMCwgIk5SIE5vdF9SZW9yZGVyZWQiKSwKKyAgICBWYWx1ZSgxLCAiT1YgT3ZlcmxheSIpLAorICAgIFZhbHVlKDcsICJOSyBOdWt0YSIpLAorICAgIFZhbHVlKDgsICJLViBLYW5hX1ZvaWNpbmciKSwKKyAgICBWYWx1ZSg5LCAiVlIgVmlyYW1hIiksCisgICAgVmFsdWUoMTAsICJDQ0MxMCBDQ0MxMCIpLAorICAgIFZhbHVlKDExLCAiQ0NDMTEgQ0NDMTEiKSwKKyAgICBWYWx1ZSgxMiwgIkNDQzEyIENDQzEyIiksCisgICAgVmFsdWUoMTMsICJDQ0MxMyBDQ0MxMyIpLAorICAgIFZhbHVlKDE0LCAiQ0NDMTQgQ0NDMTQiKSwKKyAgICBWYWx1ZSgxNSwgIkNDQzE1IENDQzE1IiksCisgICAgVmFsdWUoMTYsICJDQ0MxNiBDQ0MxNiIpLAorICAgIFZhbHVlKDE3LCAiQ0NDMTcgQ0NDMTciKSwKKyAgICBWYWx1ZSgxOCwgIkNDQzE4IENDQzE4IiksCisgICAgVmFsdWUoMTksICJDQ0MxOSBDQ0MxOSIpLAorICAgIFZhbHVlKDIwLCAiQ0NDMjAgQ0NDMjAiKSwKKyAgICBWYWx1ZSgyMSwgIkNDQzIxIENDQzIxIiksCisgICAgVmFsdWUoMjIsICJDQ0MyMiBDQ0MyMiIpLAorICAgIFZhbHVlKDIzLCAiQ0NDMjMgQ0NDMjMiKSwKKyAgICBWYWx1ZSgyNCwgIkNDQzI0IENDQzI0IiksCisgICAgVmFsdWUoMjUsICJDQ0MyNSBDQ0MyNSIpLAorICAgIFZhbHVlKDI2LCAiQ0NDMjYgQ0NDMjYiKSwKKyAgICBWYWx1ZSgyNywgIkNDQzI3IENDQzI3IiksCisgICAgVmFsdWUoMjgsICJDQ0MyOCBDQ0MyOCIpLAorICAgIFZhbHVlKDI5LCAiQ0NDMjkgQ0NDMjkiKSwKKyAgICBWYWx1ZSgzMCwgIkNDQzMwIENDQzMwIiksCisgICAgVmFsdWUoMzEsICJDQ0MzMSBDQ0MzMSIpLAorICAgIFZhbHVlKDMyLCAiQ0NDMzIgQ0NDMzIiKSwKKyAgICBWYWx1ZSgzMywgIkNDQzMzIENDQzMzIiksCisgICAgVmFsdWUoMzQsICJDQ0MzNCBDQ0MzNCIpLAorICAgIFZhbHVlKDM1LCAiQ0NDMzUgQ0NDMzUiKSwKKyAgICBWYWx1ZSgzNiwgIkNDQzM2IENDQzM2IiksCisgICAgVmFsdWUoODQsICJDQ0M4NCBDQ0M4NCIpLAorICAgIFZhbHVlKDkxLCAiQ0NDOTEgQ0NDOTEiKSwKKyAgICBWYWx1ZSgxMDMsICJDQ0MxMDMgQ0NDMTAzIiksCisgICAgVmFsdWUoMTA3LCAiQ0NDMTA3IENDQzEwNyIpLAorICAgIFZhbHVlKDExOCwgIkNDQzExOCBDQ0MxMTgiKSwKKyAgICBWYWx1ZSgxMjIsICJDQ0MxMjIgQ0NDMTIyIiksCisgICAgVmFsdWUoMTI5LCAiQ0NDMTI5IENDQzEyOSIpLAorICAgIFZhbHVlKDEzMCwgIkNDQzEzMCBDQ0MxMzAiKSwKKyAgICBWYWx1ZSgxMzIsICJDQ0MxMzIgQ0NDMTMyIiksCisgICAgVmFsdWUoMTMzLCAiQ0NDMTMzIENDQzEzMyIpLAorICAgIFZhbHVlKDIwMCwgIkFUQkwgQXR0YWNoZWRfQmVsb3dfTGVmdCIpLAorICAgIFZhbHVlKDIwMiwgIkFUQiBBdHRhY2hlZF9CZWxvdyIpLAorICAgIFZhbHVlKDIxNCwgIkFUQSBBdHRhY2hlZF9BYm92ZSIpLAorICAgIFZhbHVlKDIxNiwgIkFUQVIgQXR0YWNoZWRfQWJvdmVfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMTgsICJCTCBCZWxvd19MZWZ0IiksCisgICAgVmFsdWUoMjIwLCAiQiBCZWxvdyIpLAorICAgIFZhbHVlKDIyMiwgIkJSIEJlbG93X1JpZ2h0IiksCisgICAgVmFsdWUoMjI0LCAiTCBMZWZ0IiksCisgICAgVmFsdWUoMjI2LCAiUiBSaWdodCIpLAorICAgIFZhbHVlKDIyOCwgIkFMIEFib3ZlX0xlZnQiKSwKKyAgICBWYWx1ZSgyMzAsICJBIEFib3ZlIiksCisgICAgVmFsdWUoMjMyLCAiQVIgQWJvdmVfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMzMsICJEQiBEb3VibGVfQmVsb3ciKSwKKyAgICBWYWx1ZSgyMzQsICJEQSBEb3VibGVfQWJvdmUiKSwKKyAgICBWYWx1ZSgyNDAsICJJUyBJb3RhX1N1YnNjcmlwdCIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19kdFsxOF0gPSB7CisgICAgVmFsdWUoVV9EVF9OT05FLCAiTm9uZSBOb25lIG5vbmUiKSwKKyAgICBWYWx1ZShVX0RUX0NBTk9OSUNBTCwgIkNhbiBDYW5vbmljYWwgY2FuIiksCisgICAgVmFsdWUoVV9EVF9DT01QQVQsICJDb20gQ29tcGF0IGNvbSIpLAorICAgIFZhbHVlKFVfRFRfQ0lSQ0xFLCAiRW5jIENpcmNsZSBlbmMiKSwKKyAgICBWYWx1ZShVX0RUX0ZJTkFMLCAiRmluIEZpbmFsIGZpbiIpLAorICAgIFZhbHVlKFVfRFRfRk9OVCwgIkZvbnQgRm9udCBmb250IiksCisgICAgVmFsdWUoVV9EVF9GUkFDVElPTiwgIkZyYSBGcmFjdGlvbiBmcmEiKSwKKyAgICBWYWx1ZShVX0RUX0lOSVRJQUwsICJJbml0IEluaXRpYWwgaW5pdCIpLAorICAgIFZhbHVlKFVfRFRfSVNPTEFURUQsICJJc28gSXNvbGF0ZWQgaXNvIiksCisgICAgVmFsdWUoVV9EVF9NRURJQUwsICJNZWQgTWVkaWFsIG1lZCIpLAorICAgIFZhbHVlKFVfRFRfTkFSUk9XLCAiTmFyIE5hcnJvdyBuYXIiKSwKKyAgICBWYWx1ZShVX0RUX05PQlJFQUssICJOYiBOb2JyZWFrIG5iIiksCisgICAgVmFsdWUoVV9EVF9TTUFMTCwgIlNtbCBTbWFsbCBzbWwiKSwKKyAgICBWYWx1ZShVX0RUX1NRVUFSRSwgIlNxciBTcXVhcmUgc3FyIiksCisgICAgVmFsdWUoVV9EVF9TVUIsICJTdWIgU3ViIHN1YiIpLAorICAgIFZhbHVlKFVfRFRfU1VQRVIsICJTdXAgU3VwZXIgc3VwIiksCisgICAgVmFsdWUoVV9EVF9WRVJUSUNBTCwgIlZlcnQgVmVydGljYWwgdmVydCIpLAorICAgIFZhbHVlKFVfRFRfV0lERSwgIldpZGUgV2lkZSB3aWRlIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2VhWzZdID0geworICAgIFZhbHVlKFVfRUFfTkVVVFJBTCwgIk4gTmV1dHJhbCIpLAorICAgIFZhbHVlKFVfRUFfQU1CSUdVT1VTLCAiQSBBbWJpZ3VvdXMiKSwKKyAgICBWYWx1ZShVX0VBX0hBTEZXSURUSCwgIkggSGFsZndpZHRoIiksCisgICAgVmFsdWUoVV9FQV9GVUxMV0lEVEgsICJGIEZ1bGx3aWR0aCIpLAorICAgIFZhbHVlKFVfRUFfTkFSUk9XLCAiTmEgTmFycm93IiksCisgICAgVmFsdWUoVV9FQV9XSURFLCAiVyBXaWRlIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2djWzMwXSA9IHsKKyAgICBWYWx1ZShVX0dFTkVSQUxfT1RIRVJfVFlQRVMsICJDbiBVbmFzc2lnbmVkIiksCisgICAgVmFsdWUoVV9VUFBFUkNBU0VfTEVUVEVSLCAiTHUgVXBwZXJjYXNlX0xldHRlciIpLAorICAgIFZhbHVlKFVfTE9XRVJDQVNFX0xFVFRFUiwgIkxsIExvd2VyY2FzZV9MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1RJVExFQ0FTRV9MRVRURVIsICJMdCBUaXRsZWNhc2VfTGV0dGVyIiksCisgICAgVmFsdWUoVV9NT0RJRklFUl9MRVRURVIsICJMbSBNb2RpZmllcl9MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX09USEVSX0xFVFRFUiwgIkxvIE90aGVyX0xldHRlciIpLAorICAgIFZhbHVlKFVfTk9OX1NQQUNJTkdfTUFSSywgIk1uIE5vbnNwYWNpbmdfTWFyayIpLAorICAgIFZhbHVlKFVfRU5DTE9TSU5HX01BUkssICJNZSBFbmNsb3NpbmdfTWFyayIpLAorICAgIFZhbHVlKFVfQ09NQklOSU5HX1NQQUNJTkdfTUFSSywgIk1jIFNwYWNpbmdfTWFyayIpLAorICAgIFZhbHVlKFVfREVDSU1BTF9ESUdJVF9OVU1CRVIsICJOZCBEZWNpbWFsX051bWJlciBkaWdpdCIpLAorICAgIFZhbHVlKFVfTEVUVEVSX05VTUJFUiwgIk5sIExldHRlcl9OdW1iZXIiKSwKKyAgICBWYWx1ZShVX09USEVSX05VTUJFUiwgIk5vIE90aGVyX051bWJlciIpLAorICAgIFZhbHVlKFVfU1BBQ0VfU0VQQVJBVE9SLCAiWnMgU3BhY2VfU2VwYXJhdG9yIiksCisgICAgVmFsdWUoVV9MSU5FX1NFUEFSQVRPUiwgIlpsIExpbmVfU2VwYXJhdG9yIiksCisgICAgVmFsdWUoVV9QQVJBR1JBUEhfU0VQQVJBVE9SLCAiWnAgUGFyYWdyYXBoX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKFVfQ09OVFJPTF9DSEFSLCAiQ2MgQ29udHJvbCBjbnRybCIpLAorICAgIFZhbHVlKFVfRk9STUFUX0NIQVIsICJDZiBGb3JtYXQiKSwKKyAgICBWYWx1ZShVX1BSSVZBVEVfVVNFX0NIQVIsICJDbyBQcml2YXRlX1VzZSIpLAorICAgIFZhbHVlKFVfU1VSUk9HQVRFLCAiQ3MgU3Vycm9nYXRlIiksCisgICAgVmFsdWUoVV9EQVNIX1BVTkNUVUFUSU9OLCAiUGQgRGFzaF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfU1RBUlRfUFVOQ1RVQVRJT04sICJQcyBPcGVuX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVV9FTkRfUFVOQ1RVQVRJT04sICJQZSBDbG9zZV9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfQ09OTkVDVE9SX1BVTkNUVUFUSU9OLCAiUGMgQ29ubmVjdG9yX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVV9PVEhFUl9QVU5DVFVBVElPTiwgIlBvIE90aGVyX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVV9NQVRIX1NZTUJPTCwgIlNtIE1hdGhfU3ltYm9sIiksCisgICAgVmFsdWUoVV9DVVJSRU5DWV9TWU1CT0wsICJTYyBDdXJyZW5jeV9TeW1ib2wiKSwKKyAgICBWYWx1ZShVX01PRElGSUVSX1NZTUJPTCwgIlNrIE1vZGlmaWVyX1N5bWJvbCIpLAorICAgIFZhbHVlKFVfT1RIRVJfU1lNQk9MLCAiU28gT3RoZXJfU3ltYm9sIiksCisgICAgVmFsdWUoVV9JTklUSUFMX1BVTkNUVUFUSU9OLCAiUGkgSW5pdGlhbF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfRklOQUxfUFVOQ1RVQVRJT04sICJQZiBGaW5hbF9QdW5jdHVhdGlvbiIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19qZ1s4Nl0gPSB7CisgICAgVmFsdWUoVV9KR19OT19KT0lOSU5HX0dST1VQLCAiTm9fSm9pbmluZ19Hcm91cCBOb19Kb2luaW5nX0dyb3VwIiksCisgICAgVmFsdWUoVV9KR19BSU4sICJBaW4gQWluIiksCisgICAgVmFsdWUoVV9KR19BTEFQSCwgIkFsYXBoIEFsYXBoIiksCisgICAgVmFsdWUoVV9KR19BTEVGLCAiQWxlZiBBbGVmIiksCisgICAgVmFsdWUoVV9KR19CRUgsICJCZWggQmVoIiksCisgICAgVmFsdWUoVV9KR19CRVRILCAiQmV0aCBCZXRoIiksCisgICAgVmFsdWUoVV9KR19EQUwsICJEYWwgRGFsIiksCisgICAgVmFsdWUoVV9KR19EQUxBVEhfUklTSCwgIkRhbGF0aF9SaXNoIERhbGF0aF9SaXNoIiksCisgICAgVmFsdWUoVV9KR19FLCAiRSBFIiksCisgICAgVmFsdWUoVV9KR19GRUgsICJGZWggRmVoIiksCisgICAgVmFsdWUoVV9KR19GSU5BTF9TRU1LQVRILCAiRmluYWxfU2Vta2F0aCBGaW5hbF9TZW1rYXRoIiksCisgICAgVmFsdWUoVV9KR19HQUYsICJHYWYgR2FmIiksCisgICAgVmFsdWUoVV9KR19HQU1BTCwgIkdhbWFsIEdhbWFsIiksCisgICAgVmFsdWUoVV9KR19IQUgsICJIYWggSGFoIiksCisgICAgVmFsdWUoVV9KR19URUhfTUFSQlVUQV9HT0FMLCAiVGVoX01hcmJ1dGFfR29hbCBIYW16YV9Pbl9IZWhfR29hbCIpLAorICAgIFZhbHVlKFVfSkdfSEUsICJIZSBIZSIpLAorICAgIFZhbHVlKFVfSkdfSEVILCAiSGVoIEhlaCIpLAorICAgIFZhbHVlKFVfSkdfSEVIX0dPQUwsICJIZWhfR29hbCBIZWhfR29hbCIpLAorICAgIFZhbHVlKFVfSkdfSEVUSCwgIkhldGggSGV0aCIpLAorICAgIFZhbHVlKFVfSkdfS0FGLCAiS2FmIEthZiIpLAorICAgIFZhbHVlKFVfSkdfS0FQSCwgIkthcGggS2FwaCIpLAorICAgIFZhbHVlKFVfSkdfS05PVFRFRF9IRUgsICJLbm90dGVkX0hlaCBLbm90dGVkX0hlaCIpLAorICAgIFZhbHVlKFVfSkdfTEFNLCAiTGFtIExhbSIpLAorICAgIFZhbHVlKFVfSkdfTEFNQURILCAiTGFtYWRoIExhbWFkaCIpLAorICAgIFZhbHVlKFVfSkdfTUVFTSwgIk1lZW0gTWVlbSIpLAorICAgIFZhbHVlKFVfSkdfTUlNLCAiTWltIE1pbSIpLAorICAgIFZhbHVlKFVfSkdfTk9PTiwgIk5vb24gTm9vbiIpLAorICAgIFZhbHVlKFVfSkdfTlVOLCAiTnVuIE51biIpLAorICAgIFZhbHVlKFVfSkdfUEUsICJQZSBQZSIpLAorICAgIFZhbHVlKFVfSkdfUUFGLCAiUWFmIFFhZiIpLAorICAgIFZhbHVlKFVfSkdfUUFQSCwgIlFhcGggUWFwaCIpLAorICAgIFZhbHVlKFVfSkdfUkVILCAiUmVoIFJlaCIpLAorICAgIFZhbHVlKFVfSkdfUkVWRVJTRURfUEUsICJSZXZlcnNlZF9QZSBSZXZlcnNlZF9QZSIpLAorICAgIFZhbHVlKFVfSkdfU0FELCAiU2FkIFNhZCIpLAorICAgIFZhbHVlKFVfSkdfU0FESEUsICJTYWRoZSBTYWRoZSIpLAorICAgIFZhbHVlKFVfSkdfU0VFTiwgIlNlZW4gU2VlbiIpLAorICAgIFZhbHVlKFVfSkdfU0VNS0FUSCwgIlNlbWthdGggU2Vta2F0aCIpLAorICAgIFZhbHVlKFVfSkdfU0hJTiwgIlNoaW4gU2hpbiIpLAorICAgIFZhbHVlKFVfSkdfU1dBU0hfS0FGLCAiU3dhc2hfS2FmIFN3YXNoX0thZiIpLAorICAgIFZhbHVlKFVfSkdfU1lSSUFDX1dBVywgIlN5cmlhY19XYXcgU3lyaWFjX1dhdyIpLAorICAgIFZhbHVlKFVfSkdfVEFILCAiVGFoIFRhaCIpLAorICAgIFZhbHVlKFVfSkdfVEFXLCAiVGF3IFRhdyIpLAorICAgIFZhbHVlKFVfSkdfVEVIX01BUkJVVEEsICJUZWhfTWFyYnV0YSBUZWhfTWFyYnV0YSIpLAorICAgIFZhbHVlKFVfSkdfVEVUSCwgIlRldGggVGV0aCIpLAorICAgIFZhbHVlKFVfSkdfV0FXLCAiV2F3IFdhdyIpLAorICAgIFZhbHVlKFVfSkdfWUVILCAiWWVoIFllaCIpLAorICAgIFZhbHVlKFVfSkdfWUVIX0JBUlJFRSwgIlllaF9CYXJyZWUgWWVoX0JhcnJlZSIpLAorICAgIFZhbHVlKFVfSkdfWUVIX1dJVEhfVEFJTCwgIlllaF9XaXRoX1RhaWwgWWVoX1dpdGhfVGFpbCIpLAorICAgIFZhbHVlKFVfSkdfWVVESCwgIll1ZGggWXVkaCIpLAorICAgIFZhbHVlKFVfSkdfWVVESF9IRSwgIll1ZGhfSGUgWXVkaF9IZSIpLAorICAgIFZhbHVlKFVfSkdfWkFJTiwgIlphaW4gWmFpbiIpLAorICAgIFZhbHVlKFVfSkdfRkUsICJGZSBGZSIpLAorICAgIFZhbHVlKFVfSkdfS0hBUEgsICJLaGFwaCBLaGFwaCIpLAorICAgIFZhbHVlKFVfSkdfWkhBSU4sICJaaGFpbiBaaGFpbiIpLAorICAgIFZhbHVlKFVfSkdfQlVSVVNIQVNLSV9ZRUhfQkFSUkVFLCAiQnVydXNoYXNraV9ZZWhfQmFycmVlIEJ1cnVzaGFza2lfWWVoX0JhcnJlZSIpLAorICAgIFZhbHVlKFVfSkdfRkFSU0lfWUVILCAiRmFyc2lfWWVoIEZhcnNpX1llaCIpLAorICAgIFZhbHVlKFVfSkdfTllBLCAiTnlhIE55YSIpLAorICAgIFZhbHVlKFVfSkdfUk9ISU5HWUFfWUVILCAiUm9oaW5neWFfWWVoIFJvaGluZ3lhX1llaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9BTEVQSCwgIk1hbmljaGFlYW5fQWxlcGggTWFuaWNoYWVhbl9BbGVwaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9BWUlOLCAiTWFuaWNoYWVhbl9BeWluIE1hbmljaGFlYW5fQXlpbiIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9CRVRILCAiTWFuaWNoYWVhbl9CZXRoIE1hbmljaGFlYW5fQmV0aCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9EQUxFVEgsICJNYW5pY2hhZWFuX0RhbGV0aCBNYW5pY2hhZWFuX0RhbGV0aCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9ESEFNRURILCAiTWFuaWNoYWVhbl9EaGFtZWRoIE1hbmljaGFlYW5fRGhhbWVkaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9GSVZFLCAiTWFuaWNoYWVhbl9GaXZlIE1hbmljaGFlYW5fRml2ZSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9HSU1FTCwgIk1hbmljaGFlYW5fR2ltZWwgTWFuaWNoYWVhbl9HaW1lbCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9IRVRILCAiTWFuaWNoYWVhbl9IZXRoIE1hbmljaGFlYW5fSGV0aCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9IVU5EUkVELCAiTWFuaWNoYWVhbl9IdW5kcmVkIE1hbmljaGFlYW5fSHVuZHJlZCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9LQVBILCAiTWFuaWNoYWVhbl9LYXBoIE1hbmljaGFlYW5fS2FwaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9MQU1FREgsICJNYW5pY2hhZWFuX0xhbWVkaCBNYW5pY2hhZWFuX0xhbWVkaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9NRU0sICJNYW5pY2hhZWFuX01lbSBNYW5pY2hhZWFuX01lbSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9OVU4sICJNYW5pY2hhZWFuX051biBNYW5pY2hhZWFuX051biIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9PTkUsICJNYW5pY2hhZWFuX09uZSBNYW5pY2hhZWFuX09uZSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9QRSwgIk1hbmljaGFlYW5fUGUgTWFuaWNoYWVhbl9QZSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9RT1BILCAiTWFuaWNoYWVhbl9Rb3BoIE1hbmljaGFlYW5fUW9waCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9SRVNILCAiTWFuaWNoYWVhbl9SZXNoIE1hbmljaGFlYW5fUmVzaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9TQURIRSwgIk1hbmljaGFlYW5fU2FkaGUgTWFuaWNoYWVhbl9TYWRoZSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9TQU1FS0gsICJNYW5pY2hhZWFuX1NhbWVraCBNYW5pY2hhZWFuX1NhbWVraCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9UQVcsICJNYW5pY2hhZWFuX1RhdyBNYW5pY2hhZWFuX1RhdyIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9URU4sICJNYW5pY2hhZWFuX1RlbiBNYW5pY2hhZWFuX1RlbiIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9URVRILCAiTWFuaWNoYWVhbl9UZXRoIE1hbmljaGFlYW5fVGV0aCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9USEFNRURILCAiTWFuaWNoYWVhbl9UaGFtZWRoIE1hbmljaGFlYW5fVGhhbWVkaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9UV0VOVFksICJNYW5pY2hhZWFuX1R3ZW50eSBNYW5pY2hhZWFuX1R3ZW50eSIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9XQVcsICJNYW5pY2hhZWFuX1dhdyBNYW5pY2hhZWFuX1dhdyIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9ZT0RILCAiTWFuaWNoYWVhbl9Zb2RoIE1hbmljaGFlYW5fWW9kaCIpLAorICAgIFZhbHVlKFVfSkdfTUFOSUNIQUVBTl9aQVlJTiwgIk1hbmljaGFlYW5fWmF5aW4gTWFuaWNoYWVhbl9aYXlpbiIpLAorICAgIFZhbHVlKFVfSkdfU1RSQUlHSFRfV0FXLCAiU3RyYWlnaHRfV2F3IFN0cmFpZ2h0X1dhdyIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19qdFs2XSA9IHsKKyAgICBWYWx1ZShVX0pUX05PTl9KT0lOSU5HLCAiVSBOb25fSm9pbmluZyIpLAorICAgIFZhbHVlKFVfSlRfSk9JTl9DQVVTSU5HLCAiQyBKb2luX0NhdXNpbmciKSwKKyAgICBWYWx1ZShVX0pUX0RVQUxfSk9JTklORywgIkQgRHVhbF9Kb2luaW5nIiksCisgICAgVmFsdWUoVV9KVF9MRUZUX0pPSU5JTkcsICJMIExlZnRfSm9pbmluZyIpLAorICAgIFZhbHVlKFVfSlRfUklHSFRfSk9JTklORywgIlIgUmlnaHRfSm9pbmluZyIpLAorICAgIFZhbHVlKFVfSlRfVFJBTlNQQVJFTlQsICJUIFRyYW5zcGFyZW50IiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2xiWzQwXSA9IHsKKyAgICBWYWx1ZShVX0xCX1VOS05PV04sICJYWCBVbmtub3duIiksCisgICAgVmFsdWUoVV9MQl9BTUJJR1VPVVMsICJBSSBBbWJpZ3VvdXMiKSwKKyAgICBWYWx1ZShVX0xCX0FMUEhBQkVUSUMsICJBTCBBbHBoYWJldGljIiksCisgICAgVmFsdWUoVV9MQl9CUkVBS19CT1RILCAiQjIgQnJlYWtfQm90aCIpLAorICAgIFZhbHVlKFVfTEJfQlJFQUtfQUZURVIsICJCQSBCcmVha19BZnRlciIpLAorICAgIFZhbHVlKFVfTEJfQlJFQUtfQkVGT1JFLCAiQkIgQnJlYWtfQmVmb3JlIiksCisgICAgVmFsdWUoVV9MQl9NQU5EQVRPUllfQlJFQUssICJCSyBNYW5kYXRvcnlfQnJlYWsiKSwKKyAgICBWYWx1ZShVX0xCX0NPTlRJTkdFTlRfQlJFQUssICJDQiBDb250aW5nZW50X0JyZWFrIiksCisgICAgVmFsdWUoVV9MQl9DTE9TRV9QVU5DVFVBVElPTiwgIkNMIENsb3NlX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVV9MQl9DT01CSU5JTkdfTUFSSywgIkNNIENvbWJpbmluZ19NYXJrIiksCisgICAgVmFsdWUoVV9MQl9DQVJSSUFHRV9SRVRVUk4sICJDUiBDYXJyaWFnZV9SZXR1cm4iKSwKKyAgICBWYWx1ZShVX0xCX0VYQ0xBTUFUSU9OLCAiRVggRXhjbGFtYXRpb24iKSwKKyAgICBWYWx1ZShVX0xCX0dMVUUsICJHTCBHbHVlIiksCisgICAgVmFsdWUoVV9MQl9IWVBIRU4sICJIWSBIeXBoZW4iKSwKKyAgICBWYWx1ZShVX0xCX0lERU9HUkFQSElDLCAiSUQgSWRlb2dyYXBoaWMiKSwKKyAgICBWYWx1ZShVX0xCX0lOU0VQQVJBQkxFLCAiSU4gSW5zZXBhcmFibGUgSW5zZXBlcmFibGUiKSwKKyAgICBWYWx1ZShVX0xCX0lORklYX05VTUVSSUMsICJJUyBJbmZpeF9OdW1lcmljIiksCisgICAgVmFsdWUoVV9MQl9MSU5FX0ZFRUQsICJMRiBMaW5lX0ZlZWQiKSwKKyAgICBWYWx1ZShVX0xCX05PTlNUQVJURVIsICJOUyBOb25zdGFydGVyIiksCisgICAgVmFsdWUoVV9MQl9OVU1FUklDLCAiTlUgTnVtZXJpYyIpLAorICAgIFZhbHVlKFVfTEJfT1BFTl9QVU5DVFVBVElPTiwgIk9QIE9wZW5fUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVX0xCX1BPU1RGSVhfTlVNRVJJQywgIlBPIFBvc3RmaXhfTnVtZXJpYyIpLAorICAgIFZhbHVlKFVfTEJfUFJFRklYX05VTUVSSUMsICJQUiBQcmVmaXhfTnVtZXJpYyIpLAorICAgIFZhbHVlKFVfTEJfUVVPVEFUSU9OLCAiUVUgUXVvdGF0aW9uIiksCisgICAgVmFsdWUoVV9MQl9DT01QTEVYX0NPTlRFWFQsICJTQSBDb21wbGV4X0NvbnRleHQiKSwKKyAgICBWYWx1ZShVX0xCX1NVUlJPR0FURSwgIlNHIFN1cnJvZ2F0ZSIpLAorICAgIFZhbHVlKFVfTEJfU1BBQ0UsICJTUCBTcGFjZSIpLAorICAgIFZhbHVlKFVfTEJfQlJFQUtfU1lNQk9MUywgIlNZIEJyZWFrX1N5bWJvbHMiKSwKKyAgICBWYWx1ZShVX0xCX1pXU1BBQ0UsICJaVyBaV1NwYWNlIiksCisgICAgVmFsdWUoVV9MQl9ORVhUX0xJTkUsICJOTCBOZXh0X0xpbmUiKSwKKyAgICBWYWx1ZShVX0xCX1dPUkRfSk9JTkVSLCAiV0ogV29yZF9Kb2luZXIiKSwKKyAgICBWYWx1ZShVX0xCX0gyLCAiSDIgSDIiKSwKKyAgICBWYWx1ZShVX0xCX0gzLCAiSDMgSDMiKSwKKyAgICBWYWx1ZShVX0xCX0pMLCAiSkwgSkwiKSwKKyAgICBWYWx1ZShVX0xCX0pULCAiSlQgSlQiKSwKKyAgICBWYWx1ZShVX0xCX0pWLCAiSlYgSlYiKSwKKyAgICBWYWx1ZShVX0xCX0NMT1NFX1BBUkVOVEhFU0lTLCAiQ1AgQ2xvc2VfUGFyZW50aGVzaXMiKSwKKyAgICBWYWx1ZShVX0xCX0NPTkRJVElPTkFMX0pBUEFORVNFX1NUQVJURVIsICJDSiBDb25kaXRpb25hbF9KYXBhbmVzZV9TdGFydGVyIiksCisgICAgVmFsdWUoVV9MQl9IRUJSRVdfTEVUVEVSLCAiSEwgSGVicmV3X0xldHRlciIpLAorICAgIFZhbHVlKFVfTEJfUkVHSU9OQUxfSU5ESUNBVE9SLCAiUkkgUmVnaW9uYWxfSW5kaWNhdG9yIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX250WzRdID0geworICAgIFZhbHVlKFVfTlRfTk9ORSwgIk5vbmUgTm9uZSIpLAorICAgIFZhbHVlKFVfTlRfREVDSU1BTCwgIkRlIERlY2ltYWwiKSwKKyAgICBWYWx1ZShVX05UX0RJR0lULCAiRGkgRGlnaXQiKSwKKyAgICBWYWx1ZShVX05UX05VTUVSSUMsICJOdSBOdW1lcmljIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX3NjWzE2N10gPSB7CisgICAgVmFsdWUoVVNDUklQVF9DT01NT04sICJaeXl5IENvbW1vbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSU5IRVJJVEVELCAiWmluaCBJbmhlcml0ZWQgUWFhaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQVJBQklDLCAiQXJhYiBBcmFiaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FSTUVOSUFOLCAiQXJtbiBBcm1lbmlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQkVOR0FMSSwgIkJlbmcgQmVuZ2FsaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQk9QT01PRk8sICJCb3BvIEJvcG9tb2ZvIiksCisgICAgVmFsdWUoVVNDUklQVF9DSEVST0tFRSwgIkNoZXIgQ2hlcm9rZWUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NPUFRJQywgIkNvcHQgQ29wdGljIFFhYWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NZUklMTElDLCAiQ3lybCBDeXJpbGxpYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfREVTRVJFVCwgIkRzcnQgRGVzZXJldCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfREVWQU5BR0FSSSwgIkRldmEgRGV2YW5hZ2FyaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfRVRISU9QSUMsICJFdGhpIEV0aGlvcGljIiksCisgICAgVmFsdWUoVVNDUklQVF9HRU9SR0lBTiwgIkdlb3IgR2VvcmdpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0dPVEhJQywgIkdvdGggR290aGljIiksCisgICAgVmFsdWUoVVNDUklQVF9HUkVFSywgIkdyZWsgR3JlZWsiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0dVSkFSQVRJLCAiR3VqciBHdWphcmF0aSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfR1VSTVVLSEksICJHdXJ1IEd1cm11a2hpIiksCisgICAgVmFsdWUoVVNDUklQVF9IQU4sICJIYW5pIEhhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSEFOR1VMLCAiSGFuZyBIYW5ndWwiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0hFQlJFVywgIkhlYnIgSGVicmV3IiksCisgICAgVmFsdWUoVVNDUklQVF9ISVJBR0FOQSwgIkhpcmEgSGlyYWdhbmEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tBTk5BREEsICJLbmRhIEthbm5hZGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tBVEFLQU5BLCAiS2FuYSBLYXRha2FuYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfS0hNRVIsICJLaG1yIEtobWVyIiksCisgICAgVmFsdWUoVVNDUklQVF9MQU8sICJMYW9vIExhbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTEFUSU4sICJMYXRuIExhdGluIiksCisgICAgVmFsdWUoVVNDUklQVF9NQUxBWUFMQU0sICJNbHltIE1hbGF5YWxhbSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTU9OR09MSUFOLCAiTW9uZyBNb25nb2xpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX01ZQU5NQVIsICJNeW1yIE15YW5tYXIiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09HSEFNLCAiT2dhbSBPZ2hhbSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT0xEX0lUQUxJQywgIkl0YWwgT2xkX0l0YWxpYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT1JJWUEsICJPcnlhIE9yaXlhIiksCisgICAgVmFsdWUoVVNDUklQVF9SVU5JQywgIlJ1bnIgUnVuaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NJTkhBTEEsICJTaW5oIFNpbmhhbGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NZUklBQywgIlN5cmMgU3lyaWFjIiksCisgICAgVmFsdWUoVVNDUklQVF9UQU1JTCwgIlRhbWwgVGFtaWwiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RFTFVHVSwgIlRlbHUgVGVsdWd1IiksCisgICAgVmFsdWUoVVNDUklQVF9USEFBTkEsICJUaGFhIFRoYWFuYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVEhBSSwgIlRoYWkgVGhhaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVElCRVRBTiwgIlRpYnQgVGliZXRhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ0FOQURJQU5fQUJPUklHSU5BTCwgIkNhbnMgQ2FuYWRpYW5fQWJvcmlnaW5hbCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfWUksICJZaWlpIFlpIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUdBTE9HLCAiVGdsZyBUYWdhbG9nIiksCisgICAgVmFsdWUoVVNDUklQVF9IQU5VTk9PLCAiSGFubyBIYW51bm9vIiksCisgICAgVmFsdWUoVVNDUklQVF9CVUhJRCwgIkJ1aGQgQnVoaWQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RBR0JBTldBLCAiVGFnYiBUYWdiYW53YSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQlJBSUxMRSwgIkJyYWkgQnJhaWxsZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ1lQUklPVCwgIkNwcnQgQ3lwcmlvdCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTElNQlUsICJMaW1iIExpbWJ1IiksCisgICAgVmFsdWUoVVNDUklQVF9MSU5FQVJfQiwgIkxpbmIgTGluZWFyX0IiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09TTUFOWUEsICJPc21hIE9zbWFueWEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NIQVZJQU4sICJTaGF3IFNoYXZpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RBSV9MRSwgIlRhbGUgVGFpX0xlIiksCisgICAgVmFsdWUoVVNDUklQVF9VR0FSSVRJQywgIlVnYXIgVWdhcml0aWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BLCAiSHJrdCBLYXRha2FuYV9Pcl9IaXJhZ2FuYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQlVHSU5FU0UsICJCdWdpIEJ1Z2luZXNlIiksCisgICAgVmFsdWUoVVNDUklQVF9HTEFHT0xJVElDLCAiR2xhZyBHbGFnb2xpdGljIiksCisgICAgVmFsdWUoVVNDUklQVF9LSEFST1NIVEhJLCAiS2hhciBLaGFyb3NodGhpIiksCisgICAgVmFsdWUoVVNDUklQVF9TWUxPVElfTkFHUkksICJTeWxvIFN5bG90aV9OYWdyaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTkVXX1RBSV9MVUUsICJUYWx1IE5ld19UYWlfTHVlIiksCisgICAgVmFsdWUoVVNDUklQVF9USUZJTkFHSCwgIlRmbmcgVGlmaW5hZ2giKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9QRVJTSUFOLCAiWHBlbyBPbGRfUGVyc2lhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQkFMSU5FU0UsICJCYWxpIEJhbGluZXNlIiksCisgICAgVmFsdWUoVVNDUklQVF9CQVRBSywgIkJhdGsgQmF0YWsiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JMSVNTWU1CT0xTLCAiQmxpcyBCbGlzIiksCisgICAgVmFsdWUoVVNDUklQVF9CUkFITUksICJCcmFoIEJyYWhtaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ0hBTSwgIkNoYW0gQ2hhbSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ0lSVEgsICJDaXJ0IENpcnQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9DSFVSQ0hfU0xBVk9OSUNfQ1lSSUxMSUMsICJDeXJzIEN5cnMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0RFTU9USUNfRUdZUFRJQU4sICJFZ3lkIEVneWQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0hJRVJBVElDX0VHWVBUSUFOLCAiRWd5aCBFZ3loIiksCisgICAgVmFsdWUoVVNDUklQVF9FR1lQVElBTl9ISUVST0dMWVBIUywgIkVneXAgRWd5cHRpYW5fSGllcm9nbHlwaHMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tIVVRTVVJJLCAiR2VvayBHZW9rIiksCisgICAgVmFsdWUoVVNDUklQVF9TSU1QTElGSUVEX0hBTiwgIkhhbnMgSGFucyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOLCAiSGFudCBIYW50IiksCisgICAgVmFsdWUoVVNDUklQVF9QQUhBV0hfSE1PTkcsICJIbW5nIFBhaGF3aF9IbW9uZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT0xEX0hVTkdBUklBTiwgIkh1bmcgT2xkX0h1bmdhcmlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSEFSQVBQQU5fSU5EVVMsICJJbmRzIEluZHMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0pBVkFORVNFLCAiSmF2YSBKYXZhbmVzZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfS0FZQUhfTEksICJLYWxpIEtheWFoX0xpIiksCisgICAgVmFsdWUoVVNDUklQVF9MQVRJTl9GUkFLVFVSLCAiTGF0ZiBMYXRmIiksCisgICAgVmFsdWUoVVNDUklQVF9MQVRJTl9HQUVMSUMsICJMYXRnIExhdGciKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xFUENIQSwgIkxlcGMgTGVwY2hhIiksCisgICAgVmFsdWUoVVNDUklQVF9MSU5FQVJfQSwgIkxpbmEgTGluZWFyX0EiKSwKKyAgICBWYWx1ZShVU0NSSVBUX01BTkRBSUMsICJNYW5kIE1hbmRhaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX01BWUFOX0hJRVJPR0xZUEhTLCAiTWF5YSBNYXlhIiksCisgICAgVmFsdWUoVVNDUklQVF9NRVJPSVRJQ19ISUVST0dMWVBIUywgIk1lcm8gTWVyb2l0aWNfSGllcm9nbHlwaHMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX05LTywgIk5rb28gTmtvIiksCisgICAgVmFsdWUoVVNDUklQVF9PUktIT04sICJPcmtoIE9sZF9UdXJraWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9QRVJNSUMsICJQZXJtIE9sZF9QZXJtaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1BIQUdTX1BBLCAiUGhhZyBQaGFnc19QYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUEhPRU5JQ0lBTiwgIlBobnggUGhvZW5pY2lhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUlBTywgIlBscmQgTWlhbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUk9OR09ST05HTywgIlJvcm8gUm9ybyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0FSQVRJLCAiU2FyYSBTYXJhIiksCisgICAgVmFsdWUoVVNDUklQVF9FU1RSQU5HRUxPX1NZUklBQywgIlN5cmUgU3lyZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfV0VTVEVSTl9TWVJJQUMsICJTeXJqIFN5cmoiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0VBU1RFUk5fU1lSSUFDLCAiU3lybiBTeXJuIiksCisgICAgVmFsdWUoVVNDUklQVF9URU5HV0FSLCAiVGVuZyBUZW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9WQUksICJWYWlpIFZhaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVklTSUJMRV9TUEVFQ0gsICJWaXNwIFZpc3AiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NVTkVJRk9STSwgIlhzdXggQ3VuZWlmb3JtIiksCisgICAgVmFsdWUoVVNDUklQVF9VTldSSVRURU5fTEFOR1VBR0VTLCAiWnh4eCBaeHh4IiksCisgICAgVmFsdWUoVVNDUklQVF9VTktOT1dOLCAiWnp6eiBVbmtub3duIiksCisgICAgVmFsdWUoVVNDUklQVF9DQVJJQU4sICJDYXJpIENhcmlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSkFQQU5FU0UsICJKcGFuIEpwYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xBTk5BLCAiTGFuYSBUYWlfVGhhbSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTFlDSUFOLCAiTHljaSBMeWNpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xZRElBTiwgIkx5ZGkgTHlkaWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9PTF9DSElLSSwgIk9sY2sgT2xfQ2hpa2kiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1JFSkFORywgIlJqbmcgUmVqYW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9TQVVSQVNIVFJBLCAiU2F1ciBTYXVyYXNodHJhIiksCisgICAgVmFsdWUoVVNDUklQVF9TSUdOX1dSSVRJTkcsICJTZ253IFNpZ25Xcml0aW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9TVU5EQU5FU0UsICJTdW5kIFN1bmRhbmVzZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTU9PTiwgIk1vb24gTW9vbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUVJVEVJX01BWUVLLCAiTXRlaSBNZWV0ZWlfTWF5ZWsiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0lNUEVSSUFMX0FSQU1BSUMsICJBcm1pIEltcGVyaWFsX0FyYW1haWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FWRVNUQU4sICJBdnN0IEF2ZXN0YW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NIQUtNQSwgIkNha20gQ2hha21hIiksCisgICAgVmFsdWUoVVNDUklQVF9LT1JFQU4sICJLb3JlIEtvcmUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tBSVRISSwgIkt0aGkgS2FpdGhpIiksCisgICAgVmFsdWUoVVNDUklQVF9NQU5JQ0hBRUFOLCAiTWFuaSBNYW5pY2hhZWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9JTlNDUklQVElPTkFMX1BBSExBVkksICJQaGxpIEluc2NyaXB0aW9uYWxfUGFobGF2aSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUFNBTFRFUl9QQUhMQVZJLCAiUGhscCBQc2FsdGVyX1BhaGxhdmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JPT0tfUEFITEFWSSwgIlBobHYgUGhsdiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSU5TQ1JJUFRJT05BTF9QQVJUSElBTiwgIlBydGkgSW5zY3JpcHRpb25hbF9QYXJ0aGlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0FNQVJJVEFOLCAiU2FtciBTYW1hcml0YW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RBSV9WSUVULCAiVGF2dCBUYWlfVmlldCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUFUSEVNQVRJQ0FMX05PVEFUSU9OLCAiWm10aCBabXRoIiksCisgICAgVmFsdWUoVVNDUklQVF9TWU1CT0xTLCAiWnN5bSBac3ltIiksCisgICAgVmFsdWUoVVNDUklQVF9CQU1VTSwgIkJhbXUgQmFtdW0iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xJU1UsICJMaXN1IExpc3UiKSwKKyAgICBWYWx1ZShVU0NSSVBUX05BS0hJX0dFQkEsICJOa2diIE5rZ2IiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9TT1VUSF9BUkFCSUFOLCAiU2FyYiBPbGRfU291dGhfQXJhYmlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQkFTU0FfVkFILCAiQmFzcyBCYXNzYV9WYWgiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0RVUExPWUFOLCAiRHVwbCBEdXBsb3lhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfRUxCQVNBTiwgIkVsYmEgRWxiYXNhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfR1JBTlRIQSwgIkdyYW4gR3JhbnRoYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfS1BFTExFLCAiS3BlbCBLcGVsIiksCisgICAgVmFsdWUoVVNDUklQVF9MT01BLCAiTG9tYSBMb21hIiksCisgICAgVmFsdWUoVVNDUklQVF9NRU5ERSwgIk1lbmQgTWVuZGVfS2lrYWt1aSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUVST0lUSUNfQ1VSU0lWRSwgIk1lcmMgTWVyb2l0aWNfQ3Vyc2l2ZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT0xEX05PUlRIX0FSQUJJQU4sICJOYXJiIE9sZF9Ob3J0aF9BcmFiaWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9OQUJBVEFFQU4sICJOYmF0IE5hYmF0YWVhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUEFMTVlSRU5FLCAiUGFsbSBQYWxteXJlbmUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tIVURBV0FESSwgIlNpbmQgS2h1ZGF3YWRpIiksCisgICAgVmFsdWUoVVNDUklQVF9XQVJBTkdfQ0lUSSwgIldhcmEgV2FyYW5nX0NpdGkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FGQUtBLCAiQWZhayBBZmFrIiksCisgICAgVmFsdWUoVVNDUklQVF9KVVJDSEVOLCAiSnVyYyBKdXJjIiksCisgICAgVmFsdWUoVVNDUklQVF9NUk8sICJNcm9vIE1ybyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTlVTSFUsICJOc2h1IE5zaHUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NIQVJBREEsICJTaHJkIFNoYXJhZGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NPUkFfU09NUEVORywgIlNvcmEgU29yYV9Tb21wZW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUtSSSwgIlRha3IgVGFrcmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RBTkdVVCwgIlRhbmcgVGFuZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfV09MRUFJLCAiV29sZSBXb2xlIiksCisgICAgVmFsdWUoVVNDUklQVF9BTkFUT0xJQU5fSElFUk9HTFlQSFMsICJIbHV3IEFuYXRvbGlhbl9IaWVyb2dseXBocyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfS0hPSktJLCAiS2hvaiBLaG9qa2kiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RJUkhVVEEsICJUaXJoIFRpcmh1dGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NBVUNBU0lBTl9BTEJBTklBTiwgIkFnaGIgQ2F1Y2FzaWFuX0FsYmFuaWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9NQUhBSkFOSSwgIk1haGogTWFoYWphbmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FIT00sICJBaG9tIEFob20iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0hBVFJBTiwgIkhhdHIgSGF0cmFuIiksCisgICAgVmFsdWUoVVNDUklQVF9NT0RJLCAiTW9kaSBNb2RpIiksCisgICAgVmFsdWUoVVNDUklQVF9NVUxUQU5JLCAiTXVsdCBNdWx0YW5pIiksCisgICAgVmFsdWUoVVNDUklQVF9QQVVfQ0lOX0hBVSwgIlBhdWMgUGF1X0Npbl9IYXUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NJRERIQU0sICJTaWRkIFNpZGRoYW0iKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfaHN0WzZdID0geworICAgIFZhbHVlKFVfSFNUX05PVF9BUFBMSUNBQkxFLCAiTkEgTm90X0FwcGxpY2FibGUiKSwKKyAgICBWYWx1ZShVX0hTVF9MRUFESU5HX0pBTU8sICJMIExlYWRpbmdfSmFtbyIpLAorICAgIFZhbHVlKFVfSFNUX1ZPV0VMX0pBTU8sICJWIFZvd2VsX0phbW8iKSwKKyAgICBWYWx1ZShVX0hTVF9UUkFJTElOR19KQU1PLCAiVCBUcmFpbGluZ19KYW1vIiksCisgICAgVmFsdWUoVV9IU1RfTFZfU1lMTEFCTEUsICJMViBMVl9TeWxsYWJsZSIpLAorICAgIFZhbHVlKFVfSFNUX0xWVF9TWUxMQUJMRSwgIkxWVCBMVlRfU3lsbGFibGUiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfTkZEX1FDWzJdID0geworICAgIFZhbHVlKFVOT1JNX05PLCAiTiBObyIpLAorICAgIFZhbHVlKFVOT1JNX1lFUywgIlkgWWVzIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX05GS0RfUUNbMl0gPSB7CisgICAgVmFsdWUoVU5PUk1fTk8sICJOIE5vIiksCisgICAgVmFsdWUoVU5PUk1fWUVTLCAiWSBZZXMiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfTkZDX1FDWzNdID0geworICAgIFZhbHVlKFVOT1JNX05PLCAiTiBObyIpLAorICAgIFZhbHVlKFVOT1JNX1lFUywgIlkgWWVzIiksCisgICAgVmFsdWUoVU5PUk1fTUFZQkUsICJNIE1heWJlIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX05GS0NfUUNbM10gPSB7CisgICAgVmFsdWUoVU5PUk1fTk8sICJOIE5vIiksCisgICAgVmFsdWUoVU5PUk1fWUVTLCAiWSBZZXMiKSwKKyAgICBWYWx1ZShVTk9STV9NQVlCRSwgIk0gTWF5YmUiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfbGNjY1s1N10gPSB7CisgICAgVmFsdWUoMCwgIk5SIE5vdF9SZW9yZGVyZWQiKSwKKyAgICBWYWx1ZSgxLCAiT1YgT3ZlcmxheSIpLAorICAgIFZhbHVlKDcsICJOSyBOdWt0YSIpLAorICAgIFZhbHVlKDgsICJLViBLYW5hX1ZvaWNpbmciKSwKKyAgICBWYWx1ZSg5LCAiVlIgVmlyYW1hIiksCisgICAgVmFsdWUoMTAsICJDQ0MxMCBDQ0MxMCIpLAorICAgIFZhbHVlKDExLCAiQ0NDMTEgQ0NDMTEiKSwKKyAgICBWYWx1ZSgxMiwgIkNDQzEyIENDQzEyIiksCisgICAgVmFsdWUoMTMsICJDQ0MxMyBDQ0MxMyIpLAorICAgIFZhbHVlKDE0LCAiQ0NDMTQgQ0NDMTQiKSwKKyAgICBWYWx1ZSgxNSwgIkNDQzE1IENDQzE1IiksCisgICAgVmFsdWUoMTYsICJDQ0MxNiBDQ0MxNiIpLAorICAgIFZhbHVlKDE3LCAiQ0NDMTcgQ0NDMTciKSwKKyAgICBWYWx1ZSgxOCwgIkNDQzE4IENDQzE4IiksCisgICAgVmFsdWUoMTksICJDQ0MxOSBDQ0MxOSIpLAorICAgIFZhbHVlKDIwLCAiQ0NDMjAgQ0NDMjAiKSwKKyAgICBWYWx1ZSgyMSwgIkNDQzIxIENDQzIxIiksCisgICAgVmFsdWUoMjIsICJDQ0MyMiBDQ0MyMiIpLAorICAgIFZhbHVlKDIzLCAiQ0NDMjMgQ0NDMjMiKSwKKyAgICBWYWx1ZSgyNCwgIkNDQzI0IENDQzI0IiksCisgICAgVmFsdWUoMjUsICJDQ0MyNSBDQ0MyNSIpLAorICAgIFZhbHVlKDI2LCAiQ0NDMjYgQ0NDMjYiKSwKKyAgICBWYWx1ZSgyNywgIkNDQzI3IENDQzI3IiksCisgICAgVmFsdWUoMjgsICJDQ0MyOCBDQ0MyOCIpLAorICAgIFZhbHVlKDI5LCAiQ0NDMjkgQ0NDMjkiKSwKKyAgICBWYWx1ZSgzMCwgIkNDQzMwIENDQzMwIiksCisgICAgVmFsdWUoMzEsICJDQ0MzMSBDQ0MzMSIpLAorICAgIFZhbHVlKDMyLCAiQ0NDMzIgQ0NDMzIiKSwKKyAgICBWYWx1ZSgzMywgIkNDQzMzIENDQzMzIiksCisgICAgVmFsdWUoMzQsICJDQ0MzNCBDQ0MzNCIpLAorICAgIFZhbHVlKDM1LCAiQ0NDMzUgQ0NDMzUiKSwKKyAgICBWYWx1ZSgzNiwgIkNDQzM2IENDQzM2IiksCisgICAgVmFsdWUoODQsICJDQ0M4NCBDQ0M4NCIpLAorICAgIFZhbHVlKDkxLCAiQ0NDOTEgQ0NDOTEiKSwKKyAgICBWYWx1ZSgxMDMsICJDQ0MxMDMgQ0NDMTAzIiksCisgICAgVmFsdWUoMTA3LCAiQ0NDMTA3IENDQzEwNyIpLAorICAgIFZhbHVlKDExOCwgIkNDQzExOCBDQ0MxMTgiKSwKKyAgICBWYWx1ZSgxMjIsICJDQ0MxMjIgQ0NDMTIyIiksCisgICAgVmFsdWUoMTI5LCAiQ0NDMTI5IENDQzEyOSIpLAorICAgIFZhbHVlKDEzMCwgIkNDQzEzMCBDQ0MxMzAiKSwKKyAgICBWYWx1ZSgxMzIsICJDQ0MxMzIgQ0NDMTMyIiksCisgICAgVmFsdWUoMTMzLCAiQ0NDMTMzIENDQzEzMyIpLAorICAgIFZhbHVlKDIwMCwgIkFUQkwgQXR0YWNoZWRfQmVsb3dfTGVmdCIpLAorICAgIFZhbHVlKDIwMiwgIkFUQiBBdHRhY2hlZF9CZWxvdyIpLAorICAgIFZhbHVlKDIxNCwgIkFUQSBBdHRhY2hlZF9BYm92ZSIpLAorICAgIFZhbHVlKDIxNiwgIkFUQVIgQXR0YWNoZWRfQWJvdmVfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMTgsICJCTCBCZWxvd19MZWZ0IiksCisgICAgVmFsdWUoMjIwLCAiQiBCZWxvdyIpLAorICAgIFZhbHVlKDIyMiwgIkJSIEJlbG93X1JpZ2h0IiksCisgICAgVmFsdWUoMjI0LCAiTCBMZWZ0IiksCisgICAgVmFsdWUoMjI2LCAiUiBSaWdodCIpLAorICAgIFZhbHVlKDIyOCwgIkFMIEFib3ZlX0xlZnQiKSwKKyAgICBWYWx1ZSgyMzAsICJBIEFib3ZlIiksCisgICAgVmFsdWUoMjMyLCAiQVIgQWJvdmVfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMzMsICJEQiBEb3VibGVfQmVsb3ciKSwKKyAgICBWYWx1ZSgyMzQsICJEQSBEb3VibGVfQWJvdmUiKSwKKyAgICBWYWx1ZSgyNDAsICJJUyBJb3RhX1N1YnNjcmlwdCIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU190Y2NjWzU3XSA9IHsKKyAgICBWYWx1ZSgwLCAiTlIgTm90X1Jlb3JkZXJlZCIpLAorICAgIFZhbHVlKDEsICJPViBPdmVybGF5IiksCisgICAgVmFsdWUoNywgIk5LIE51a3RhIiksCisgICAgVmFsdWUoOCwgIktWIEthbmFfVm9pY2luZyIpLAorICAgIFZhbHVlKDksICJWUiBWaXJhbWEiKSwKKyAgICBWYWx1ZSgxMCwgIkNDQzEwIENDQzEwIiksCisgICAgVmFsdWUoMTEsICJDQ0MxMSBDQ0MxMSIpLAorICAgIFZhbHVlKDEyLCAiQ0NDMTIgQ0NDMTIiKSwKKyAgICBWYWx1ZSgxMywgIkNDQzEzIENDQzEzIiksCisgICAgVmFsdWUoMTQsICJDQ0MxNCBDQ0MxNCIpLAorICAgIFZhbHVlKDE1LCAiQ0NDMTUgQ0NDMTUiKSwKKyAgICBWYWx1ZSgxNiwgIkNDQzE2IENDQzE2IiksCisgICAgVmFsdWUoMTcsICJDQ0MxNyBDQ0MxNyIpLAorICAgIFZhbHVlKDE4LCAiQ0NDMTggQ0NDMTgiKSwKKyAgICBWYWx1ZSgxOSwgIkNDQzE5IENDQzE5IiksCisgICAgVmFsdWUoMjAsICJDQ0MyMCBDQ0MyMCIpLAorICAgIFZhbHVlKDIxLCAiQ0NDMjEgQ0NDMjEiKSwKKyAgICBWYWx1ZSgyMiwgIkNDQzIyIENDQzIyIiksCisgICAgVmFsdWUoMjMsICJDQ0MyMyBDQ0MyMyIpLAorICAgIFZhbHVlKDI0LCAiQ0NDMjQgQ0NDMjQiKSwKKyAgICBWYWx1ZSgyNSwgIkNDQzI1IENDQzI1IiksCisgICAgVmFsdWUoMjYsICJDQ0MyNiBDQ0MyNiIpLAorICAgIFZhbHVlKDI3LCAiQ0NDMjcgQ0NDMjciKSwKKyAgICBWYWx1ZSgyOCwgIkNDQzI4IENDQzI4IiksCisgICAgVmFsdWUoMjksICJDQ0MyOSBDQ0MyOSIpLAorICAgIFZhbHVlKDMwLCAiQ0NDMzAgQ0NDMzAiKSwKKyAgICBWYWx1ZSgzMSwgIkNDQzMxIENDQzMxIiksCisgICAgVmFsdWUoMzIsICJDQ0MzMiBDQ0MzMiIpLAorICAgIFZhbHVlKDMzLCAiQ0NDMzMgQ0NDMzMiKSwKKyAgICBWYWx1ZSgzNCwgIkNDQzM0IENDQzM0IiksCisgICAgVmFsdWUoMzUsICJDQ0MzNSBDQ0MzNSIpLAorICAgIFZhbHVlKDM2LCAiQ0NDMzYgQ0NDMzYiKSwKKyAgICBWYWx1ZSg4NCwgIkNDQzg0IENDQzg0IiksCisgICAgVmFsdWUoOTEsICJDQ0M5MSBDQ0M5MSIpLAorICAgIFZhbHVlKDEwMywgIkNDQzEwMyBDQ0MxMDMiKSwKKyAgICBWYWx1ZSgxMDcsICJDQ0MxMDcgQ0NDMTA3IiksCisgICAgVmFsdWUoMTE4LCAiQ0NDMTE4IENDQzExOCIpLAorICAgIFZhbHVlKDEyMiwgIkNDQzEyMiBDQ0MxMjIiKSwKKyAgICBWYWx1ZSgxMjksICJDQ0MxMjkgQ0NDMTI5IiksCisgICAgVmFsdWUoMTMwLCAiQ0NDMTMwIENDQzEzMCIpLAorICAgIFZhbHVlKDEzMiwgIkNDQzEzMiBDQ0MxMzIiKSwKKyAgICBWYWx1ZSgxMzMsICJDQ0MxMzMgQ0NDMTMzIiksCisgICAgVmFsdWUoMjAwLCAiQVRCTCBBdHRhY2hlZF9CZWxvd19MZWZ0IiksCisgICAgVmFsdWUoMjAyLCAiQVRCIEF0dGFjaGVkX0JlbG93IiksCisgICAgVmFsdWUoMjE0LCAiQVRBIEF0dGFjaGVkX0Fib3ZlIiksCisgICAgVmFsdWUoMjE2LCAiQVRBUiBBdHRhY2hlZF9BYm92ZV9SaWdodCIpLAorICAgIFZhbHVlKDIxOCwgIkJMIEJlbG93X0xlZnQiKSwKKyAgICBWYWx1ZSgyMjAsICJCIEJlbG93IiksCisgICAgVmFsdWUoMjIyLCAiQlIgQmVsb3dfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMjQsICJMIExlZnQiKSwKKyAgICBWYWx1ZSgyMjYsICJSIFJpZ2h0IiksCisgICAgVmFsdWUoMjI4LCAiQUwgQWJvdmVfTGVmdCIpLAorICAgIFZhbHVlKDIzMCwgIkEgQWJvdmUiKSwKKyAgICBWYWx1ZSgyMzIsICJBUiBBYm92ZV9SaWdodCIpLAorICAgIFZhbHVlKDIzMywgIkRCIERvdWJsZV9CZWxvdyIpLAorICAgIFZhbHVlKDIzNCwgIkRBIERvdWJsZV9BYm92ZSIpLAorICAgIFZhbHVlKDI0MCwgIklTIElvdGFfU3Vic2NyaXB0IiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX0dDQlsxM10gPSB7CisgICAgVmFsdWUoVV9HQ0JfT1RIRVIsICJYWCBPdGhlciIpLAorICAgIFZhbHVlKFVfR0NCX0NPTlRST0wsICJDTiBDb250cm9sIiksCisgICAgVmFsdWUoVV9HQ0JfQ1IsICJDUiBDUiIpLAorICAgIFZhbHVlKFVfR0NCX0VYVEVORCwgIkVYIEV4dGVuZCIpLAorICAgIFZhbHVlKFVfR0NCX0wsICJMIEwiKSwKKyAgICBWYWx1ZShVX0dDQl9MRiwgIkxGIExGIiksCisgICAgVmFsdWUoVV9HQ0JfTFYsICJMViBMViIpLAorICAgIFZhbHVlKFVfR0NCX0xWVCwgIkxWVCBMVlQiKSwKKyAgICBWYWx1ZShVX0dDQl9ULCAiVCBUIiksCisgICAgVmFsdWUoVV9HQ0JfViwgIlYgViIpLAorICAgIFZhbHVlKFVfR0NCX1NQQUNJTkdfTUFSSywgIlNNIFNwYWNpbmdNYXJrIiksCisgICAgVmFsdWUoVV9HQ0JfUFJFUEVORCwgIlBQIFByZXBlbmQiKSwKKyAgICBWYWx1ZShVX0dDQl9SRUdJT05BTF9JTkRJQ0FUT1IsICJSSSBSZWdpb25hbF9JbmRpY2F0b3IiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfU0JbMTVdID0geworICAgIFZhbHVlKFVfU0JfT1RIRVIsICJYWCBPdGhlciIpLAorICAgIFZhbHVlKFVfU0JfQVRFUk0sICJBVCBBVGVybSIpLAorICAgIFZhbHVlKFVfU0JfQ0xPU0UsICJDTCBDbG9zZSIpLAorICAgIFZhbHVlKFVfU0JfRk9STUFULCAiRk8gRm9ybWF0IiksCisgICAgVmFsdWUoVV9TQl9MT1dFUiwgIkxPIExvd2VyIiksCisgICAgVmFsdWUoVV9TQl9OVU1FUklDLCAiTlUgTnVtZXJpYyIpLAorICAgIFZhbHVlKFVfU0JfT0xFVFRFUiwgIkxFIE9MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1NCX1NFUCwgIlNFIFNlcCIpLAorICAgIFZhbHVlKFVfU0JfU1AsICJTUCBTcCIpLAorICAgIFZhbHVlKFVfU0JfU1RFUk0sICJTVCBTVGVybSIpLAorICAgIFZhbHVlKFVfU0JfVVBQRVIsICJVUCBVcHBlciIpLAorICAgIFZhbHVlKFVfU0JfQ1IsICJDUiBDUiIpLAorICAgIFZhbHVlKFVfU0JfRVhURU5ELCAiRVggRXh0ZW5kIiksCisgICAgVmFsdWUoVV9TQl9MRiwgIkxGIExGIiksCisgICAgVmFsdWUoVV9TQl9TQ09OVElOVUUsICJTQyBTQ29udGludWUiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfV0JbMTddID0geworICAgIFZhbHVlKFVfV0JfT1RIRVIsICJYWCBPdGhlciIpLAorICAgIFZhbHVlKFVfV0JfQUxFVFRFUiwgIkxFIEFMZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1dCX0ZPUk1BVCwgIkZPIEZvcm1hdCIpLAorICAgIFZhbHVlKFVfV0JfS0FUQUtBTkEsICJLQSBLYXRha2FuYSIpLAorICAgIFZhbHVlKFVfV0JfTUlETEVUVEVSLCAiTUwgTWlkTGV0dGVyIiksCisgICAgVmFsdWUoVV9XQl9NSUROVU0sICJNTiBNaWROdW0iKSwKKyAgICBWYWx1ZShVX1dCX05VTUVSSUMsICJOVSBOdW1lcmljIiksCisgICAgVmFsdWUoVV9XQl9FWFRFTkROVU1MRVQsICJFWCBFeHRlbmROdW1MZXQiKSwKKyAgICBWYWx1ZShVX1dCX0NSLCAiQ1IgQ1IiKSwKKyAgICBWYWx1ZShVX1dCX0VYVEVORCwgIkV4dGVuZCBFeHRlbmQiKSwKKyAgICBWYWx1ZShVX1dCX0xGLCAiTEYgTEYiKSwKKyAgICBWYWx1ZShVX1dCX01JRE5VTUxFVCwgIk1CIE1pZE51bUxldCIpLAorICAgIFZhbHVlKFVfV0JfTkVXTElORSwgIk5MIE5ld2xpbmUiKSwKKyAgICBWYWx1ZShVX1dCX1JFR0lPTkFMX0lORElDQVRPUiwgIlJJIFJlZ2lvbmFsX0luZGljYXRvciIpLAorICAgIFZhbHVlKFVfV0JfSEVCUkVXX0xFVFRFUiwgIkhMIEhlYnJld19MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1dCX1NJTkdMRV9RVU9URSwgIlNRIFNpbmdsZV9RdW90ZSIpLAorICAgIFZhbHVlKFVfV0JfRE9VQkxFX1FVT1RFLCAiRFEgRG91YmxlX1F1b3RlIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2JwdFszXSA9IHsKKyAgICBWYWx1ZShVX0JQVF9OT05FLCAibiBOb25lIiksCisgICAgVmFsdWUoVV9CUFRfT1BFTiwgIm8gT3BlbiIpLAorICAgIFZhbHVlKFVfQlBUX0NMT1NFLCAiYyBDbG9zZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19nY21bMzhdID0geworICAgIFZhbHVlKChpbnQzMl90KVVfR0NfQ19NQVNLLCAiQyBPdGhlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfQ0NfTUFTSywgIkNjIENvbnRyb2wgY250cmwiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0NGX01BU0ssICJDZiBGb3JtYXQiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0NOX01BU0ssICJDbiBVbmFzc2lnbmVkIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19DT19NQVNLLCAiQ28gUHJpdmF0ZV9Vc2UiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0NTX01BU0ssICJDcyBTdXJyb2dhdGUiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0xfTUFTSywgIkwgTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19MQ19NQVNLLCAiTEMgQ2FzZWRfTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19MTF9NQVNLLCAiTGwgTG93ZXJjYXNlX0xldHRlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTE1fTUFTSywgIkxtIE1vZGlmaWVyX0xldHRlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTE9fTUFTSywgIkxvIE90aGVyX0xldHRlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTFRfTUFTSywgIkx0IFRpdGxlY2FzZV9MZXR0ZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0xVX01BU0ssICJMdSBVcHBlcmNhc2VfTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19NX01BU0ssICJNIE1hcmsgQ29tYmluaW5nX01hcmsiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX01DX01BU0ssICJNYyBTcGFjaW5nX01hcmsiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX01FX01BU0ssICJNZSBFbmNsb3NpbmdfTWFyayIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTU5fTUFTSywgIk1uIE5vbnNwYWNpbmdfTWFyayIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTl9NQVNLLCAiTiBOdW1iZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX05EX01BU0ssICJOZCBEZWNpbWFsX051bWJlciBkaWdpdCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTkxfTUFTSywgIk5sIExldHRlcl9OdW1iZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX05PX01BU0ssICJObyBPdGhlcl9OdW1iZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BfTUFTSywgIlAgUHVuY3R1YXRpb24gcHVuY3QiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BDX01BU0ssICJQYyBDb25uZWN0b3JfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BEX01BU0ssICJQZCBEYXNoX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19QRV9NQVNLLCAiUGUgQ2xvc2VfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BGX01BU0ssICJQZiBGaW5hbF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUElfTUFTSywgIlBpIEluaXRpYWxfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BPX01BU0ssICJQbyBPdGhlcl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUFNfTUFTSywgIlBzIE9wZW5fUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1NfTUFTSywgIlMgU3ltYm9sIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19TQ19NQVNLLCAiU2MgQ3VycmVuY3lfU3ltYm9sIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19TS19NQVNLLCAiU2sgTW9kaWZpZXJfU3ltYm9sIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19TTV9NQVNLLCAiU20gTWF0aF9TeW1ib2wiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1NPX01BU0ssICJTbyBPdGhlcl9TeW1ib2wiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1pfTUFTSywgIlogU2VwYXJhdG9yIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19aTF9NQVNLLCAiWmwgTGluZV9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1pQX01BU0ssICJacCBQYXJhZ3JhcGhfU2VwYXJhdG9yIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19aU19NQVNLLCAiWnMgU3BhY2VfU2VwYXJhdG9yIiksCit9OworCitzdGF0aWMgY29uc3QgUHJvcGVydHkgUFJPUEVSVElFU1s5Nl0gPSB7CisgICAgUHJvcGVydHkoVUNIQVJfQUxQSEFCRVRJQywgIkFscGhhIEFscGhhYmV0aWMiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9BU0NJSV9IRVhfRElHSVQsICJBSGV4IEFTQ0lJX0hleF9EaWdpdCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfQ09OVFJPTCwgIkJpZGlfQyBCaWRpX0NvbnRyb2wiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9CSURJX01JUlJPUkVELCAiQmlkaV9NIEJpZGlfTWlycm9yZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9EQVNILCAiRGFzaCBEYXNoIiksCisgICAgUHJvcGVydHkoVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVCwgIkRJIERlZmF1bHRfSWdub3JhYmxlX0NvZGVfUG9pbnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ERVBSRUNBVEVELCAiRGVwIERlcHJlY2F0ZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ESUFDUklUSUMsICJEaWEgRGlhY3JpdGljIiksCisgICAgUHJvcGVydHkoVUNIQVJfRVhURU5ERVIsICJFeHQgRXh0ZW5kZXIiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9GVUxMX0NPTVBPU0lUSU9OX0VYQ0xVU0lPTiwgIkNvbXBfRXggRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb24iKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9HUkFQSEVNRV9CQVNFLCAiR3JfQmFzZSBHcmFwaGVtZV9CYXNlIiksCisgICAgUHJvcGVydHkoVUNIQVJfR1JBUEhFTUVfRVhURU5ELCAiR3JfRXh0IEdyYXBoZW1lX0V4dGVuZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0dSQVBIRU1FX0xJTkssICJHcl9MaW5rIEdyYXBoZW1lX0xpbmsiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9IRVhfRElHSVQsICJIZXggSGV4X0RpZ2l0IiksCisgICAgUHJvcGVydHkoVUNIQVJfSFlQSEVOLCAiSHlwaGVuIEh5cGhlbiIpLAorICAgIFByb3BlcnR5KFVDSEFSX0lEX0NPTlRJTlVFLCAiSURDIElEX0NvbnRpbnVlIiksCisgICAgUHJvcGVydHkoVUNIQVJfSURfU1RBUlQsICJJRFMgSURfU3RhcnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9JREVPR1JBUEhJQywgIklkZW8gSWRlb2dyYXBoaWMiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9JRFNfQklOQVJZX09QRVJBVE9SLCAiSURTQiBJRFNfQmluYXJ5X09wZXJhdG9yIiksCisgICAgUHJvcGVydHkoVUNIQVJfSURTX1RSSU5BUllfT1BFUkFUT1IsICJJRFNUIElEU19UcmluYXJ5X09wZXJhdG9yIiksCisgICAgUHJvcGVydHkoVUNIQVJfSk9JTl9DT05UUk9MLCAiSm9pbl9DIEpvaW5fQ29udHJvbCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0xPR0lDQUxfT1JERVJfRVhDRVBUSU9OLCAiTE9FIExvZ2ljYWxfT3JkZXJfRXhjZXB0aW9uIiksCisgICAgUHJvcGVydHkoVUNIQVJfTE9XRVJDQVNFLCAiTG93ZXIgTG93ZXJjYXNlIiksCisgICAgUHJvcGVydHkoVUNIQVJfTUFUSCwgIk1hdGggTWF0aCIpLAorICAgIFByb3BlcnR5KFVDSEFSX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5ULCAiTkNoYXIgTm9uY2hhcmFjdGVyX0NvZGVfUG9pbnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9RVU9UQVRJT05fTUFSSywgIlFNYXJrIFF1b3RhdGlvbl9NYXJrIiksCisgICAgUHJvcGVydHkoVUNIQVJfUkFESUNBTCwgIlJhZGljYWwgUmFkaWNhbCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NPRlRfRE9UVEVELCAiU0QgU29mdF9Eb3R0ZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9URVJNSU5BTF9QVU5DVFVBVElPTiwgIlRlcm0gVGVybWluYWxfUHVuY3R1YXRpb24iKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9VTklGSUVEX0lERU9HUkFQSCwgIlVJZGVvIFVuaWZpZWRfSWRlb2dyYXBoIiksCisgICAgUHJvcGVydHkoVUNIQVJfVVBQRVJDQVNFLCAiVXBwZXIgVXBwZXJjYXNlIiksCisgICAgUHJvcGVydHkoVUNIQVJfV0hJVEVfU1BBQ0UsICJXU3BhY2UgV2hpdGVfU3BhY2Ugc3BhY2UiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9YSURfQ09OVElOVUUsICJYSURDIFhJRF9Db250aW51ZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1hJRF9TVEFSVCwgIlhJRFMgWElEX1N0YXJ0IiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0FTRV9TRU5TSVRJVkUsICJTZW5zaXRpdmUgQ2FzZV9TZW5zaXRpdmUiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TX1RFUk0sICJTVGVybSBTVGVybSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1ZBUklBVElPTl9TRUxFQ1RPUiwgIlZTIFZhcmlhdGlvbl9TZWxlY3RvciIpLAorICAgIFByb3BlcnR5KFVDSEFSX05GRF9JTkVSVCwgIm5mZGluZXJ0IE5GRF9JbmVydCIpLAorICAgIFByb3BlcnR5KFVDSEFSX05GS0RfSU5FUlQsICJuZmtkaW5lcnQgTkZLRF9JbmVydCIpLAorICAgIFByb3BlcnR5KFVDSEFSX05GQ19JTkVSVCwgIm5mY2luZXJ0IE5GQ19JbmVydCIpLAorICAgIFByb3BlcnR5KFVDSEFSX05GS0NfSU5FUlQsICJuZmtjaW5lcnQgTkZLQ19JbmVydCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NFR01FTlRfU1RBUlRFUiwgInNlZ3N0YXJ0IFNlZ21lbnRfU3RhcnRlciIpLAorICAgIFByb3BlcnR5KFVDSEFSX1BBVFRFUk5fU1lOVEFYLCAiUGF0X1N5biBQYXR0ZXJuX1N5bnRheCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1BBVFRFUk5fV0hJVEVfU1BBQ0UsICJQYXRfV1MgUGF0dGVybl9XaGl0ZV9TcGFjZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1BPU0lYX0FMTlVNLCAiIGFsbnVtIiksCisgICAgUHJvcGVydHkoVUNIQVJfUE9TSVhfQkxBTkssICIgYmxhbmsiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9QT1NJWF9HUkFQSCwgIiBncmFwaCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1BPU0lYX1BSSU5ULCAiIHByaW50IiksCisgICAgUHJvcGVydHkoVUNIQVJfUE9TSVhfWERJR0lULCAiIHhkaWdpdCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0NBU0VELCAiQ2FzZWQgQ2FzZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DQVNFX0lHTk9SQUJMRSwgIkNJIENhc2VfSWdub3JhYmxlIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0hBTkdFU19XSEVOX0xPV0VSQ0FTRUQsICJDV0wgQ2hhbmdlc19XaGVuX0xvd2VyY2FzZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DSEFOR0VTX1dIRU5fVVBQRVJDQVNFRCwgIkNXVSBDaGFuZ2VzX1doZW5fVXBwZXJjYXNlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0NIQU5HRVNfV0hFTl9USVRMRUNBU0VELCAiQ1dUIENoYW5nZXNfV2hlbl9UaXRsZWNhc2VkIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0hBTkdFU19XSEVOX0NBU0VGT0xERUQsICJDV0NGIENoYW5nZXNfV2hlbl9DYXNlZm9sZGVkIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0hBTkdFU19XSEVOX0NBU0VNQVBQRUQsICJDV0NNIENoYW5nZXNfV2hlbl9DYXNlbWFwcGVkIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0hBTkdFU19XSEVOX05GS0NfQ0FTRUZPTERFRCwgIkNXS0NGIENoYW5nZXNfV2hlbl9ORktDX0Nhc2Vmb2xkZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9CSURJX0NMQVNTLCAiYmMgQmlkaV9DbGFzcyIsIFZBTFVFU19iYywgMjMpLAorICAgIFByb3BlcnR5KFVDSEFSX0JMT0NLLCAiYmxrIEJsb2NrIiwgVkFMVUVTX2JsaywgMjYzKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTLCAiY2NjIENhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MiLCBWQUxVRVNfY2NjLCA1NyksCisgICAgUHJvcGVydHkoVUNIQVJfREVDT01QT1NJVElPTl9UWVBFLCAiZHQgRGVjb21wb3NpdGlvbl9UeXBlIiwgVkFMVUVTX2R0LCAxOCksCisgICAgUHJvcGVydHkoVUNIQVJfRUFTVF9BU0lBTl9XSURUSCwgImVhIEVhc3RfQXNpYW5fV2lkdGgiLCBWQUxVRVNfZWEsIDYpLAorICAgIFByb3BlcnR5KFVDSEFSX0dFTkVSQUxfQ0FURUdPUlksICJnYyBHZW5lcmFsX0NhdGVnb3J5IiwgVkFMVUVTX2djLCAzMCksCisgICAgUHJvcGVydHkoVUNIQVJfSk9JTklOR19HUk9VUCwgImpnIEpvaW5pbmdfR3JvdXAiLCBWQUxVRVNfamcsIDg2KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9KT0lOSU5HX1RZUEUsICJqdCBKb2luaW5nX1R5cGUiLCBWQUxVRVNfanQsIDYpLAorICAgIFByb3BlcnR5KFVDSEFSX0xJTkVfQlJFQUssICJsYiBMaW5lX0JyZWFrIiwgVkFMVUVTX2xiLCA0MCksCisgICAgUHJvcGVydHkoVUNIQVJfTlVNRVJJQ19UWVBFLCAibnQgTnVtZXJpY19UeXBlIiwgVkFMVUVTX250LCA0KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TQ1JJUFQsICJzYyBTY3JpcHQiLCBWQUxVRVNfc2MsIDE2NyksCisgICAgUHJvcGVydHkoVUNIQVJfSEFOR1VMX1NZTExBQkxFX1RZUEUsICJoc3QgSGFuZ3VsX1N5bGxhYmxlX1R5cGUiLCBWQUxVRVNfaHN0LCA2KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ORkRfUVVJQ0tfQ0hFQ0ssICJORkRfUUMgTkZEX1F1aWNrX0NoZWNrIiwgVkFMVUVTX05GRF9RQywgMiksCisgICAgUHJvcGVydHkoVUNIQVJfTkZLRF9RVUlDS19DSEVDSywgIk5GS0RfUUMgTkZLRF9RdWlja19DaGVjayIsIFZBTFVFU19ORktEX1FDLCAyKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ORkNfUVVJQ0tfQ0hFQ0ssICJORkNfUUMgTkZDX1F1aWNrX0NoZWNrIiwgVkFMVUVTX05GQ19RQywgMyksCisgICAgUHJvcGVydHkoVUNIQVJfTkZLQ19RVUlDS19DSEVDSywgIk5GS0NfUUMgTkZLQ19RdWlja19DaGVjayIsIFZBTFVFU19ORktDX1FDLCAzKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9MRUFEX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MsICJsY2NjIExlYWRfQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyIsIFZBTFVFU19sY2NjLCA1NyksCisgICAgUHJvcGVydHkoVUNIQVJfVFJBSUxfQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUywgInRjY2MgVHJhaWxfQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyIsIFZBTFVFU190Y2NjLCA1NyksCisgICAgUHJvcGVydHkoVUNIQVJfR1JBUEhFTUVfQ0xVU1RFUl9CUkVBSywgIkdDQiBHcmFwaGVtZV9DbHVzdGVyX0JyZWFrIiwgVkFMVUVTX0dDQiwgMTMpLAorICAgIFByb3BlcnR5KFVDSEFSX1NFTlRFTkNFX0JSRUFLLCAiU0IgU2VudGVuY2VfQnJlYWsiLCBWQUxVRVNfU0IsIDE1KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9XT1JEX0JSRUFLLCAiV0IgV29yZF9CcmVhayIsIFZBTFVFU19XQiwgMTcpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfUEFJUkVEX0JSQUNLRVRfVFlQRSwgImJwdCBCaWRpX1BhaXJlZF9CcmFja2V0X1R5cGUiLCBWQUxVRVNfYnB0LCAzKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZX01BU0ssICJnY20gR2VuZXJhbF9DYXRlZ29yeV9NYXNrIiwgVkFMVUVTX2djbSwgMzgpLAorICAgIFByb3BlcnR5KFVDSEFSX05VTUVSSUNfVkFMVUUsICJudiBOdW1lcmljX1ZhbHVlIiksCisgICAgUHJvcGVydHkoVUNIQVJfQUdFLCAiYWdlIEFnZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfTUlSUk9SSU5HX0dMWVBILCAiYm1nIEJpZGlfTWlycm9yaW5nX0dseXBoIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0FTRV9GT0xESU5HLCAiY2YgQ2FzZV9Gb2xkaW5nIiksCisgICAgUHJvcGVydHkoVUNIQVJfSVNPX0NPTU1FTlQsICJpc2MgSVNPX0NvbW1lbnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9MT1dFUkNBU0VfTUFQUElORywgImxjIExvd2VyY2FzZV9NYXBwaW5nIiksCisgICAgUHJvcGVydHkoVUNIQVJfTkFNRSwgIm5hIE5hbWUiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TSU1QTEVfQ0FTRV9GT0xESU5HLCAic2NmIFNpbXBsZV9DYXNlX0ZvbGRpbmcgc2ZjIiksCisgICAgUHJvcGVydHkoVUNIQVJfU0lNUExFX0xPV0VSQ0FTRV9NQVBQSU5HLCAic2xjIFNpbXBsZV9Mb3dlcmNhc2VfTWFwcGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NJTVBMRV9USVRMRUNBU0VfTUFQUElORywgInN0YyBTaW1wbGVfVGl0bGVjYXNlX01hcHBpbmciKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TSU1QTEVfVVBQRVJDQVNFX01BUFBJTkcsICJzdWMgU2ltcGxlX1VwcGVyY2FzZV9NYXBwaW5nIiksCisgICAgUHJvcGVydHkoVUNIQVJfVElUTEVDQVNFX01BUFBJTkcsICJ0YyBUaXRsZWNhc2VfTWFwcGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX1VOSUNPREVfMV9OQU1FLCAibmExIFVuaWNvZGVfMV9OYW1lIiksCisgICAgUHJvcGVydHkoVUNIQVJfVVBQRVJDQVNFX01BUFBJTkcsICJ1YyBVcHBlcmNhc2VfTWFwcGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfUEFJUkVEX0JSQUNLRVQsICJicGIgQmlkaV9QYWlyZWRfQnJhY2tldCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NDUklQVF9FWFRFTlNJT05TLCAic2N4IFNjcmlwdF9FeHRlbnNpb25zIiksCit9OworCitjb25zdCBpbnQzMl90IE1BWF9BTElBU0VTID0gNDsKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNidWlsZGVyLmNwcCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNidWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODM4MDg3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL3BuYW1lc2J1aWxkZXIuY3BwCkBAIC0wLDAgKzEsNjAwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAwMi0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAxMC8xMS8wMiAgICBhbGl1ICAgICAgICBDcmVhdGlvbi4KKyogICAyMDEwbm92MTkgICBNYXJrdXMgU2NoZXJlciAgUmV3cml0ZSBmb3IgZm9ybWF0VmVyc2lvbiAyLgorKiAgIDIwMTFkZWMxOCAgIE1hcmt1cyBTY2hlcmVyICBNb3ZlZCBnZW5wbmFtZS9nZW5wbmFtZS5jcHAgdG8gZ2VucHJvcHMvcG5hbWVzYnVpbGRlci5jcHAuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2J5dGVzdHJpZS5oIgorI2luY2x1ZGUgInVuaWNvZGUvYnl0ZXN0cmllYnVpbGRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvcHV0aWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbGVhbi5oIgorI2luY2x1ZGUgImNoYXJzdHIuaCIKKyNpbmNsdWRlICJjc3RyaW5nLmgiCisjaW5jbHVkZSAiZGVuc2VyYW5nZXMuaCIKKyNpbmNsdWRlICJnZW5wcm9wcy5oIgorI2luY2x1ZGUgInByb3BuYW1lLmgiCisjaW5jbHVkZSAidG9vbHV0aWwuaCIKKyNpbmNsdWRlICJ1aGFzaC5oIgorI2luY2x1ZGUgInVpbnZjaGFyLmgiCisjaW5jbHVkZSAidW5ld2RhdGEuaCIKKyNpbmNsdWRlICJ1dmVjdHIzMi5oIgorI2luY2x1ZGUgIndyaXRlc3JjLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBXZSB0ZXN0IGZvciBBU0NJSSBkZWxpbWl0ZXJzIGFuZCBXaGl0ZV9TcGFjZSwgYW5kIGJ1aWxkIEFTQ0lJIHN0cmluZyBCeXRlc1RyaWVzLgorI2lmIFVfQ0hBUlNFVF9GQU1JTFkhPVVfQVNDSUlfRkFNSUxZCisjICAgZXJyb3IgVGhpcyBidWlsZGVyIHJlcXVpcmVzIFVfQ0hBUlNFVF9GQU1JTFk9PVVfQVNDSUlfRkFNSUxZLgorI2VuZGlmCisKK1VfTkFNRVNQQUNFX1VTRQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJFR0lOIERBVEEKKy8vIAorLy8gVGhpcyBpcyB0aGUgcmF3IGRhdGEgdG8gYmUgb3V0cHV0LiAgV2UgZGVmaW5lIHRoZSBkYXRhIHN0cnVjdHVyZSwKKy8vIHRoZW4gaW5jbHVkZSBhIG1hY2hpbmUtZ2VuZXJhdGVkIGhlYWRlciB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwKKy8vIGRhdGEuCisKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bm9ybTIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzY3JpcHQuaCIKKworLy8gRGlsZW1tYTogV2Ugd2FudCB0byB1c2UgTUFYX0FMSUFTRVMgdG8gZGVmaW5lIGZpZWxkcyBpbiB0aGUgVmFsdWUgY2xhc3MuCisvLyBIb3dldmVyLCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgY2xhc3MgYmVmb3JlIGluY2x1ZGluZyB0aGUgZGF0YSBoZWFkZXIKKy8vIGFuZCB3ZSBjYW4gdXNlIE1BWF9BTElBU0VTIG9ubHkgYWZ0ZXIgaW5jbHVkaW5nIGl0LgorLy8gU28gd2UgZGVmaW5lIGEgc2Vjb25kIGNvbnN0YW50IGFuZCBhdCBydW50aW1lIGNoZWNrIHRoYXQgaXQncyA+PU1BWF9BTElBU0VTLgorc3RhdGljIGNvbnN0IGludDMyX3QgVkFMVUVfTUFYX0FMSUFTRVM9NDsKKworc3RhdGljIGNvbnN0IGludDMyX3QgSk9JTkVEX0FMSUFTRVNfQ0FQQUNJVFk9MTAwOworCitjbGFzcyBWYWx1ZSB7CitwdWJsaWM6CisgICAgVmFsdWUoaW50MzJfdCBlbnVtVmFsdWUsIGNvbnN0IGNoYXIgKmpvaW5lZEFsaWFzZXMpCisgICAgICAgICAgICA6IGVudW1WYWx1ZShlbnVtVmFsdWUpLCBqb2luZWRBbGlhc2VzKGpvaW5lZEFsaWFzZXMpLCBjb3VudCgwKSB7CisgICAgICAgIGlmKHVwcnZfc3RybGVuKGpvaW5lZEFsaWFzZXMpPj1KT0lORURfQUxJQVNFU19DQVBBQ0lUWSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogcG5hbWVzYnVpbGRlci5jcHAgVmFsdWU6OlZhbHVlKCVsZCwgXCIlc1wiKTogIgorICAgICAgICAgICAgICAgICAgICAiam9pbmVkIGFsaWFzZXMgdG9vIGxvbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgImluY3JlYXNlIEpPSU5FRF9BTElBU0VTX0NBUEFDSVRZLCB0byBhdCBsZWFzdCAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgIChsb25nKWVudW1WYWx1ZSwgam9pbmVkQWxpYXNlcywgdXBydl9zdHJsZW4oam9pbmVkQWxpYXNlcykrMSk7CisgICAgICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb3B5IHRoZSBzcGFjZS1zZXBhcmF0ZWQgYWxpYXNlcyBpbnRvIE5VTC1zZXBhcmF0ZWQgb25lcyBhbmQgY291bnQgdGhlbS4KKyAgICAgICAgLy8gV3JpdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgZWFjaCBvbmUuCisgICAgICAgIGNvbnN0IGNoYXIgKmo9am9pbmVkQWxpYXNlczsKKyAgICAgICAgY2hhciAqYT1hbGlhc2VzQnVmZmVyOworICAgICAgICBjaGFyICpuPW5vcm1hbGl6ZWRCdWZmZXI7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgZG8geworICAgICAgICAgICAgYWxpYXNlc1tjb3VudF09YTsKKyAgICAgICAgICAgIG5vcm1hbGl6ZWRbY291bnQrK109bjsKKyAgICAgICAgICAgIHdoaWxlKChjPSpqKyspIT0nICcgJiYgYyE9MCkgeworICAgICAgICAgICAgICAgICphKys9YzsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgZGVsaW1pdGVycyAnLScgYW5kICdfJy4KKyAgICAgICAgICAgICAgICBpZighKGM9PSctJyB8fCBjPT0nXycpKSB7CisgICAgICAgICAgICAgICAgICAgICpuKys9dXBydl90b2xvd2VyKGMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICphKys9MDsKKyAgICAgICAgICAgICpuKys9MDsKKyAgICAgICAgfSB3aGlsZShjIT0wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgYXQgbW9zdCBNQVhfQUxJQVNFUyBwb2ludGVycyBmb3IgdW5pcXVlIG5vcm1hbGl6ZWQgYWxpYXNlcworICAgICAqIChubyBlbXB0eSBzdHJpbmdzKSB0byBkZXN0IGFuZCByZXR1cm5zIGhvdyBtYW55IHRoZXJlIGFyZS4KKyAgICAgKi8KKyAgICBpbnQzMl90IGdldFVuaXF1ZU5vcm1hbGl6ZWRBbGlhc2VzKGNvbnN0IGNoYXIgKmRlc3RbXSkgY29uc3QgeworICAgICAgICBpbnQzMl90IG51bVVuaXF1ZT0wOworICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcz1ub3JtYWxpemVkW2ldOworICAgICAgICAgICAgaWYoKnMhPTApIHsgIC8vIE9taXQgZW1wdHkgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICBmb3IoaW50MzJfdCBqPTA7OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaj09bnVtVW5pcXVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzIGlzIGEgbmV3IHVuaXF1ZSBhbGlhcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbbnVtVW5pcXVlKytdPXM7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZigwPT11cHJ2X3N0cmNtcChzLCBkZXN0W2pdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcyBpcyBlcXVhbCBvciBlcXVpdmFsZW50IHRvIGFuIGVhcmxpZXIgYWxpYXMuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVtVW5pcXVlOworICAgIH0KKworICAgIGludDMyX3QgZW51bVZhbHVlOworICAgIGNvbnN0IGNoYXIgKmpvaW5lZEFsaWFzZXM7CisgICAgY2hhciBhbGlhc2VzQnVmZmVyW0pPSU5FRF9BTElBU0VTX0NBUEFDSVRZXTsKKyAgICBjaGFyIG5vcm1hbGl6ZWRCdWZmZXJbSk9JTkVEX0FMSUFTRVNfQ0FQQUNJVFldOworICAgIGNvbnN0IGNoYXIgKmFsaWFzZXNbVkFMVUVfTUFYX0FMSUFTRVNdOworICAgIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRbVkFMVUVfTUFYX0FMSUFTRVNdOworICAgIGludDMyX3QgY291bnQ7Cit9OworCitjbGFzcyBQcm9wZXJ0eSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIGEgdmFsdWVzIGFycmF5LgorICAgIFByb3BlcnR5KGludDMyX3QgZW51bVZhbHVlLCBjb25zdCBjaGFyICpqb2luZWRBbGlhc2VzLAorICAgICAgICAgICAgIGNvbnN0IFZhbHVlICp2YWx1ZXMsIGludDMyX3QgdmFsdWVDb3VudCkKKyAgICAgICAgICAgIDogVmFsdWUoZW51bVZhbHVlLCBqb2luZWRBbGlhc2VzKSwKKyAgICAgICAgICAgICAgdmFsdWVzKHZhbHVlcyksIHZhbHVlQ291bnQodmFsdWVDb3VudCkge30KKyAgICAvLyBBIGJpbmFyeSBwcm9wZXJ0eSAoZW51bVZhbHVlPFVDSEFSX0JJTkFSWV9MSU1JVCksIG9yIG9uZSB3aXRob3V0IHZhbHVlcy4KKyAgICBQcm9wZXJ0eShpbnQzMl90IGVudW1WYWx1ZSwgY29uc3QgY2hhciAqam9pbmVkQWxpYXNlcyk7CisKKyAgICBjb25zdCBWYWx1ZSAqdmFsdWVzOworICAgIGludDMyX3QgdmFsdWVDb3VudDsKK307CisKKy8vICoqKiBJbmNsdWRlIHRoZSBkYXRhIGhlYWRlciAqKioKKyNpbmNsdWRlICJwbmFtZXNfZGF0YS5oIgorCitQcm9wZXJ0eTo6UHJvcGVydHkoaW50MzJfdCBlbnVtVmFsdWUsIGNvbnN0IGNoYXIgKmpvaW5lZEFsaWFzZXMpCisgICAgICAgIDogVmFsdWUoZW51bVZhbHVlLCBqb2luZWRBbGlhc2VzKSwKKyAgICAgICAgICB2YWx1ZXMoZW51bVZhbHVlPFVDSEFSX0JJTkFSWV9MSU1JVCA/IFZBTFVFU19iaW5wcm9wIDogTlVMTCksCisgICAgICAgICAgdmFsdWVDb3VudChlbnVtVmFsdWU8VUNIQVJfQklOQVJZX0xJTUlUID8gMiA6IDApIHt9CisKKy8vIEVORCBEQVRBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUE5hbWVzUHJvcGVydHlOYW1lcyA6IHB1YmxpYyBQcm9wZXJ0eU5hbWVzIHsKK3B1YmxpYzoKKyAgICBQTmFtZXNQcm9wZXJ0eU5hbWVzKCkKKyAgICAgICAgICAgIDogdmFsdWVNYXBzKE5VTEwpLCBieXRlc1RyaWVzKE5VTEwpIHt9CisgICAgdm9pZCBpbml0KGNvbnN0IGludDMyX3QgKnZtLCBjb25zdCB1aW50OF90ICpidCkgeworICAgICAgICB2YWx1ZU1hcHM9dm07CisgICAgICAgIGJ5dGVzVHJpZXM9YnQ7CisgICAgfQorICAgIHZpcnR1YWwgaW50MzJfdCBnZXRQcm9wZXJ0eUVudW0oY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQzMl90IGdldFByb3BlcnR5VmFsdWVFbnVtKGludDMyX3QgcHJvcGVydHksIGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0OworcHJpdmF0ZToKKyAgICBpbnQzMl90IGZpbmRQcm9wZXJ0eShpbnQzMl90IHByb3BlcnR5KSBjb25zdDsKKyAgICBVQm9vbCBjb250YWluc05hbWUoQnl0ZXNUcmllICZ0cmllLCBjb25zdCBjaGFyICpuYW1lKSBjb25zdDsKKyAgICBpbnQzMl90IGdldFByb3BlcnR5T3JWYWx1ZUVudW0oaW50MzJfdCBieXRlc1RyaWVPZmZzZXQsIGNvbnN0IGNoYXIgKmFsaWFzKSBjb25zdDsKKworICAgIGNvbnN0IGludDMyX3QgKnZhbHVlTWFwczsKKyAgICBjb25zdCB1aW50OF90ICpieXRlc1RyaWVzOworfTsKKworY2xhc3MgUE5hbWVzQnVpbGRlckltcGwgOiBwdWJsaWMgUE5hbWVzQnVpbGRlciB7CitwdWJsaWM6CisgICAgUE5hbWVzQnVpbGRlckltcGwoVUVycm9yQ29kZSAmZXJyb3JDb2RlKQorICAgICAgICAgICAgOiB2YWx1ZU1hcHMoZXJyb3JDb2RlKSwgYnRiKGVycm9yQ29kZSksIG1heE5hbWVMZW5ndGgoMCksCisgICAgICAgICAgICAgIG5hbWVHcm91cFRvT2Zmc2V0KE5VTEwpIHt9CisKKyAgICB+UE5hbWVzQnVpbGRlckltcGwoKSB7CisgICAgICAgIHVoYXNoX2Nsb3NlKG5hbWVHcm91cFRvT2Zmc2V0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorICAgICAgICBpZihWQUxVRV9NQVhfQUxJQVNFUzxNQVhfQUxJQVNFUykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogcG5hbWVzYnVpbGRlci5jcHAgVkFMVUVfTUFYX0FMSUFTRVM9JWQ8JWQ9TUFYX0FMSUFTRVMgLS0gIgorICAgICAgICAgICAgICAgICAgICAibmVlZCB0byBjaGFuZ2UgVkFMVUVfTUFYX0FMSUFTRVMgdG8gYXQgbGVhc3QgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpVkFMVUVfTUFYX0FMSUFTRVMsIChpbnQpTUFYX0FMSUFTRVMsIChpbnQpTUFYX0FMSUFTRVMpOworICAgICAgICAgICAgZXJyb3JDb2RlPVVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuYW1lR3JvdXBUb09mZnNldD11aGFzaF9vcGVuKHVoYXNoX2hhc2hDaGFycywgdWhhc2hfY29tcGFyZUNoYXJzLCBOVUxMLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgLy8gQnVpbGQgbWFpbiBwcm9wZXJ0eSBhbGlhc2VzIHZhbHVlIG1hcCBhdCB2YWx1ZSBtYXAgb2Zmc2V0IDAsCisgICAgICAgIC8vIHNvIHRoYXQgd2UgbmVlZCBub3Qgc3RvcmUgYW5vdGhlciBvZmZzZXQgZm9yIGl0LgorICAgICAgICBVVmVjdG9yMzIgcHJvcEVudW1zKGVycm9yQ29kZSk7CisgICAgICAgIGludDMyX3QgcHJvcEluZGV4OworICAgICAgICBmb3IocHJvcEluZGV4PTA7IHByb3BJbmRleDxMRU5HVEhPRihQUk9QRVJUSUVTKTsgKytwcm9wSW5kZXgpIHsKKyAgICAgICAgICAgIHByb3BFbnVtcy5zb3J0ZWRJbnNlcnQoUFJPUEVSVElFU1twcm9wSW5kZXhdLmVudW1WYWx1ZSwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpbnQzMl90IHJhbmdlc1sxMF1bMl07CisgICAgICAgIGludDMyX3QgbnVtUHJvcFJhbmdlcz11cHJ2X21ha2VEZW5zZVJhbmdlcyhwcm9wRW51bXMuZ2V0QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRU5HVEhPRihQUk9QRVJUSUVTKSwgMHgxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMsIExFTkdUSE9GKHJhbmdlcykpOworICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChudW1Qcm9wUmFuZ2VzLCBlcnJvckNvZGUpOworICAgICAgICBpbnQzMl90IGksIGo7CisgICAgICAgIGZvcihpPTA7IGk8bnVtUHJvcFJhbmdlczsgKytpKSB7CisgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChyYW5nZXNbaV1bMF0sIGVycm9yQ29kZSk7CisgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChyYW5nZXNbaV1bMV0rMSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGZvcihqPXJhbmdlc1tpXVswXTsgajw9cmFuZ2VzW2ldWzFdOyArK2opIHsKKyAgICAgICAgICAgICAgICAvLyBSZXNlcnZlIHR3byBzbG90cyBwZXIgcHJvcGVydHkgZm9yIHRoZSBuYW1lIGdyb3VwIG9mZnNldCBhbmQgdGhlIHZhbHVlLW1hcCBvZmZzZXQuCisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoMCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudCgwLCBlcnJvckNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQnVpbGQgdGhlIHByb3BlcnRpZXMgdHJpZSBmaXJzdCwgYXQgQnl0ZXNUcmllIG9mZnNldCAwLAorICAgICAgICAvLyBzbyB0aGF0IHdlIG5lZWQgbm90IHN0b3JlIGFub3RoZXIgb2Zmc2V0IGZvciBpdC4KKyAgICAgICAgYnVpbGRQcm9wZXJ0aWVzQnl0ZXNUcmllKFBST1BFUlRJRVMsIExFTkdUSE9GKFBST1BFUlRJRVMpLCBlcnJvckNvZGUpOworCisgICAgICAgIC8vIEJ1aWxkIHRoZSBuYW1lIGdyb3VwIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGF0IG5hbWVHcm91cHMgb2Zmc2V0IDAuCisgICAgICAgIC8vIE5hbWUgZ3JvdXBzIGZvciAqdmFsdWUqIGFsaWFzZXMgbXVzdCBub3Qgc3RhcnQgYXQgb2Zmc2V0IDAKKyAgICAgICAgLy8gYmVjYXVzZSB0aGF0IGlzIGEgbWlzc2luZy12YWx1ZSBtYXJrZXIgZm9yIHNwYXJzZSB2YWx1ZSByYW5nZXMuCisgICAgICAgIHNldFByb3BlcnR5SW50KFBST1BFUlRJRVNbMF0uZW51bVZhbHVlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVZhbHVlQWxpYXNlcyhQUk9QRVJUSUVTWzBdLCBlcnJvckNvZGUpKTsKKworICAgICAgICAvLyBCdWlsZCB0aGUga25vd24tcmVwZWF0ZWQgYmluYXJ5IHByb3BlcnRpZXMgb25jZS4KKyAgICAgICAgaW50MzJfdCBiaW5Qcm9wc1ZhbHVlTWFwT2Zmc2V0PXZhbHVlTWFwcy5zaXplKCk7CisgICAgICAgIGludDMyX3QgYnl0ZXNUcmllT2Zmc2V0PWJ1aWxkVmFsdWVzQnl0ZXNUcmllKFZBTFVFU19iaW5wcm9wLCAyLCBlcnJvckNvZGUpOworICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChieXRlc1RyaWVPZmZzZXQsIGVycm9yQ29kZSk7CisgICAgICAgIGJ1aWxkVmFsdWVNYXAoVkFMVUVTX2JpbnByb3AsIDIsIGVycm9yQ29kZSk7CisKKyAgICAgICAgLy8gTm90ZTogSXQgaXMgc2xpZ2h0bHkgd2FzdGVmdWwgdG8gc3RvcmUgYmluYXJ5IHByb3BlcnRpZXMgbGlrZSBhbGwgb3RoZXJzLgorICAgICAgICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgdGhleSBhcmUgaW4gdGhlIGxvd2VzdCByYW5nZSBvZiBwcm9wZXJ0eSBlbnVtIHZhbHVlcworICAgICAgICAvLyBhbmQgc2hhcmUgdGhlIHNhbWUgbmFtZSBncm91cCBhbmQgQnl0ZXNUcmllLAorICAgICAgICAvLyB3ZSBjb3VsZCBqdXN0IHN0b3JlIHRob3NlIHR3byBpbmRleGVzIG9uY2UuCisgICAgICAgIC8vIChUaGlzIHdvdWxkIHNhdmUgOCBieXRlcyBwZXIgYmluYXJ5IHByb3BlcnR5LCBvciBhYm91dCBoYWxmIGEga2lsb2J5dGUuKQorCisgICAgICAgIC8vIEJ1aWxkIHRoZSBrbm93bi1yZXBlYXRlZCBjYW5vbmljYWwgY29tYmluaW5nIGNsYXNzIHByb3BlcnRpZXMgb25jZS4KKyAgICAgICAgaW50MzJfdCBjY2NWYWx1ZU1hcE9mZnNldD12YWx1ZU1hcHMuc2l6ZSgpOworICAgICAgICBieXRlc1RyaWVPZmZzZXQ9YnVpbGRWYWx1ZXNCeXRlc1RyaWUoVkFMVUVTX2NjYywgTEVOR1RIT0YoVkFMVUVTX2NjYyksIGVycm9yQ29kZSk7CisgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KGJ5dGVzVHJpZU9mZnNldCwgZXJyb3JDb2RlKTsKKyAgICAgICAgYnVpbGRWYWx1ZU1hcChWQUxVRVNfY2NjLCBMRU5HVEhPRihWQUxVRVNfY2NjKSwgZXJyb3JDb2RlKTsKKworICAgICAgICAvLyBCdWlsZCB0aGUgcmVzdCBvZiB0aGUgZGF0YS4KKyAgICAgICAgZm9yKHByb3BJbmRleD0wOyBwcm9wSW5kZXg8TEVOR1RIT0YoUFJPUEVSVElFUyk7ICsrcHJvcEluZGV4KSB7CisgICAgICAgICAgICBpZihwcm9wSW5kZXg+MCkgeworICAgICAgICAgICAgICAgIC8vIHdyaXRlVmFsdWVBbGlhc2VzKFBST1BFUlRJRVNbMF0sIC4uLikgYWxyZWFkeSBkb25lCisgICAgICAgICAgICAgICAgc2V0UHJvcGVydHlJbnQoUFJPUEVSVElFU1twcm9wSW5kZXhdLmVudW1WYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVZhbHVlQWxpYXNlcyhQUk9QRVJUSUVTW3Byb3BJbmRleF0sIGVycm9yQ29kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50MzJfdCB2YWx1ZUNvdW50PVBST1BFUlRJRVNbcHJvcEluZGV4XS52YWx1ZUNvdW50OworICAgICAgICAgICAgaWYodmFsdWVDb3VudD4wKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZU1hcE9mZnNldDsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSAqdmFsdWVzPVBST1BFUlRJRVNbcHJvcEluZGV4XS52YWx1ZXM7CisgICAgICAgICAgICAgICAgaWYodmFsdWVzPT1WQUxVRVNfYmlucHJvcCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcE9mZnNldD1iaW5Qcm9wc1ZhbHVlTWFwT2Zmc2V0OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZXM9PVZBTFVFU19jY2MgfHwgdmFsdWVzPT1WQUxVRVNfbGNjYyB8fCB2YWx1ZXM9PVZBTFVFU190Y2NjKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlTWFwT2Zmc2V0PWNjY1ZhbHVlTWFwT2Zmc2V0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlTWFwT2Zmc2V0PXZhbHVlTWFwcy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzVHJpZU9mZnNldD1idWlsZFZhbHVlc0J5dGVzVHJpZSh2YWx1ZXMsIHZhbHVlQ291bnQsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KGJ5dGVzVHJpZU9mZnNldCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRWYWx1ZU1hcCh2YWx1ZXMsIHZhbHVlQ291bnQsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldFByb3BlcnR5SW50KFBST1BFUlRJRVNbcHJvcEluZGV4XS5lbnVtVmFsdWUsIDEsIHZhbHVlTWFwT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdyaXRlIHRoZSBpbmRleGVzLgorICAgICAgICBpbnQzMl90IG9mZnNldD0oaW50MzJfdClzaXplb2YoaW5kZXhlcyk7CisgICAgICAgIGluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9WQUxVRV9NQVBTX09GRlNFVF09b2Zmc2V0OworICAgICAgICBvZmZzZXQrPXZhbHVlTWFwcy5zaXplKCkqNDsKKyAgICAgICAgaW5kZXhlc1tQcm9wTmFtZURhdGE6OklYX0JZVEVfVFJJRVNfT0ZGU0VUXT1vZmZzZXQ7CisgICAgICAgIG9mZnNldCs9Ynl0ZXNUcmllcy5sZW5ndGgoKTsKKyAgICAgICAgaW5kZXhlc1tQcm9wTmFtZURhdGE6OklYX05BTUVfR1JPVVBTX09GRlNFVF09b2Zmc2V0OworICAgICAgICBvZmZzZXQrPW5hbWVHcm91cHMubGVuZ3RoKCk7CisgICAgICAgIGZvcihpPVByb3BOYW1lRGF0YTo6SVhfUkVTRVJWRUQzX09GRlNFVDsgaTw9UHJvcE5hbWVEYXRhOjpJWF9UT1RBTF9TSVpFOyArK2kpIHsKKyAgICAgICAgICAgIGluZGV4ZXNbaV09b2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9NQVhfTkFNRV9MRU5HVEhdPW1heE5hbWVMZW5ndGg7CisgICAgICAgIGZvcihpPVByb3BOYW1lRGF0YTo6SVhfUkVTRVJWRUQ3OyBpPFByb3BOYW1lRGF0YTo6SVhfQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgaW5kZXhlc1tpXT0wOworICAgICAgICB9CisKKyAgICAgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgICAgIHB1dHMoIiogcG5hbWVzLmljdSBzdGF0cyAqIik7CisgICAgICAgICAgICBwcmludGYoImxlbmd0aCBvZiBhbGwgdmFsdWUgbWFwczogICU2bGRcbiIsIChsb25nKXZhbHVlTWFwcy5zaXplKCkpOworICAgICAgICAgICAgcHJpbnRmKCJsZW5ndGggb2YgYWxsIEJ5dGVzVHJpZXM6ICAlNmxkXG4iLCAobG9uZylieXRlc1RyaWVzLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHByaW50ZigibGVuZ3RoIG9mIGFsbCBuYW1lIGdyb3VwczogJTZsZFxuIiwgKGxvbmcpbmFtZUdyb3Vwcy5sZW5ndGgoKSk7CisgICAgICAgICAgICBwcmludGYoImxlbmd0aCBvZiBwbmFtZXMuaWN1IGRhdGE6ICU2bGRcbiIsIChsb25nKWluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9UT1RBTF9TSVpFXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIGludDMyX3Qgd3JpdGVWYWx1ZUFsaWFzZXMoY29uc3QgVmFsdWUgJnZhbHVlLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICAgICAgaW50MzJfdCBuYW1lT2Zmc2V0PXVoYXNoX2dldGkobmFtZUdyb3VwVG9PZmZzZXQsICh2b2lkICopdmFsdWUuam9pbmVkQWxpYXNlcyk7CisgICAgICAgIGlmKG5hbWVPZmZzZXQhPTApIHsKKyAgICAgICAgICAgIC8vIFRoZSBzYW1lIGxpc3Qgb2YgYWxpYXNlcyBoYXMgYmVlbiB3cml0dGVuIGFscmVhZHkuCisgICAgICAgICAgICByZXR1cm4gbmFtZU9mZnNldC0xOyAgLy8gV2FzIGluY3JlbWVudGVkIHRvIHJlc2VydmUgMCBmb3IgIm5vdCBmb3VuZCIuCisgICAgICAgIH0KKyAgICAgICAgLy8gV3JpdGUgdGhpcyBub3QteWV0LXNlZW4gbGlzdCBvZiBhbGlhc2VzLgorICAgICAgICBuYW1lT2Zmc2V0PW5hbWVHcm91cHMubGVuZ3RoKCk7CisgICAgICAgIHVoYXNoX3B1dGkobmFtZUdyb3VwVG9PZmZzZXQsICh2b2lkICopdmFsdWUuam9pbmVkQWxpYXNlcywKKyAgICAgICAgICAgICAgICAgICBuYW1lT2Zmc2V0KzEsICZlcnJvckNvZGUpOworICAgICAgICAvLyBUaGUgZmlyc3QgYnl0ZSB0ZWxscyB1cyBob3cgbWFueSBhbGlhc2VzIHRoZXJlIGFyZS4KKyAgICAgICAgLy8gV2UgdXNlIG9ubHkgdmFsdWVzIDAuLjB4MWYgaW4gdGhlIGZpcnN0IGJ5dGUgYmVjYXVzZSB3aGVuIHdlIHdyaXRlCisgICAgICAgIC8vIHRoZSBuYW1lIGdyb3VwcyBhcyBhbiBpbnZhcmlhbnQtY2hhcmFjdGVyIHN0cmluZyBpbnRvIGEgc291cmNlIGZpbGUsCisgICAgICAgIC8vIHRob3NlIHZhbHVlcyAoQzAgY29udHJvbCBjb2RlcykgYXJlIHdyaXR0ZW4gYXMgbnVtYmVycyByYXRoZXIgdGhhbiBhcyBjaGFyYWN0ZXJzLgorICAgICAgICBpbnQzMl90IGNvdW50PXZhbHVlLmNvdW50OworICAgICAgICBpZihjb3VudD49MHgyMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogVG9vIG1hbnkgYWxpYXNlcyBpbiBcIiVzXCJcbiIsIHZhbHVlLmpvaW5lZEFsaWFzZXMpOworICAgICAgICAgICAgZXhpdChVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SKTsKKyAgICAgICAgfQorICAgICAgICBuYW1lR3JvdXBzLmFwcGVuZCgoY2hhciljb3VudCwgZXJyb3JDb2RlKTsKKyAgICAgICAgLy8gVGhlcmUgaXMgYXQgbGVhc3QgYSBzaG9ydCBuYW1lIChzb21ldGltZXMgZW1wdHkpIGFuZCBhIGxvbmcgbmFtZS4gKGNvdW50Pj0yKQorICAgICAgICAvLyBOb3RlOiBTb21ldGltZXMgdGhlIHNob3J0IGFuZCBsb25nIG5hbWVzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGNvdWxkIHNldCBhIGZsYWcgYW5kIG9taXQgdGhlIGR1cGxpY2F0ZSwKKyAgICAgICAgLy8gYnV0IHRoYXQgd291bGQgc2F2ZSBvbmx5IGFib3V0IDEuMzUlIG9mIHRvdGFsIGRhdGEgc2l6ZSAoVW5pY29kZSA2LjAvSUNVIDQuNikKKyAgICAgICAgLy8gd2hpY2ggaXMgbm90IHdvcnRoIHRoZSB0cm91YmxlLgorICAgICAgICAvLyBOb3RlOiBJbiBVbmljb2RlIDYuMSwgdGhlcmUgYXJlIG1vcmUgZHVwbGljYXRlcyBkdWUgdG8gbmV3bHkgYWRkZWQKKyAgICAgICAgLy8gc2hvcnQgbmFtZXMgZm9yIGJsb2NrcyBhbmQgb3RoZXIgcHJvcGVydGllcy4KKyAgICAgICAgLy8gSXQgbWlnaHQgbm93IGJlIHdvcnRoIGNoYW5naW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgZm9yKGludDMyX3QgaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnM9dmFsdWUuYWxpYXNlc1tpXTsKKyAgICAgICAgICAgIGludDMyX3Qgc0xlbmd0aD11cHJ2X3N0cmxlbihzKSsxOworICAgICAgICAgICAgaWYoc0xlbmd0aD5tYXhOYW1lTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbWF4TmFtZUxlbmd0aD1zTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZUdyb3Vwcy5hcHBlbmQocywgc0xlbmd0aCwgZXJyb3JDb2RlKTsgIC8vIGluY2x1ZGluZyBOVUwKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZU9mZnNldDsKKyAgICB9CisKKyAgICB2b2lkIGJ1aWxkVmFsdWVNYXAoY29uc3QgVmFsdWUgdmFsdWVzW10sIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICAgICAgVVZlY3RvcjMyIHNvcnRlZFZhbHVlcyhlcnJvckNvZGUpOworICAgICAgICBVVmVjdG9yMzIgbmFtZU9mZnNldHMoZXJyb3JDb2RlKTsgIC8vIFBhcmFsbGVsIHRvIHZhbHVlc1tdLgorICAgICAgICBpbnQzMl90IGk7CisgICAgICAgIGZvcihpPTA7IGk8bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHNvcnRlZFZhbHVlcy5zb3J0ZWRJbnNlcnQodmFsdWVzW2ldLmVudW1WYWx1ZSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIG5hbWVPZmZzZXRzLmFkZEVsZW1lbnQod3JpdGVWYWx1ZUFsaWFzZXModmFsdWVzW2ldLCBlcnJvckNvZGUpLCBlcnJvckNvZGUpOworICAgICAgICB9CisgICAgICAgIGludDMyX3QgcmFuZ2VzWzEwXVsyXTsKKyAgICAgICAgaW50MzJfdCBudW1SYW5nZXM9dXBydl9tYWtlRGVuc2VSYW5nZXMoc29ydGVkVmFsdWVzLmdldEJ1ZmZlcigpLCBsZW5ndGgsIDB4ZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcywgTEVOR1RIT0YocmFuZ2VzKSk7CisgICAgICAgIGlmKG51bVJhbmdlcz4wKSB7CisgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChudW1SYW5nZXMsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBmb3IoaT0wOyBpPG51bVJhbmdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQocmFuZ2VzW2ldWzBdLCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KHJhbmdlc1tpXVsxXSsxLCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIGZvcihpbnQzMl90IGo9cmFuZ2VzW2ldWzBdOyBqPD1yYW5nZXNbaV1bMV07ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2UgbWlnaHQgbm90IGJlIGNvbXBsZXRlbHkgZGVuc2UsIHNvIGogbWlnaHQgbm90IGhhdmUgYW4gZW50cnksCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2Ugd3JpdGUgYSBuYW1lT2Zmc2V0IG9mIDAuCisgICAgICAgICAgICAgICAgICAgIC8vIFJlYWwgbmFtZU9mZnNldHMgZm9yIHByb3BlcnR5IHZhbHVlcyBhcmUgbmV2ZXIgMC4KKyAgICAgICAgICAgICAgICAgICAgLy8gKFRoZSBmaXJzdCBuYW1lIGdyb3VwIGlzIGZvciB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZS4pCisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWVJbmRleD12YWx1ZXNJbmRleE9mKHZhbHVlcywgbGVuZ3RoLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBuYW1lT2Zmc2V0PSB2YWx1ZUluZGV4Pj0wID8gbmFtZU9mZnNldHMuZWxlbWVudEF0aSh2YWx1ZUluZGV4KSA6IDA7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KG5hbWVPZmZzZXQsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8gZGVuc2UgcmFuZ2VzLgorICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoMHgxMCtsZW5ndGgsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBmb3IoaT0wOyBpPGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoc29ydGVkVmFsdWVzLmVsZW1lbnRBdGkoaSksIGVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IoaT0wOyBpPGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoCisgICAgICAgICAgICAgICAgICAgIG5hbWVPZmZzZXRzLmVsZW1lbnRBdGkoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNJbmRleE9mKHZhbHVlcywgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkVmFsdWVzLmVsZW1lbnRBdGkoaSkpKSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IHZhbHVlc0luZGV4T2YoY29uc3QgVmFsdWUgdmFsdWVzW10sIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IHZhbHVlKSB7CisgICAgICAgIGZvcihpbnQzMl90IGk9MDs7ICsraSkgeworICAgICAgICAgICAgaWYodmFsdWVzW2ldLmVudW1WYWx1ZT09dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCBzZXRQcm9wZXJ0eUludChpbnQzMl90IHByb3AsIGludDMyX3Qgc3ViSW5kZXgsIGludDMyX3QgdmFsdWUpIHsKKyAgICAgICAgLy8gQXNzdW1lIHRoYXQgcHJvcCBpcyBpbiB0aGUgdmFsdWVNYXBzLmVsZW1lbnRBdGkoMCkgcmFuZ2VzLgorICAgICAgICBpbnQzMl90IGluZGV4PTE7CisgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgaW50MzJfdCByYW5nZVN0YXJ0PXZhbHVlTWFwcy5lbGVtZW50QXRpKGluZGV4KTsKKyAgICAgICAgICAgIGludDMyX3QgcmFuZ2VMaW1pdD12YWx1ZU1hcHMuZWxlbWVudEF0aShpbmRleCsxKTsKKyAgICAgICAgICAgIGluZGV4Kz0yOworICAgICAgICAgICAgaWYocmFuZ2VTdGFydDw9cHJvcCAmJiBwcm9wPHJhbmdlTGltaXQpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuc2V0RWxlbWVudEF0KHZhbHVlLCBpbmRleCsyKihwcm9wLXJhbmdlU3RhcnQpK3N1YkluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4Kz0yKihyYW5nZUxpbWl0LXJhbmdlU3RhcnQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGRWYWx1ZVRvQnl0ZXNUcmllKGNvbnN0IFZhbHVlICZ2YWx1ZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsaWFzZXNbTUFYX0FMSUFTRVNdOworICAgICAgICBpbnQzMl90IG51bUFsaWFzZXM9dmFsdWUuZ2V0VW5pcXVlTm9ybWFsaXplZEFsaWFzZXMoYWxpYXNlcyk7CisgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxudW1BbGlhc2VzOyArK2kpIHsKKyAgICAgICAgICAgIGJ0Yi5hZGQoYWxpYXNlc1tpXSwgdmFsdWUuZW51bVZhbHVlLCBlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50MzJfdCBidWlsZFZhbHVlc0J5dGVzVHJpZShjb25zdCBWYWx1ZSB2YWx1ZXNbXSwgaW50MzJfdCBsZW5ndGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBidGIuY2xlYXIoKTsKKyAgICAgICAgZm9yKGludDMyX3QgaT0wOyBpPGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBhZGRWYWx1ZVRvQnl0ZXNUcmllKHZhbHVlc1tpXSwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpbnQzMl90IGJ5dGVzVHJpZU9mZnNldD1ieXRlc1RyaWVzLmxlbmd0aCgpOworICAgICAgICBieXRlc1RyaWVzLmFwcGVuZChidGIuYnVpbGRTdHJpbmdQaWVjZShVU1RSSU5HVFJJRV9CVUlMRF9TTUFMTCwgZXJyb3JDb2RlKSwgZXJyb3JDb2RlKTsKKyAgICAgICAgcmV0dXJuIGJ5dGVzVHJpZU9mZnNldDsKKyAgICB9CisKKyAgICAvLyBWYXJpYW50IG9mIGJ1aWxkVmFsdWVzQnl0ZXNUcmllKCkgZm9yIFByb3BlcnR5LgorICAgIC8vIFByb3BlcnR5IGlzLWEgVmFsdWUsIGFuZCB0aGUgc291cmNlIGNvZGUgaXMgdGhlIHNhbWUsCisgICAgLy8gYnV0IHdoZW4gd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheSB3ZSBuZWVkIHRvIGluY3JlbWVudCBieSB0aGUgcmlnaHQgb2JqZWN0IHNpemUuCisgICAgaW50MzJfdCBidWlsZFByb3BlcnRpZXNCeXRlc1RyaWUoY29uc3QgUHJvcGVydHkgcHJvcGVydGllc1tdLCBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICAgICAgYnRiLmNsZWFyKCk7CisgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYWRkVmFsdWVUb0J5dGVzVHJpZShwcm9wZXJ0aWVzW2ldLCBlcnJvckNvZGUpOworICAgICAgICB9CisgICAgICAgIGludDMyX3QgYnl0ZXNUcmllT2Zmc2V0PWJ5dGVzVHJpZXMubGVuZ3RoKCk7CisgICAgICAgIGJ5dGVzVHJpZXMuYXBwZW5kKGJ0Yi5idWlsZFN0cmluZ1BpZWNlKFVTVFJJTkdUUklFX0JVSUxEX1NNQUxMLCBlcnJvckNvZGUpLCBlcnJvckNvZGUpOworICAgICAgICByZXR1cm4gYnl0ZXNUcmllT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgUHJvcGVydHlOYW1lcyAqZ2V0UHJvcGVydHlOYW1lcygpIHsKKyAgICAgICAgcG5hbWVzLmluaXQodmFsdWVNYXBzLmdldEJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYnl0ZXNUcmllcy5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuICZwbmFtZXM7CisgICAgfQorCitwcml2YXRlOgorICAgIGludDMyX3QgaW5kZXhlc1tQcm9wTmFtZURhdGE6OklYX0NPVU5UXTsKKyAgICBVVmVjdG9yMzIgdmFsdWVNYXBzOworICAgIEJ5dGVzVHJpZUJ1aWxkZXIgYnRiOworICAgIENoYXJTdHJpbmcgYnl0ZXNUcmllczsKKyAgICBDaGFyU3RyaW5nIG5hbWVHcm91cHM7CisgICAgaW50MzJfdCBtYXhOYW1lTGVuZ3RoOworICAgIFBOYW1lc1Byb3BlcnR5TmFtZXMgcG5hbWVzOworICAgIFVIYXNodGFibGUgKm5hbWVHcm91cFRvT2Zmc2V0OworfTsKKworLyogVURhdGFJbmZvIGNmLiB1ZGF0YS5oICovCitzdGF0aWMgY29uc3QgVURhdGFJbmZvIGRhdGFJbmZvID0geworICAgIHNpemVvZihVRGF0YUluZm8pLAorICAgIDAsCisKKyAgICBVX0lTX0JJR19FTkRJQU4sCisgICAgVV9DSEFSU0VUX0ZBTUlMWSwKKyAgICBzaXplb2YoVUNoYXIpLAorICAgIDAsCisKKyAgICB7IFBOQU1FX1NJR18wLCBQTkFNRV9TSUdfMSwgUE5BTUVfU0lHXzIsIFBOQU1FX1NJR18zIH0sCisgICAgeyAyLCAwLCAwLCAwIH0sICAgICAgICAgICAgICAgICAvKiBmb3JtYXRWZXJzaW9uICovCisgICAgVU5JQ09ERV9WRVJTSU9OCit9OworCit2b2lkCitQTmFtZXNCdWlsZGVySW1wbDo6d3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorICAgIFVOZXdEYXRhTWVtb3J5ICpwZGF0YT11ZGF0YV9jcmVhdGUocGF0aCwgUE5BTUVfREFUQV9UWVBFLCBQTkFNRV9EQVRBX05BTUUsICZkYXRhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb3B5cmlnaHQgPyBVX0NPUFlSSUdIVF9TVFJJTkcgOiAwLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiB1ZGF0YV9jcmVhdGUoJXMsIHBuYW1lcy5pY3UpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWRhdGFfd3JpdGVCbG9jayhwZGF0YSwgaW5kZXhlcywgUHJvcE5hbWVEYXRhOjpJWF9DT1VOVCo0KTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBkYXRhLCB2YWx1ZU1hcHMuZ2V0QnVmZmVyKCksIHZhbHVlTWFwcy5zaXplKCkqNCk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwZGF0YSwgYnl0ZXNUcmllcy5kYXRhKCksIGJ5dGVzVHJpZXMubGVuZ3RoKCkpOworICAgIHVkYXRhX3dyaXRlQmxvY2socGRhdGEsIG5hbWVHcm91cHMuZGF0YSgpLCBuYW1lR3JvdXBzLmxlbmd0aCgpKTsKKworICAgIGludDMyX3QgZGF0YUxlbmd0aD0oaW50MzJfdCl1ZGF0YV9maW5pc2gocGRhdGEsICZlcnJvckNvZGUpOworICAgIGlmKGRhdGFMZW5ndGghPWluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9UT1RBTF9TSVpFXSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAidWRhdGFfZmluaXNoKHBuYW1lcy5pY3UpIHJlcG9ydHMgJWxkIGJ5dGVzIHdyaXR0ZW4gYnV0IHNob3VsZCBiZSAlbGRcbiIsCisgICAgICAgICAgICAgICAgKGxvbmcpZGF0YUxlbmd0aCwgKGxvbmcpaW5kZXhlc1tQcm9wTmFtZURhdGE6OklYX1RPVEFMX1NJWkVdKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQKK1BOYW1lc0J1aWxkZXJJbXBsOjp3cml0ZUNTb3VyY2VGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorICAgIEZJTEUgKmY9dXNyY19jcmVhdGUocGF0aCwgInByb3BuYW1lX2RhdGEuaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaWN1L3Rvb2xzL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNidWlsZGVyLmNwcCIpOworICAgIGlmKGY9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfRklMRV9BQ0NFU1NfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcHV0cygiI2lmbmRlZiBJTkNMVURFRF9GUk9NX1BST1BOQU1FX0NQUFxuIgorICAgICAgICAgICIjICAgZXJyb3IgVGhpcyBmaWxlIG11c3QgYmUgI2luY2x1ZGVkIGZyb20gcHJvcG5hbWUuY3BwIG9ubHkuXG4iCisgICAgICAgICAgIiNlbmRpZlxuXG4iLCBmKTsKKworICAgIGZwdXRzKCJVX05BTUVTUEFDRV9CRUdJTlxuXG4iLCBmKTsKKworICAgIHVzcmNfd3JpdGVBcnJheShmLCAiY29uc3QgaW50MzJfdCBQcm9wTmFtZURhdGE6OmluZGV4ZXNbJWxkXT17IiwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlcywgMzIsIFByb3BOYW1lRGF0YTo6SVhfQ09VTlQsCisgICAgICAgICAgICAgICAgICAgICJ9O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwgImNvbnN0IGludDMyX3QgUHJvcE5hbWVEYXRhOjp2YWx1ZU1hcHNbJWxkXT17XG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuZ2V0QnVmZmVyKCksIDMyLCB2YWx1ZU1hcHMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwgImNvbnN0IHVpbnQ4X3QgUHJvcE5hbWVEYXRhOjpieXRlc1RyaWVzWyVsZF09e1xuIiwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXNUcmllcy5kYXRhKCksIDgsIGJ5dGVzVHJpZXMubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICJcbn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVBcnJheU9mTW9zdGx5SW52Q2hhcnMoCisgICAgICAgIGYsICJjb25zdCBjaGFyIFByb3BOYW1lRGF0YTo6bmFtZUdyb3Vwc1slbGRdPXtcbiIsCisgICAgICAgIG5hbWVHcm91cHMuZGF0YSgpLCBuYW1lR3JvdXBzLmxlbmd0aCgpLAorICAgICAgICAiXG59O1xuXG4iKTsKKworICAgIGZwdXRzKCJVX05BTUVTUEFDRV9FTkRcbiIsIGYpOworCisgICAgZmNsb3NlKGYpOworfQorCitQTmFtZXNCdWlsZGVyICoKK2NyZWF0ZVBOYW1lc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICBQTmFtZXNCdWlsZGVyICpwYj1uZXcgUE5hbWVzQnVpbGRlckltcGwoZXJyb3JDb2RlKTsKKyAgICBpZihwYj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHBiOworfQorCisvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGEgcGFydGlhbCBjb3B5IG9mIHJ1bnRpbWUgcHJvcG5hbWUuY3BwIGNvZGUuCisvLyBDb25zaWRlciBjaGFuZ2luZyB0aGF0IGludG8gYSBzZW1pLXB1YmxpYyBBUEkgdG8gYXZvaWQgZHVwbGljYXRpb24uCisKK2ludDMyX3QgUE5hbWVzUHJvcGVydHlOYW1lczo6ZmluZFByb3BlcnR5KGludDMyX3QgcHJvcGVydHkpIGNvbnN0IHsKKyAgICBpbnQzMl90IGk9MTsgIC8vIHZhbHVlTWFwcyBpbmRleCwgaW5pdGlhbGx5IGFmdGVyIG51bVJhbmdlcworICAgIGZvcihpbnQzMl90IG51bVJhbmdlcz12YWx1ZU1hcHNbMF07IG51bVJhbmdlcz4wOyAtLW51bVJhbmdlcykgeworICAgICAgICAvLyBSZWFkIGFuZCBza2lwIHRoZSBzdGFydCBhbmQgbGltaXQgb2YgdGhpcyByYW5nZS4KKyAgICAgICAgaW50MzJfdCBzdGFydD12YWx1ZU1hcHNbaV07CisgICAgICAgIGludDMyX3QgbGltaXQ9dmFsdWVNYXBzW2krMV07CisgICAgICAgIGkrPTI7CisgICAgICAgIGlmKHByb3BlcnR5PHN0YXJ0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihwcm9wZXJ0eTxsaW1pdCkgeworICAgICAgICAgICAgcmV0dXJuIGkrKHByb3BlcnR5LXN0YXJ0KSoyOworICAgICAgICB9CisgICAgICAgIGkrPShsaW1pdC1zdGFydCkqMjsgIC8vIFNraXAgYWxsIGVudHJpZXMgZm9yIHRoaXMgcmFuZ2UuCisgICAgfQorICAgIHJldHVybiAwOworfQorCitVQm9vbCBQTmFtZXNQcm9wZXJ0eU5hbWVzOjpjb250YWluc05hbWUoQnl0ZXNUcmllICZ0cmllLCBjb25zdCBjaGFyICpuYW1lKSBjb25zdCB7CisgICAgaWYobmFtZT09TlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIFVTdHJpbmdUcmllUmVzdWx0IHJlc3VsdD1VU1RSSU5HVFJJRV9OT19WQUxVRTsKKyAgICBjaGFyIGM7CisgICAgd2hpbGUoKGM9Km5hbWUrKykhPTApIHsKKyAgICAgICAgYz11cHJ2X2ludkNoYXJUb0xvd2VyY2FzZUFzY2lpKGMpOworICAgICAgICAvLyBJZ25vcmUgZGVsaW1pdGVycyAnLScsICdfJywgYW5kIEFTQ0lJIFdoaXRlX1NwYWNlLgorICAgICAgICBpZihjPT0weDJkIHx8IGM9PTB4NWYgfHwgYz09MHgyMCB8fCAoMHgwOTw9YyAmJiBjPD0weDBkKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIVVTVFJJTkdUUklFX0hBU19ORVhUKHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQ9dHJpZS5uZXh0KCh1aW50OF90KWMpOworICAgIH0KKyAgICByZXR1cm4gVVNUUklOR1RSSUVfSEFTX1ZBTFVFKHJlc3VsdCk7Cit9CisKK2ludDMyX3QgUE5hbWVzUHJvcGVydHlOYW1lczo6Z2V0UHJvcGVydHlPclZhbHVlRW51bShpbnQzMl90IGJ5dGVzVHJpZU9mZnNldCwgY29uc3QgY2hhciAqYWxpYXMpIGNvbnN0IHsKKyAgICBCeXRlc1RyaWUgdHJpZShieXRlc1RyaWVzK2J5dGVzVHJpZU9mZnNldCk7CisgICAgaWYoY29udGFpbnNOYW1lKHRyaWUsIGFsaWFzKSkgeworICAgICAgICByZXR1cm4gdHJpZS5nZXRWYWx1ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBVQ0hBUl9JTlZBTElEX0NPREU7CisgICAgfQorfQorCitpbnQzMl90CitQTmFtZXNQcm9wZXJ0eU5hbWVzOjpnZXRQcm9wZXJ0eUVudW0oY29uc3QgY2hhciAqYWxpYXMpIGNvbnN0IHsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlPclZhbHVlRW51bSgwLCBhbGlhcyk7Cit9CisKK2ludDMyX3QKK1BOYW1lc1Byb3BlcnR5TmFtZXM6OmdldFByb3BlcnR5VmFsdWVFbnVtKGludDMyX3QgcHJvcGVydHksIGNvbnN0IGNoYXIgKmFsaWFzKSBjb25zdCB7CisgICAgaW50MzJfdCB2YWx1ZU1hcEluZGV4PWZpbmRQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgaWYodmFsdWVNYXBJbmRleD09MCkgeworICAgICAgICByZXR1cm4gVUNIQVJfSU5WQUxJRF9DT0RFOyAgLy8gTm90IGEga25vd24gcHJvcGVydHkuCisgICAgfQorICAgIHZhbHVlTWFwSW5kZXg9dmFsdWVNYXBzW3ZhbHVlTWFwSW5kZXgrMV07CisgICAgaWYodmFsdWVNYXBJbmRleD09MCkgeworICAgICAgICByZXR1cm4gVUNIQVJfSU5WQUxJRF9DT0RFOyAgLy8gVGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgbmFtZWQgdmFsdWVzLgorICAgIH0KKyAgICAvLyB2YWx1ZU1hcEluZGV4IGlzIHRoZSBzdGFydCBvZiB0aGUgcHJvcGVydHkncyB2YWx1ZU1hcCwKKyAgICAvLyB3aGVyZSB0aGUgZmlyc3Qgd29yZCBpcyB0aGUgQnl0ZXNUcmllIG9mZnNldC4KKyAgICByZXR1cm4gZ2V0UHJvcGVydHlPclZhbHVlRW51bSh2YWx1ZU1hcHNbdmFsdWVNYXBJbmRleF0sIGFsaWFzKTsKK30KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5yZWdleGNhc2luZy9NYWtlZmlsZSBiL3VuaWNvZGUvYy9nZW5yZWdleGNhc2luZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjJiMjRjCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnJlZ2V4Y2FzaW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMgICBDb3B5cmlnaHQgKEMpIDIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyBFZGl0IHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mIHlvdXIgSUNVIHNvdXJjZXMgJiBidWlsZCAoaWYgb3V0LW9mLXNvdXJjZSkKK0lDVV9IT01FPSQoSE9NRSkvaWN1L2ljdS90cnVuay9zb3VyY2UKK0lDVV9CVUlMRD0kKElDVV9IT01FKQorCitkYXRhOiBnZW5yZWdleGNhc2luZworCUxEX0xJQlJBUllfUEFUSD0kKElDVV9CVUlMRCkvbGliOiQoSUNVX0JVSUxEKS9zdHViZGF0YSBJQ1VfREFUQT0kKElDVV9CVUlMRCkvZGF0YS9vdXQgLi9nZW5yZWdleGNhc2luZworCitnZW5yZWdleGNhc2luZzogZ2VucmVnZXhjYXNpbmcuY3BwCisJY2xhbmcrKyBnZW5yZWdleGNhc2luZy5jcHAgLXN0ZD1jKysweCAtZyAtSSAkKElDVV9IT01FKS9jb21tb24gLUkgJChJQ1VfSE9NRSkvaTE4biAtSSAkKElDVV9IT01FKS9pbyAtTCQoSUNVX0JVSUxEKS9saWIgLUwkKElDVV9CVUlMRCkvc3R1YmRhdGEgLWxpY3V1YyAtbGljdWkxOG4gLWxpY3VkYXRhIC1vIGdlbnJlZ2V4Y2FzaW5nIApkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnJlZ2V4Y2FzaW5nL2dlbnJlZ2V4Y2FzaW5nLmNwcCBiL3VuaWNvZGUvYy9nZW5yZWdleGNhc2luZy9nZW5yZWdleGNhc2luZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwNzQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5yZWdleGNhc2luZy9nZW5yZWdleGNhc2luZy5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvLyBmaWxlIG5hbWU6IGdlbnJlZ2V4Y2FzaW5nLmNwcAorLy8KKy8vIFByb2dyYW0gdG8gZ2VuZXJhdGUgdGhlIGNhc2luZyBkYXRhIGZvciB1c2UgYnkgSUNVIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisvLyBUaGUgZGF0YSBkZWNsYXJhdGlvbnMgb3V0cHV0IHdoZW4gcnVubmluZyB0aGlzIHByb2dyYW0gYXJlIHRvIGJlIGNvcGllZAorLy8gaW50byB0aGUgZmlsZSBpMThuL3JlZ2V4Y21wLmgKKy8vCisvLyBTZWUgdGhlIGZ1bmN0aW9uIFJlZ2V4Q29tcGlsZTo6ZmluZENhc2VJbnNlbnNpdGl2ZVN0YXJ0ZXJzKCkgZm9yIG1vcmUgZXhwbGFuYXRpb24uCisKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJpb3N0cmVhbSIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0ZDo6c3RyaW5nIHNzdHJpbmcoY29uc3QgVW5pY29kZVN0cmluZyAmdXMpIHsKKyAgICBzdHJpbmcgcmV0U3RyaW5nOworICAgIHVzLnRvVVRGOFN0cmluZyhyZXRTdHJpbmcpOworICAgIHJldHVybiByZXRTdHJpbmc7Cit9CisKK2ludCBtYWluKCkgeworCisgICAgc3RkOjptYXA8VUNoYXIzMiwgc3RkOjpzZXQ8VUNoYXIzMj4+IGNtYXA7CisKKyAgICBmb3IgKFVDaGFyMzIgY3AgPSAwOyBjcDw9MHgxMGZmZmY7IGNwKyspIHsKKyAgICAgICAgVW5pY29kZVNldCBzKGNwLCBjcCk7CisgICAgICAgIHMuY2xvc2VPdmVyKFVTRVRfQ0FTRV9JTlNFTlNJVElWRSk7CisKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIHNldEl0ZXIocyk7CisgICAgICAgIHdoaWxlIChzZXRJdGVyLm5leHQoKSkgeworICAgICAgICAgICAgaWYgKCFzZXRJdGVyLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnN0ciA9IHNldEl0ZXIuZ2V0U3RyaW5nKCk7CisKKyAgICAgICAgICAgIGNvdXQgPDwgIkdvdCBhIHN0cmluZyBmb3IgXCIiIDw8IHNzdHJpbmcoVW5pY29kZVN0cmluZyhjcCkpIDw8ICJcIiBbXFx1IiA8PCBoZXggPDwgY3AgPDwgIl1cbiI7CisgICAgICAgICAgICBjb3V0IDw8ICIgICAgXCIiIDw8IHNzdHJpbmcoc3RyKSA8PCAiXCIgICAgWyI7CisgICAgICAgICAgICBmb3IgKGludDMyX3Qgaj0wOyBqPHN0ci5sZW5ndGgoKTsgaj1zdHIubW92ZUluZGV4MzIoaiwgMSkpIHsKKyAgICAgICAgICAgICAgICBjb3V0IDw8IGhleCA8PCAiXFx1IiA8PCBzdHIuY2hhcjMyQXQoaikgPDwgIiAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291dCA8PCAiXSIgPDwgZW5kbDsKKyAgICAgICAgICAgIFVDaGFyMzIgYzMyID0gc3RyLmNoYXIzMkF0KDApOworICAgICAgICAgICAgaWYgKHMuY29udGFpbnMoYzMyKSkgeworICAgICAgICAgICAgICAgIGNvdXQgPDwgIiAgICBTZXQgY29udGFpbnMgZmlyc3QgY2hhci5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbWFwW2MzMl0uaW5zZXJ0KGNwKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgc3RkOjpjb3V0IDw8ICJJdGVyYXRpbmcgdGhlIG1hcC5cbiI7CisgICAgZm9yIChjb25zdCBhdXRvICZtYXBQYWlyOiBjbWFwKSB7CisgICAgICAgIFVDaGFyMzIgY3AgPSBtYXBQYWlyLmZpcnN0OworICAgICAgICBzdGQ6OmNvdXQgPDwgImtleTogXCIiIDw8IHNzdHJpbmcoVW5pY29kZVN0cmluZyhjcCkpIDw8ICJcIiAgXFx1IiA8PCBjcCA8PCAiIDogIFsiOworICAgICAgICBmb3IgKFVDaGFyMzIgdmFsQ1A6IG1hcFBhaXIuc2Vjb25kKSB7CisgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiXCIiIDw8IHNzdHJpbmcoVW5pY29kZVN0cmluZyh2YWxDUCkpIDw8ICJcIiBcXHUiIDw8IHZhbENQIDw8ICIgIjsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OmNvdXQgPDwgIl1cbiI7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDcmVhdGUgdGhlIGRhdGEgYXJyYXlzIHRvIGJlIHBhc3RlZCBpbnRvIHJlZ2V4Y21wLmNwcAorICAgIC8vCisKKyAgICBzdGQ6OmNvdXQgPDwgIlxuXG5Db3B5IHRoZSBsaW5lcyBiZWxvdyBpbnRvIHRoZSBmaWxlIGkxOG4vcmVnZXhjbXAuY3BwLlxuXG4iOworICAgIHN0ZDo6Y291dCA8PCAiLy8gTWFjaGluZSBHZW5lcmF0ZWQgRGF0YS4gRG8gbm90IGhhbmQgZWRpdC5cbiI7CisKKyAgICBVbmljb2RlU3RyaW5nIG91dFN0cmluZzsKKyAgICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIFVDaGFyMzIgIGZDUCA9IDA7CisgICAgICAgIGludDE2X3QgIGZTdHJJbmRleCA9IDA7CisgICAgICAgIGludDE2X3QgIGZDb3VudCA9IDA7CisgICAgfTsKKworICAgIHN0ZDo6dmVjdG9yPEl0ZW0+IGRhdGE7CisgICAgZm9yIChjb25zdCBhdXRvICZtYXBQYWlyOiBjbWFwKSB7CisgICAgICAgIEl0ZW0gICBkYXRhRm9yQ1A7CisgICAgICAgIGRhdGFGb3JDUC5mQ1AgPSBtYXBQYWlyLmZpcnN0OworICAgICAgICBkYXRhRm9yQ1AuZlN0ckluZGV4ID0gb3V0U3RyaW5nLmxlbmd0aCgpOworICAgICAgICBmb3IgKFVDaGFyMzIgdmFsQ1A6IG1hcFBhaXIuc2Vjb25kKSB7CisgICAgICAgICAgICBvdXRTdHJpbmcuYXBwZW5kKHZhbENQKTsKKyAgICAgICAgICAgIGRhdGFGb3JDUC5mQ291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBkYXRhLnB1c2hfYmFjayhkYXRhRm9yQ1ApOworICAgIH0KKworICAgIHN0ZDo6Y291dCA8PCAiICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIFJFQ2FzZUZpeENvZGVQb2ludHNbXSA9IHsiIDsKKyAgICBpbnQgaXRlbXM9MDsKKyAgICBmb3IgKGNvbnN0IEl0ZW0gJmQ6IGRhdGEpIHsKKyAgICAgICAgaWYgKGl0ZW1zKysgJSAxMCA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIlxuICAgICAgICAiOworICAgICAgICB9CisgICAgICAgIHN0ZDo6Y291dCA8PCAiMHgiIDw8IGQuZkNQIDw8ICIsICI7CisgICAgfQorICAgIHN0ZDo6Y291dCA8PCAiMHgxMTAwMDB9O1xuXG4iOworCisgICAgc3RkOjpjb3V0IDw8ICIgICAgc3RhdGljIGNvbnN0IGludDE2X3QgUkVDYXNlRml4U3RyaW5nT2Zmc2V0c1tdID0geyI7CisgICAgaXRlbXMgPSAwOworICAgIGZvciAoY29uc3QgSXRlbSAmZDogZGF0YSkgeworICAgICAgICBpZiAoaXRlbXMrKyAlIDEwID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiXG4gICAgICAgICI7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpjb3V0IDw8ICIweCIgPDwgZC5mU3RySW5kZXggPDwgIiwgIjsKKyAgICB9CisgICAgc3RkOjpjb3V0IDw8ICIwfTtcblxuIjsKKworICAgIHN0ZDo6Y291dCA8PCAiICAgIHN0YXRpYyBjb25zdCBpbnQxNl90IFJFQ2FzZUZpeENvdW50c1tdID0geyI7CisgICAgaXRlbXMgPSAwOworICAgIGZvciAoY29uc3QgSXRlbSAmZDogZGF0YSkgeworICAgICAgICBpZiAoaXRlbXMrKyAlIDEwID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiXG4gICAgICAgICI7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpjb3V0IDw8ICIweCIgPDwgZC5mQ291bnQgPDwgIiwgIjsKKyAgICB9CisgICAgc3RkOjpjb3V0IDw8ICIwfTtcblxuIjsKKworICAgIHN0ZDo6Y291dCA8PCAiICAgIHN0YXRpYyBjb25zdCBVQ2hhciBSRUNhc2VGaXhEYXRhW10gPSB7IjsKKyAgICBmb3IgKGludCBpPTA7IGk8b3V0U3RyaW5nLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgJSAxMCA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIlxuICAgICAgICAiOworICAgICAgICB9CisgICAgICAgIHN0ZDo6Y291dCA8PCAiMHgiIDw8IG91dFN0cmluZy5jaGFyQXQoaSkgPDwgIiwgIjsKKyAgICB9CisgICAgc3RkOjpjb3V0IDw8ICIwfTtcblxuIjsKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnJlZ2V4Y2FzaW5nL3JlYWRtZS50eHQgYi91bmljb2RlL2MvZ2VucmVnZXhjYXNpbmcvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjdhN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnJlZ2V4Y2FzaW5nL3JlYWRtZS50eHQKQEAgLTAsMCArMSwyMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIGNyZWF0ZWQgb246IDIwMTQgTWF5IDIKKyMgY3JlYXRlZCBieTogQW5keSBIZW5pbmdlcgorCitnZW5yZWdleGNhc2luZyBpcyB0aGUgdG9vbCBmb3IgZ2VuZXJhdGluZyBleHRlbmRlZCBjYXNlIGNsb3N1cmUgZGF0YSBuZWVkZWQgYnkKK3JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmcuCisKK1RoZSB0b29sIGdlbmVyYXRlcyBjKysgZGF0YSBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgdGhlbiBtYW51YWxseSBjb3BpZWQgaW50byB0aGUgZmlsZQoraTE4bi9yZWdleGNtcC5jcHAuCisKK0VkaXQgdGhlIE1ha2VmaWxlIHRvIGhhdmUgdGhlIGNvcnJlY3QgZGlyZWN0b3JpZXMgZm9yIHlvdXIgSUNVIHNvdXJjZXMgYW5kIGJ1aWxkCisodGhlIHRvcCB0d28gbGluZXMuKQorCitBIFVuaXgtbGlrZSBzeXN0ZW0gYW5kIHRoZSBjbGFuZyBjb21waWxlciBhcmUgYXNzdW1lZC4KKworVG8gYnVpbGQgYW5kIHJ1biB0aGUgdG9vbCwgZnJvbSB3aXRoaW4gdGhpcyBkaXJlY3RvcnksIGRvIGEgcGxhaW4sIHVucXVhbGlmaWVkCittYWtlCisKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvQ01ha2VMaXN0cy50eHQgYi91bmljb2RlL2MvZ2VudWNhL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWNmMGEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudWNhL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjAzCisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisjIGVkaXRlZCBvbjogMjAxMGp1bDIwCisjIGVkaXRlZCBieTogU3R1YXJ0IEcuIEdpbGwKK2FkZF9leGVjdXRhYmxlKGdlbnVjYSBnZW51Y2EuY3BwIGNvbGxhdGlvbmJhc2VkYXRhYnVpbGRlci5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VudWNhIGljdXVjIGljdWkxOG4gaWN1dHUpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudWNhL01ha2VmaWxlLmluIGIvdW5pY29kZS9jL2dlbnVjYS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEzOGUyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDk2IEBACisjIyBNYWtlZmlsZS5pbiBmb3IgSUNVIC0gdG9vbHMvZ2VudWNhCisjIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyMjIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyMgU291cmNlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbgorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKwordG9wX2J1aWxkZGlyID0gLi4vLi4KKworaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvaWN1ZGVmcy5taworCisjIyBCdWlsZCBkaXJlY3RvcnkgaW5mb3JtYXRpb24KK3N1YmRpciA9IHRvb2xzL2dlbnVjYQorCitUQVJHRVRfU1RVQl9OQU1FID0gZ2VudWNhCisKK1NFQ1RJT04gPSA4CisKK01BTl9GSUxFUyA9ICQoVEFSR0VUX1NUVUJfTkFNRSkuJChTRUNUSU9OKQorCisKKyMjIEV4dHJhIGZpbGVzIHRvIHJlbW92ZSBmb3IgJ21ha2UgY2xlYW4nCitDTEVBTkZJTEVTID0gKn4gJChERVBTKSAkKE1BTl9GSUxFUykKKworIyMgVGFyZ2V0IGluZm9ybWF0aW9uCitUQVJHRVQgPSAkKEJJTkRJUikvJChUQVJHRVRfU1RVQl9OQU1FKSQoRVhFRVhUKQorCitpZm5lcSAoJCh0b3BfYnVpbGRkaXIpLCQodG9wX3NyY2RpcikpCitDUFBGTEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9jb21tb24KK2VuZGlmCitDUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvY29tbW9uIC1JJCh0b3Bfc3JjZGlyKS9pMThuIC1JJChzcmNkaXIpLy4uL3Rvb2x1dGlsCitMSUJTID0gJChMSUJJQ1VUT09MVVRJTCkgJChMSUJJQ1VJMThOKSAkKExJQklDVVVDKSAkKERFRkFVTFRfTElCUykgJChMSUJfTSkKKworT0JKRUNUUyA9IGdlbnVjYS5vIAorCitERVBTID0gJChPQkpFQ1RTOi5vPS5kKQorCisjIyBMaXN0IG9mIHBob255IHRhcmdldHMKKy5QSE9OWSA6IGFsbCBhbGwtbG9jYWwgaW5zdGFsbCBpbnN0YWxsLWxvY2FsIGNsZWFuIGNsZWFuLWxvY2FsCVwKK2Rpc3RjbGVhbiBkaXN0Y2xlYW4tbG9jYWwgZGlzdCBkaXN0LWxvY2FsIGNoZWNrIGNoZWNrLWxvY2FsIGluc3RhbGwtbWFuCisKKyMjIENsZWFyIHN1ZmZpeCBsaXN0CisuU1VGRklYRVMgOgorCisjIyBMaXN0IG9mIHN0YW5kYXJkIHRhcmdldHMKK2FsbDogYWxsLWxvY2FsCitpbnN0YWxsOiBpbnN0YWxsLWxvY2FsCitjbGVhbjogY2xlYW4tbG9jYWwKK2Rpc3RjbGVhbiA6IGRpc3RjbGVhbi1sb2NhbAorZGlzdDogZGlzdC1sb2NhbAorY2hlY2s6IGFsbCBjaGVjay1sb2NhbAorCithbGwtbG9jYWw6ICQoVEFSR0VUKSAkKE1BTl9GSUxFUykKKworaW5zdGFsbC1sb2NhbDogYWxsLWxvY2FsIGluc3RhbGwtbWFuCisJJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChzYmluZGlyKQorCSQoSU5TVEFMTCkgJChUQVJHRVQpICQoREVTVERJUikkKHNiaW5kaXIpCisKK2luc3RhbGwtbWFuOiAkKE1BTl9GSUxFUykKKwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKG1hbmRpcikvbWFuJChTRUNUSU9OKQorCSQoSU5TVEFMTF9EQVRBKSAkPyAkKERFU1RESVIpJChtYW5kaXIpL21hbiQoU0VDVElPTikKKworZGlzdC1sb2NhbDoKKworY2xlYW4tbG9jYWw6CisJdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgJChSTVYpICQoQ0xFQU5GSUxFUykKKwkkKFJNVikgJChUQVJHRVQpICQoT0JKRUNUUykKKworZGlzdGNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbAorCSQoUk1WKSBNYWtlZmlsZQorCitjaGVjay1sb2NhbDogYWxsLWxvY2FsCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKKyQoVEFSR0VUKSA6ICQoT0JKRUNUUykKKwkkKExJTksuY2MpICQoT1VUT1BUKSRAICReICQoTElCUykgCisJJChQT1NUX0JVSUxEX1NURVApCisKKworJS4kKFNFQ1RJT04pOiAkKHNyY2RpcikvJS4kKFNFQ1RJT04pLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKKworaWZlcSAoLCQoTUFLRUNNREdPQUxTKSkKKy1pbmNsdWRlICQoREVQUykKK2Vsc2UKK2lmbmVxICgkKHBhdHN1YnN0ICVjbGVhbiwsJChNQUtFQ01ER09BTFMpKSwpCistaW5jbHVkZSAkKERFUFMpCitlbmRpZgorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnVjYS9jb2xsYXRpb25iYXNlZGF0YWJ1aWxkZXIuY3BwIGIvdW5pY29kZS9jL2dlbnVjYS9jb2xsYXRpb25iYXNlZGF0YWJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhY2IwMzIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudWNhL2NvbGxhdGlvbmJhc2VkYXRhYnVpbGRlci5jcHAKQEAgLTAsMCArMSw1NTAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBjb2xsYXRpb25iYXNlZGF0YWJ1aWxkZXIuY3BwCisqCisqIGNyZWF0ZWQgb246IDIwMTJhdWcxMQorKiBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKi8KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19DT0xMQVRJT04KKworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhcnN0cmllYnVpbGRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3V0ZjE2LmgiCisjaW5jbHVkZSAiY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uYmFzZWRhdGFidWlsZGVyLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uZGF0YS5oIgorI2luY2x1ZGUgImNvbGxhdGlvbmRhdGFidWlsZGVyLmgiCisjaW5jbHVkZSAiY29sbGF0aW9ucm9vdGVsZW1lbnRzLmgiCisjaW5jbHVkZSAibm9ybWFsaXplcjJpbXBsLmgiCisjaW5jbHVkZSAidWFzc2VydC5oIgorI2luY2x1ZGUgInV0cmllMi5oIgorI2luY2x1ZGUgInV2ZWN0cjMyLmgiCisjaW5jbHVkZSAidXZlY3RyNjQuaCIKKyNpbmNsdWRlICJ1dmVjdG9yLmgiCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKK25hbWVzcGFjZSB7CisKKy8qKgorICogQ29tcGFyZSB0d28gc2lnbmVkIGludDY0X3QgdmFsdWVzIGFzIGlmIHRoZXkgd2VyZSB1bnNpZ25lZC4KKyAqLworaW50MzJfdAorY29tcGFyZUludDY0QXNVbnNpZ25lZChpbnQ2NF90IGEsIGludDY0X3QgYikgeworICAgIGlmKCh1aW50NjRfdClhIDwgKHVpbnQ2NF90KWIpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZigodWludDY0X3QpYSA+ICh1aW50NjRfdCliKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gVE9ETzogVHJ5IHRvIG1lcmdlIHRoaXMgd2l0aCB0aGUgYmluYXJ5U2VhcmNoIGluIGFscGhhaW5kZXguY3BwLgorLyoqCisgKiBMaWtlIEphdmEgQ29sbGVjdGlvbnMuYmluYXJ5U2VhcmNoKExpc3QsIFN0cmluZywgQ29tcGFyYXRvcikuCisgKgorICogQHJldHVybiB0aGUgaW5kZXg+PTAgd2hlcmUgdGhlIGl0ZW0gd2FzIGZvdW5kLAorICogICAgICAgICBvciB0aGUgaW5kZXg8MCBmb3IgaW5zZXJ0aW5nIHRoZSBzdHJpbmcgYXQgfmluZGV4IGluIHNvcnRlZCBvcmRlcgorICovCitpbnQzMl90CitiaW5hcnlTZWFyY2goY29uc3QgVVZlY3RvcjY0ICZsaXN0LCBpbnQ2NF90IGNlKSB7CisgICAgaWYgKGxpc3Quc2l6ZSgpID09IDApIHsgcmV0dXJuIH4wOyB9CisgICAgaW50MzJfdCBzdGFydCA9IDA7CisgICAgaW50MzJfdCBsaW1pdCA9IGxpc3Quc2l6ZSgpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50MzJfdCBpID0gKHN0YXJ0ICsgbGltaXQpIC8gMjsKKyAgICAgICAgaW50MzJfdCBjbXAgPSBjb21wYXJlSW50NjRBc1Vuc2lnbmVkKGNlLCBsaXN0LmVsZW1lbnRBdGkoaSkpOworICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGNtcCA8IDApIHsKKyAgICAgICAgICAgIGlmIChpID09IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIH5zdGFydDsgIC8vIGluc2VydCBjZSBiZWZvcmUgaQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGltaXQgPSBpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGkgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gfihzdGFydCArIDEpOyAgLy8gaW5zZXJ0IGNlIGFmdGVyIGkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ID0gaTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6Q29sbGF0aW9uQmFzZURhdGFCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkKKyAgICAgICAgOiBDb2xsYXRpb25EYXRhQnVpbGRlcihlcnJvckNvZGUpLAorICAgICAgICAgIG51bWVyaWNQcmltYXJ5KDB4MTIwMDAwMDApLAorICAgICAgICAgIGZpcnN0SGFuUHJpbWFyeSgwKSwgbGFzdEhhblByaW1hcnkoMCksIGhhblN0ZXAoMiksCisgICAgICAgICAgcm9vdEVsZW1lbnRzKGVycm9yQ29kZSksCisgICAgICAgICAgc2NyaXB0U3RhcnRzTGVuZ3RoKDEpIHsKKyAgICB1cHJ2X21lbXNldChzY3JpcHRzSW5kZXgsIDAsIHNpemVvZihzY3JpcHRzSW5kZXgpKTsKKyAgICB1cHJ2X21lbXNldChzY3JpcHRTdGFydHMsIDAsIHNpemVvZihzY3JpcHRTdGFydHMpKTsKK30KKworQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjp+Q29sbGF0aW9uQmFzZURhdGFCdWlsZGVyKCkgeworfQorCit2b2lkCitDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXI6OmluaXQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisgICAgaWYodHJpZSAhPSBOVUxMKSB7CisgICAgICAgIGVycm9yQ29kZSA9IFVfSU5WQUxJRF9TVEFURV9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdCBjb21wcmVzc2libGU6CisgICAgLy8gLSBkaWdpdHMKKyAgICAvLyAtIExhdGluCisgICAgLy8gLSBIYW5pCisgICAgLy8gLSB0cmFpbCB3ZWlnaHRzCisgICAgLy8gU29tZSBzY3JpcHRzIGFyZSBjb21wcmVzc2libGUsIHNvbWUgYXJlIG5vdC4KKyAgICB1cHJ2X21lbXNldChjb21wcmVzc2libGVCeXRlcywgRkFMU0UsIDI1Nik7CisgICAgY29tcHJlc3NpYmxlQnl0ZXNbQ29sbGF0aW9uOjpVTkFTU0lHTkVEX0lNUExJQ0lUX0JZVEVdID0gVFJVRTsKKworICAgIC8vIEZvciBhIGJhc2UsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXB1dGUgYW4gdW5hc3NpZ25lZC1jaGFyYWN0ZXIgaW1wbGljaXQgQ0UuCisgICAgLy8gVGhpcyBpbmNsdWRlcyBzdXJyb2dhdGUgY29kZSBwb2ludHM7IHNlZSB0aGUgbGFzdCBvcHRpb24gaW4KKyAgICAvLyBVQ0Egc2VjdGlvbiA3LjEuMSBIYW5kbGluZyBJbGwtRm9ybWVkIENvZGUgVW5pdCBTZXF1ZW5jZXMuCisgICAgdHJpZSA9IHV0cmllMl9vcGVuKENvbGxhdGlvbjo6VU5BU1NJR05FRF9DRTMyLCBDb2xsYXRpb246OkZGRkRfQ0UzMiwgJmVycm9yQ29kZSk7CisKKyAgICAvLyBQcmVhbGxvY2F0ZSB0cmllIGJsb2NrcyBmb3IgTGF0aW4gaW4gdGhlIGhvcGUgdGhhdCBwcm94aW1pdHkgaGVscHMgd2l0aCBDUFUgY2FjaGVzLgorICAgIGZvcihVQ2hhcjMyIGMgPSAwOyBjIDwgMHgxODA7ICsrYykgeworICAgICAgICB1dHJpZTJfc2V0MzIodHJpZSwgYywgQ29sbGF0aW9uOjpVTkFTU0lHTkVEX0NFMzIsICZlcnJvckNvZGUpOworICAgIH0KKworICAgIHV0cmllMl9zZXQzMih0cmllLCAweGZmZmUsIENvbGxhdGlvbjo6TUVSR0VfU0VQQVJBVE9SX0NFMzIsICZlcnJvckNvZGUpOworICAgIC8vIE5vIHJvb3QgZWxlbWVudCBmb3IgdGhlIG1lcmdlIHNlcGFyYXRvciB3aGljaCBoYXMgMDIgd2VpZ2h0cy4KKyAgICAvLyBTb21lIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSByb290IGZpcnN0IHByaW1hcnkgQ0UgaXMgdGhlICJzcGFjZSBmaXJzdCBwcmltYXJ5IgorICAgIC8vIGZyb20gRnJhY3Rpb25hbFVDQS50eHQuCisKKyAgICB1aW50MzJfdCBoYW5ndWxDRTMyID0gQ29sbGF0aW9uOjptYWtlQ0UzMkZyb21UYWdBbmRJbmRleChDb2xsYXRpb246OkhBTkdVTF9UQUcsIDApOworICAgIHV0cmllMl9zZXRSYW5nZTMyKHRyaWUsIEhhbmd1bDo6SEFOR1VMX0JBU0UsIEhhbmd1bDo6SEFOR1VMX0VORCwgaGFuZ3VsQ0UzMiwgVFJVRSwgJmVycm9yQ29kZSk7CisKKyAgICAvLyBBZGQgYSBtYXBwaW5nIGZvciB0aGUgZmlyc3QtdW5hc3NpZ25lZCBib3VuZGFyeSwKKyAgICAvLyB3aGljaCBpcyB0aGUgQWxwaGFiZXRpY0luZGV4IG92ZXJmbG93IGJvdW5kYXJ5LgorICAgIFVuaWNvZGVTdHJpbmcgcygoVUNoYXIpMHhmZGQxKTsgIC8vIFNjcmlwdCBib3VuZGFyeSBjb250cmFjdGlvbnMgc3RhcnQgd2l0aCBVK0ZERDEuCisgICAgcy5hcHBlbmQoKFVDaGFyKTB4ZmRkMCk7ICAvLyBaenp6IHNjcmlwdCBzYW1wbGUgY2hhcmFjdGVyIFUrRkREMC4KKyAgICBpbnQ2NF90IGNlID0gQ29sbGF0aW9uOjptYWtlQ0UoQ29sbGF0aW9uOjpGSVJTVF9VTkFTU0lHTkVEX1BSSU1BUlkpOworICAgIGFkZChVbmljb2RlU3RyaW5nKCksIHMsICZjZSwgMSwgZXJyb3JDb2RlKTsKKworICAgIC8vIEFkZCBhIHRhaWxvcmluZyBib3VuZGFyeSwgYnV0IG5vdCBhIG1hcHBpbmcsIGZvciBbZmlyc3QgdHJhaWxpbmddLgorICAgIGNlID0gQ29sbGF0aW9uOjptYWtlQ0UoQ29sbGF0aW9uOjpGSVJTVF9UUkFJTElOR19QUklNQVJZKTsKKyAgICByb290RWxlbWVudHMuYWRkRWxlbWVudChjZSwgZXJyb3JDb2RlKTsKKworICAgIC8vIFUrRkZGRCBtYXBzIHRvIGEgQ0Ugd2l0aCB0aGUgdGhpcmQtaGlnaGVzdCBwcmltYXJ5IHdlaWdodCwKKyAgICAvLyBmb3IgcHJlZGljdGFibGUgaGFuZGxpbmcgb2YgaWxsLWZvcm1lZCBVVEYtOC4KKyAgICB1aW50MzJfdCBjZTMyID0gQ29sbGF0aW9uOjpGRkZEX0NFMzI7CisgICAgdXRyaWUyX3NldDMyKHRyaWUsIDB4ZmZmZCwgY2UzMiwgJmVycm9yQ29kZSk7CisgICAgYWRkUm9vdEVsZW1lbnQoQ29sbGF0aW9uOjpjZUZyb21TaW1wbGVDRTMyKGNlMzIpLCBlcnJvckNvZGUpOworCisgICAgLy8gVStGRkZGIG1hcHMgdG8gYSBDRSB3aXRoIHRoZSBoaWdoZXN0IHByaW1hcnkgd2VpZ2h0LgorICAgIGNlMzIgPSBDb2xsYXRpb246Ok1BWF9SRUdVTEFSX0NFMzI7CisgICAgdXRyaWUyX3NldDMyKHRyaWUsIDB4ZmZmZiwgY2UzMiwgJmVycm9yQ29kZSk7CisgICAgYWRkUm9vdEVsZW1lbnQoQ29sbGF0aW9uOjpjZUZyb21TaW1wbGVDRTMyKGNlMzIpLCBlcnJvckNvZGUpOworfQorCit2b2lkCitDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXI6OmluaXRIYW5SYW5nZXMoY29uc3QgVUNoYXIzMiByYW5nZXNbXSwgaW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkgfHwgbGVuZ3RoID09IDApIHsgcmV0dXJuOyB9CisgICAgaWYoKGxlbmd0aCAmIDEpICE9IDApIHsgIC8vIGluY29tcGxldGUgc3RhcnQvZW5kIHBhaXJzCisgICAgICAgIGVycm9yQ29kZSA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZihpc0Fzc2lnbmVkKDB4NGUwMCkpIHsgIC8vIGFscmVhZHkgc2V0CisgICAgICAgIGVycm9yQ29kZSA9IFVfSU5WQUxJRF9TVEFURV9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQzMl90IG51bUhhbkNvZGVQb2ludHMgPSAwOworICAgIGZvcihpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAgVUNoYXIzMiBzdGFydCA9IHJhbmdlc1tpXTsKKyAgICAgICAgVUNoYXIzMiBlbmQgPSByYW5nZXNbaSArIDFdOworICAgICAgICBudW1IYW5Db2RlUG9pbnRzICs9IGVuZCAtIHN0YXJ0ICsgMTsKKyAgICB9CisgICAgLy8gTXVsdGlwbHkgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBieSAoZ2FwKzEpLgorICAgIC8vIEFkZCBoYW5TdGVwKzIgZm9yIHRhaWxvcmluZyBhZnRlciB0aGUgbGFzdCBIYW4gY2hhcmFjdGVyLgorICAgIGludDMyX3QgZ2FwID0gMTsKKyAgICBoYW5TdGVwID0gZ2FwICsgMTsKKyAgICBpbnQzMl90IG51bUhhbiA9IG51bUhhbkNvZGVQb2ludHMgKiBoYW5TdGVwICsgaGFuU3RlcCArIDI7CisgICAgLy8gTnVtYmVycyBvZiBIYW4gcHJpbWFyaWVzIHBlciBsZWFkIGJ5dGUgZGV0ZXJtaW5lZCBieQorICAgIC8vIG51bWJlcnMgb2YgMm5kIChub3QgY29tcHJlc3NpYmxlKSB0aW1lcyAzcmQgcHJpbWFyeSBieXRlIHZhbHVlcy4KKyAgICBpbnQzMl90IG51bUhhblBlckxlYWRCeXRlID0gMjU0ICogMjU0OworICAgIGludDMyX3QgbnVtSGFuTGVhZEJ5dGVzID0gKG51bUhhbiArIG51bUhhblBlckxlYWRCeXRlIC0gMSkgLyBudW1IYW5QZXJMZWFkQnl0ZTsKKyAgICB1aW50MzJfdCBoYW5QcmltYXJ5ID0gKHVpbnQzMl90KShDb2xsYXRpb246OlVOQVNTSUdORURfSU1QTElDSVRfQllURSAtIG51bUhhbkxlYWRCeXRlcykgPDwgMjQ7CisgICAgaGFuUHJpbWFyeSB8PSAweDIwMjAwOworICAgIGZpcnN0SGFuUHJpbWFyeSA9IGhhblByaW1hcnk7CisgICAgZm9yKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikgeworICAgICAgICBVQ2hhcjMyIHN0YXJ0ID0gcmFuZ2VzW2ldOworICAgICAgICBVQ2hhcjMyIGVuZCA9IHJhbmdlc1tpICsgMV07CisgICAgICAgIGhhblByaW1hcnkgPSBzZXRQcmltYXJ5UmFuZ2VBbmRSZXR1cm5OZXh0KHN0YXJ0LCBlbmQsIGhhblByaW1hcnksIGhhblN0ZXAsIGVycm9yQ29kZSk7CisgICAgfQorICAgIC8vIE9uZSBwYXN0IHRoZSBhY3R1YWwgbGFzdCBvbmUsIGJ1dCB0aGF0IGlzIGhhcm1sZXNzIGZvciB0YWlsb3JpbmcuCisgICAgLy8gSXQgc2F2ZXMgdXMgZnJvbSBzdWJ0cmFjdGluZyAiaGFuU3RlcCIgYW5kIGhhbmRsaW5nIHVuZGVyZmxvd3MuCisgICAgbGFzdEhhblByaW1hcnkgPSBoYW5QcmltYXJ5OworfQorCitVQm9vbAorQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjppc0NvbXByZXNzaWJsZUxlYWRCeXRlKHVpbnQzMl90IGIpIGNvbnN0IHsKKyAgICByZXR1cm4gY29tcHJlc3NpYmxlQnl0ZXNbYl07Cit9CisKK3ZvaWQKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6c2V0Q29tcHJlc3NpYmxlTGVhZEJ5dGUodWludDMyX3QgYikgeworICAgIGNvbXByZXNzaWJsZUJ5dGVzW2JdID0gVFJVRTsKK30KKworaW50MzJfdAorQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjpkaWZmVHdvQnl0ZVByaW1hcmllcyh1aW50MzJfdCBwMSwgdWludDMyX3QgcDIsIFVCb29sIGlzQ29tcHJlc3NpYmxlKSB7CisgICAgaWYoKHAxICYgMHhmZjAwMDAwMCkgPT0gKHAyICYgMHhmZjAwMDAwMCkpIHsKKyAgICAgICAgLy8gU2FtZSBsZWFkIGJ5dGVzLgorICAgICAgICByZXR1cm4gKGludDMyX3QpKHAyIC0gcDEpID4+IDE2OworICAgIH0gZWxzZSB7CisgICAgICAgIGludDMyX3QgbGluZWFyMTsKKyAgICAgICAgaW50MzJfdCBsaW5lYXIyOworICAgICAgICBpbnQzMl90IGZhY3RvcjsKKyAgICAgICAgaWYoaXNDb21wcmVzc2libGUpIHsKKyAgICAgICAgICAgIC8vIFNlY29uZCBieXRlIGZvciBjb21wcmVzc2libGUgbGVhZCBieXRlOiAyNTEgYnl0ZXMgMDQuLkZFCisgICAgICAgICAgICBsaW5lYXIxID0gKGludDMyX3QpKChwMSA+PiAxNikgJiAweGZmKSAtIDQ7CisgICAgICAgICAgICBsaW5lYXIyID0gKGludDMyX3QpKChwMiA+PiAxNikgJiAweGZmKSAtIDQ7CisgICAgICAgICAgICBmYWN0b3IgPSAyNTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTZWNvbmQgYnl0ZSBmb3IgaW5jb21wcmVzc2libGUgbGVhZCBieXRlOiAyNTQgYnl0ZXMgMDIuLkZGCisgICAgICAgICAgICBsaW5lYXIxID0gKGludDMyX3QpKChwMSA+PiAxNikgJiAweGZmKSAtIDI7CisgICAgICAgICAgICBsaW5lYXIyID0gKGludDMyX3QpKChwMiA+PiAxNikgJiAweGZmKSAtIDI7CisgICAgICAgICAgICBmYWN0b3IgPSAyNTQ7CisgICAgICAgIH0KKyAgICAgICAgbGluZWFyMSArPSBmYWN0b3IgKiAoaW50MzJfdCkoKHAxID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBsaW5lYXIyICs9IGZhY3RvciAqIChpbnQzMl90KSgocDIgPj4gMjQpICYgMHhmZik7CisgICAgICAgIHJldHVybiBsaW5lYXIyIC0gbGluZWFyMTsKKyAgICB9Cit9CisKK2ludDMyX3QKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6ZGlmZlRocmVlQnl0ZVByaW1hcmllcyh1aW50MzJfdCBwMSwgdWludDMyX3QgcDIsIFVCb29sIGlzQ29tcHJlc3NpYmxlKSB7CisgICAgaWYoKHAxICYgMHhmZmZmMDAwMCkgPT0gKHAyICYgMHhmZmZmMDAwMCkpIHsKKyAgICAgICAgLy8gU2FtZSBmaXJzdCB0d28gYnl0ZXMuCisgICAgICAgIHJldHVybiAoaW50MzJfdCkocDIgLSBwMSkgPj4gODsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGlyZCBieXRlOiAyNTQgYnl0ZXMgMDIuLkZGCisgICAgICAgIGludDMyX3QgbGluZWFyMSA9IChpbnQzMl90KSgocDEgPj4gOCkgJiAweGZmKSAtIDI7CisgICAgICAgIGludDMyX3QgbGluZWFyMiA9IChpbnQzMl90KSgocDIgPj4gOCkgJiAweGZmKSAtIDI7CisgICAgICAgIGludDMyX3QgZmFjdG9yOworICAgICAgICBpZihpc0NvbXByZXNzaWJsZSkgeworICAgICAgICAgICAgLy8gU2Vjb25kIGJ5dGUgZm9yIGNvbXByZXNzaWJsZSBsZWFkIGJ5dGU6IDI1MSBieXRlcyAwNC4uRkUKKyAgICAgICAgICAgIGxpbmVhcjEgKz0gMjU0ICogKChpbnQzMl90KSgocDEgPj4gMTYpICYgMHhmZikgLSA0KTsKKyAgICAgICAgICAgIGxpbmVhcjIgKz0gMjU0ICogKChpbnQzMl90KSgocDIgPj4gMTYpICYgMHhmZikgLSA0KTsKKyAgICAgICAgICAgIGZhY3RvciA9IDI1MSAqIDI1NDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNlY29uZCBieXRlIGZvciBpbmNvbXByZXNzaWJsZSBsZWFkIGJ5dGU6IDI1NCBieXRlcyAwMi4uRkYKKyAgICAgICAgICAgIGxpbmVhcjEgKz0gMjU0ICogKChpbnQzMl90KSgocDEgPj4gMTYpICYgMHhmZikgLSAyKTsKKyAgICAgICAgICAgIGxpbmVhcjIgKz0gMjU0ICogKChpbnQzMl90KSgocDIgPj4gMTYpICYgMHhmZikgLSAyKTsKKyAgICAgICAgICAgIGZhY3RvciA9IDI1NCAqIDI1NDsKKyAgICAgICAgfQorICAgICAgICBsaW5lYXIxICs9IGZhY3RvciAqIChpbnQzMl90KSgocDEgPj4gMjQpICYgMHhmZik7CisgICAgICAgIGxpbmVhcjIgKz0gZmFjdG9yICogKGludDMyX3QpKChwMiA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgcmV0dXJuIGxpbmVhcjIgLSBsaW5lYXIxOworICAgIH0KK30KKwordWludDMyX3QKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6ZW5jb2RlQ0VzKGNvbnN0IGludDY0X3QgY2VzW10sIGludDMyX3QgY2VzTGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBhZGRSb290RWxlbWVudHMoY2VzLCBjZXNMZW5ndGgsIGVycm9yQ29kZSk7CisgICAgcmV0dXJuIENvbGxhdGlvbkRhdGFCdWlsZGVyOjplbmNvZGVDRXMoY2VzLCBjZXNMZW5ndGgsIGVycm9yQ29kZSk7Cit9CisKK3ZvaWQKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6YWRkUm9vdEVsZW1lbnRzKGNvbnN0IGludDY0X3QgY2VzW10sIGludDMyX3QgY2VzTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisgICAgZm9yKGludDMyX3QgaSA9IDA7IGkgPCBjZXNMZW5ndGg7ICsraSkgeworICAgICAgICBhZGRSb290RWxlbWVudChjZXNbaV0sIGVycm9yQ29kZSk7CisgICAgfQorfQorCit2b2lkCitDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXI6OmFkZFJvb3RFbGVtZW50KGludDY0X3QgY2UsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpIHx8IGNlID09IDApIHsgcmV0dXJuOyB9CisgICAgLy8gUmVtb3ZlIGNhc2UgYml0cy4KKyAgICBjZSAmPSBJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmM2ZmZik7CisgICAgVV9BU1NFUlQoKGNlICYgMHhjMCkgPT0gMCk7ICAvLyBxdWF0ZXJuYXJ5PT0wCisgICAgLy8gSWdub3JlIHRoZSBDRSBpZiBpdCBoYXMgYSBIYW4gcHJpbWFyeSB3ZWlnaHQgYW5kIGNvbW1vbiBzZWNvbmRhcnkvdGVydGlhcnkgd2VpZ2h0cy4KKyAgICAvLyBXZSB3aWxsIGFkZCBpdCBsYXRlciwgYXMgcGFydCBvZiB0aGUgSGFuIHJhbmdlcy4KKyAgICB1aW50MzJfdCBwID0gKHVpbnQzMl90KShjZSA+PiAzMik7CisgICAgdWludDMyX3Qgc2VjVGVyID0gKHVpbnQzMl90KWNlOworICAgIGlmKGZpcnN0SGFuUHJpbWFyeSA8PSBwICYmIHAgPD0gbGFzdEhhblByaW1hcnkpIHsKKyAgICAgICAgaWYoc2VjVGVyIDwgQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UpIHsKKyAgICAgICAgICAgIC8vIGJ1aWxkUm9vdEVsZW1lbnRzVGFibGUoKSBkb2VzIG5vdCBjdXJyZW50bHkgaGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGVycm9yQ29kZSA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZihzZWNUZXIgPT0gQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihzZWNUZXIgIT0gQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UpIHsgIC8vIG1pbm9yIG9wdGltaXphdGlvbgorICAgICAgICAvLyBDaGVjayB0aGF0IHNlY29uZGFyeSBhbmQgdGVydGlhcnkgd2VpZ2h0cyBhcmUgPiAwMS4KKyAgICAgICAgdWludDMyX3QgcyA9IHNlY1RlciA+PiAxNjsKKyAgICAgICAgdWludDMyX3QgdCA9IHNlY1RlciAmIENvbGxhdGlvbjo6T05MWV9URVJUSUFSWV9NQVNLOworICAgICAgICBpZigocyAhPSAwICYmIHMgPD0gQ29sbGF0aW9uOjpCRUZPUkVfV0VJR0hUMTYpIHx8CisgICAgICAgICAgICAgICAgKHQgIT0gMCAmJiB0IDw9IENvbGxhdGlvbjo6QkVGT1JFX1dFSUdIVDE2KSkgeworICAgICAgICAgICAgZXJyb3JDb2RlID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIC8vIENoZWNrIHRoYXQgcHJpbWFyaWVzIGhhdmUgYXQgbW9zdCAzIGJ5dGVzLgorICAgIGlmKChwICYgMHhmZikgIT0gMCkgeworICAgICAgICBlcnJvckNvZGUgPSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50MzJfdCBpID0gYmluYXJ5U2VhcmNoKHJvb3RFbGVtZW50cywgY2UpOworICAgIGlmKGkgPCAwKSB7CisgICAgICAgIHJvb3RFbGVtZW50cy5pbnNlcnRFbGVtZW50QXQoY2UsIH5pLCBlcnJvckNvZGUpOworICAgIH0KK30KKwordm9pZAorQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjphZGRTY3JpcHRTdGFydChpbnQzMl90IHNjcmlwdCwgdWludDMyX3QgcCkgeworICAgIC8vIFRoZSBwcmltYXJ5IHdlaWdodCBtdXN0IGJlIHRoZSBsb3dlc3QgcG9zc2libGUgZm9yIGEgdHdvLWJ5dGUgcHJlZml4LgorICAgIC8vIEl0IGNvdWxkIGJlIDIsIDMsIG9yIDQgYnl0ZXMgbG9uZy4gV2Ugcm91bmQgZG93biB0byB0aGUgdHdvLWJ5dGUgYm91bmRhcnkuCisgICAgVV9BU1NFUlQoKHAgJiAweGZmKSA9PSAwIHx8IChwICYgMHhmZikgPT0gMik7CisgICAgcCA+Pj0gODsKKyAgICBVX0FTU0VSVCgocCAmIDB4ZmYpID09IDAgfHwgKHAgJiAweGZmKSA9PSAyKTsKKyAgICBwID4+PSA4OworICAgIHVpbnQzMl90IGxvd2VzdFAyID0gY29tcHJlc3NpYmxlQnl0ZXNbcCA+PiA4XSA/IDQgOiAyOworICAgIGlmKChwICYgMHhmZikgPT0gbG93ZXN0UDIpIHsKKyAgICAgICAgLy8gVGhlIHNjcmlwdCByZWFsbHkgc3RhcnRzIG9uIGEgbGVhZCBieXRlIGJvdW5kYXJ5LiBSb3VuZCBkb3duIHRvIHRoYXQuCisgICAgICAgIHAgJj0gMHhmZjAwOworICAgIH0KKyAgICAvLyBTY3JpcHQgc3RhcnRzIHNob3VsZCBiZSBhZGRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIG90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkIHRvIHNvcnQgdGhlbS4KKyAgICBpZihzY3JpcHQgPCBVQ09MX1JFT1JERVJfQ09ERV9GSVJTVCkgeworICAgICAgICBVX0FTU0VSVCgwIDw9IHNjcmlwdCAmJiBzY3JpcHQgPCBVU0NSSVBUX0NPREVfTElNSVQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVfQVNTRVJUKHNjcmlwdCA8PSAoVUNPTF9SRU9SREVSX0NPREVfRklSU1QgKyAxNSkpOworICAgICAgICBzY3JpcHQgPSBVU0NSSVBUX0NPREVfTElNSVQgKyBzY3JpcHQgLSBVQ09MX1JFT1JERVJfQ09ERV9GSVJTVDsKKyAgICB9CisgICAgaWYoc2NyaXB0U3RhcnRzTGVuZ3RoICE9IDAgJiYgc2NyaXB0U3RhcnRzW3NjcmlwdFN0YXJ0c0xlbmd0aCAtIDFdID09IHApIHsKKyAgICAgICAgLy8gVHdvIHNjcmlwdHMgc2hhcmUgYSByYW5nZSAoZS5nLiwgSGlyYSAmIEthbmEpLgorICAgICAgICBzY3JpcHRzSW5kZXhbc2NyaXB0XSA9ICh1aW50MTZfdCkoc2NyaXB0U3RhcnRzTGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVV9BU1NFUlQoc2NyaXB0U3RhcnRzTGVuZ3RoID09IDAgfHwgc2NyaXB0U3RhcnRzW3NjcmlwdFN0YXJ0c0xlbmd0aCAtIDFdIDw9IHApOworICAgICAgICBVX0FTU0VSVChzY3JpcHRTdGFydHNMZW5ndGggPCBVUFJWX0xFTkdUSE9GKHNjcmlwdFN0YXJ0cykpOworICAgICAgICBzY3JpcHRzSW5kZXhbc2NyaXB0XSA9ICh1aW50MTZfdClzY3JpcHRTdGFydHNMZW5ndGg7CisgICAgICAgIHNjcmlwdFN0YXJ0c1tzY3JpcHRTdGFydHNMZW5ndGgrK10gPSAodWludDE2X3QpcDsKKyAgICB9CisgICAgaWYoc2NyaXB0ID09IFVTQ1JJUFRfVU5LTk9XTikgeworICAgICAgICAvLyBUaGUgbGFzdCBzY3JpcHQgc3RhcnQgaXMgZm9yIHVuYXNzaWduZWQgY29kZSBwb2ludHMKKyAgICAgICAgLy8gKHdpdGggaGlnaCBpbXBsaWN0IHByaW1hcnkgd2VpZ2h0cykuCisgICAgICAgIC8vIEFkZCBvbmUgbW9yZSBlbnRyeSB3aXRoIHRoZSBsaW1pdCBvZiB0aGlzIHJhbmdlLAorICAgICAgICAvLyB3aGljaCBpcyB0aGUgc3RhcnQgb2YgdGhlIHRyYWlsaW5nLXdlaWdodHMgcmFuZ2UuCisgICAgICAgIFVfQVNTRVJUKHNjcmlwdFN0YXJ0c0xlbmd0aCA8IFVQUlZfTEVOR1RIT0Yoc2NyaXB0U3RhcnRzKSk7CisgICAgICAgIHNjcmlwdFN0YXJ0c1tzY3JpcHRTdGFydHNMZW5ndGgrK10gPQorICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKENvbGxhdGlvbjo6RklSU1RfVFJBSUxJTkdfUFJJTUFSWSA+PiAxNikgJiAweGZmMDApOworICAgIH0KK30KKwordm9pZAorQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjpidWlsZChDb2xsYXRpb25EYXRhICZkYXRhLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBidWlsZE1hcHBpbmdzKGRhdGEsIGVycm9yQ29kZSk7CisgICAgZGF0YS5udW1lcmljUHJpbWFyeSA9IG51bWVyaWNQcmltYXJ5OworICAgIGRhdGEuY29tcHJlc3NpYmxlQnl0ZXMgPSBjb21wcmVzc2libGVCeXRlczsKKworICAgIGludDMyX3QgbnVtU2NyaXB0cyA9IFVTQ1JJUFRfQ09ERV9MSU1JVDsKKyAgICB3aGlsZShudW1TY3JpcHRzID4gMCAmJiBzY3JpcHRzSW5kZXhbbnVtU2NyaXB0cyAtIDFdID09IDApIHsgLS1udW1TY3JpcHRzOyB9CisgICAgLy8gTW92ZSB0aGUgMTYgc3BlY2lhbCBncm91cHMgKG5vdCBhbGwgdXNlZCkKKyAgICAvLyBkb3duIGZvciBjb250aWd1b3VzIHN0b3JhZ2Ugb2YgdGhlIHNjcmlwdCBhbmQgc3BlY2lhbC1ncm91cCBpbmRleGVzLgorICAgIGZvcihpbnQzMl90IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgICBzY3JpcHRzSW5kZXhbbnVtU2NyaXB0cyArIGldID0gc2NyaXB0c0luZGV4W1VTQ1JJUFRfQ09ERV9MSU1JVCArIGldOworICAgIH0KKyAgICBkYXRhLm51bVNjcmlwdHMgPSBudW1TY3JpcHRzOworICAgIGRhdGEuc2NyaXB0c0luZGV4ID0gc2NyaXB0c0luZGV4OworICAgIGRhdGEuc2NyaXB0U3RhcnRzID0gc2NyaXB0U3RhcnRzOworICAgIGRhdGEuc2NyaXB0U3RhcnRzTGVuZ3RoID0gc2NyaXB0U3RhcnRzTGVuZ3RoOworICAgIGJ1aWxkRmFzdExhdGluVGFibGUoZGF0YSwgZXJyb3JDb2RlKTsKK30KKwordm9pZAorQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjpidWlsZFJvb3RFbGVtZW50c1RhYmxlKFVWZWN0b3IzMiAmdGFibGUsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIC8vIExpbWl0IHNlbnRpbmVsIGZvciByb290IGVsZW1lbnRzLgorICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlZHVjZSByYW5nZSBjaGVja3MgYXQgcnVudGltZS4KKyAgICByb290RWxlbWVudHMuYWRkRWxlbWVudChDb2xsYXRpb246Om1ha2VDRShDb2xsYXRpb25Sb290RWxlbWVudHM6OlBSSU1BUllfU0VOVElORUwpLCBlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorICAgIHVpbnQzMl90IG5leHRIYW5QcmltYXJ5ID0gZmlyc3RIYW5QcmltYXJ5OyAgLy8gU2V0IHRvIDB4ZmZmZmZmZmYgYWZ0ZXIgdGhlIGxhc3QgSGFuIHJhbmdlLgorICAgIHVpbnQzMl90IHByZXZQcmltYXJ5ID0gMDsgIC8vIFN0YXJ0IHdpdGggcHJpbWFyeSBpZ25vcmFibGUgQ0VzLgorICAgIFVCb29sIG5lZWRDb21tb25TZWNUZXJVbml0ID0gRkFMU0U7CisgICAgVUJvb2wgaGFzRGVsdGFVbml0ID0gRkFMU0U7CisgICAgZm9yKGludDMyX3QgaSA9IDA7IGkgPCByb290RWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50NjRfdCBjZSA9IHJvb3RFbGVtZW50cy5lbGVtZW50QXRpKGkpOworICAgICAgICB1aW50MzJfdCBwID0gKHVpbnQzMl90KShjZSA+PiAzMik7CisgICAgICAgIHVpbnQzMl90IHNlY1RlciA9ICh1aW50MzJfdCljZSAmIENvbGxhdGlvbjo6T05MWV9TRUNfVEVSX01BU0s7CisgICAgICAgIGlmKChwICE9IHByZXZQcmltYXJ5IHx8IHNlY1RlciA+IENvbGxhdGlvbjo6Q09NTU9OX1NFQ19BTkRfVEVSX0NFKSAmJiBuZWVkQ29tbW9uU2VjVGVyVW5pdCkgeworICAgICAgICAgICAgLy8gVGhlIGxhc3QgcHJpbWFyeSBoYWQgbG93IHNlYy90ZXIgd2VpZ2h0cyBidXQgbm8gY29tbW9uIHNlYy90ZXIgY29tYmluYXRpb24uCisgICAgICAgICAgICAvLyBUaGUgbmV4dCB1bml0IGlzIGVpdGhlciBhIG5ldyBwcmltYXJ5IG9yIGFuIGFib3ZlLWNvbW1vbiBzZWMvdGVyIHVuaXQuCisgICAgICAgICAgICAvLyBJbnNlcnQgYSBjb21tb24gc2VjL3RlciB1bml0IHNvIHRoYXQgdGhlIGJ1aWxkZXIgd2lsbCByZWxpYWJseQorICAgICAgICAgICAgLy8gdGFpbG9yIHRvIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYSBjb21tb24gd2VpZ2h0IGJ1dCBub3QgYWNyb3NzIGl0LgorICAgICAgICAgICAgdGFibGUuYWRkRWxlbWVudCgoaW50MzJfdClDb2xsYXRpb246OkNPTU1PTl9TRUNfQU5EX1RFUl9DRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGF0aW9uUm9vdEVsZW1lbnRzOjpTRUNfVEVSX0RFTFRBX0ZMQUcsIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYocCAhPSBwcmV2UHJpbWFyeSkgeworICAgICAgICAgICAgVV9BU1NFUlQoKHAgJiAweGZmKSA9PSAwKTsKKyAgICAgICAgICAgIGludDMyX3QgZW5kOworICAgICAgICAgICAgaWYocCA+PSBuZXh0SGFuUHJpbWFyeSkgeworICAgICAgICAgICAgICAgIC8vIEFkZCBhIEhhbiBwcmltYXJ5IHdlaWdodCBvciByYW5nZS4KKyAgICAgICAgICAgICAgICAvLyBXZSBvbWl0dGVkIHRoZW0gaW5pdGlhbGx5LCBhbmQgb21pdHRlZCBhbGwgQ0VzIHdpdGggSGFuIHByaW1hcmllcworICAgICAgICAgICAgICAgIC8vIGFuZCBjb21tb24gc2Vjb25kYXJ5L3RlcnRpYXJ5IHdlaWdodHMuCisgICAgICAgICAgICAgICAgVV9BU1NFUlQocCA+IGxhc3RIYW5QcmltYXJ5IHx8IHNlY1RlciA+IENvbGxhdGlvbjo6Q09NTU9OX1NFQ19BTkRfVEVSX0NFKTsKKyAgICAgICAgICAgICAgICBpZihwID09IG5leHRIYW5QcmltYXJ5KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBzaW5nbGUgSGFuIHByaW1hcnkgd2l0aCBub24tY29tbW9uIHNlY29uZGFyeS90ZXJ0aWFyeSB3ZWlnaHRzLgorICAgICAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbGVtZW50KChpbnQzMl90KXAsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmKHAgPCBsYXN0SGFuUHJpbWFyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgdGhlIG5leHQgSGFuIHJhbmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEhhblByaW1hcnkgPSBDb2xsYXRpb246OmluY1RocmVlQnl0ZVByaW1hcnlCeU9mZnNldChwLCBGQUxTRSwgaGFuU3RlcCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwIGlzIHRoZSBsYXN0IEhhbiBwcmltYXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEhhblByaW1hcnkgPSAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcCA+IG5leHRIYW5QcmltYXJ5OiBBZGQgYSBIYW4gcHJpbWFyeSByYW5nZSwgc3RhcnRpbmcgd2l0aCBuZXh0SGFuUHJpbWFyeS4KKyAgICAgICAgICAgICAgICAgICAgdGFibGUuYWRkRWxlbWVudCgoaW50MzJfdCluZXh0SGFuUHJpbWFyeSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYobmV4dEhhblByaW1hcnkgPT0gbGFzdEhhblByaW1hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHRIYW5QcmltYXJ5ID09IGxhc3RIYW5QcmltYXJ5IDwgcAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UganVzdCB3cm90ZSB0aGUgc2luZ2xlIGxhc3QgSGFuIHByaW1hcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SGFuUHJpbWFyeSA9IDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbGVtZW50KChpbnQzMl90KXAsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihwIDwgbGFzdEhhblByaW1hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHRIYW5QcmltYXJ5IDwgcCA8IGxhc3RIYW5QcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIEhhbiByYW5nZSBvbiBwLCBwcmVwYXJlIGZvciB0aGUgbmV4dCByYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVsZW1lbnQoKGludDMyX3QpcCB8IGhhblN0ZXAsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SGFuUHJpbWFyeSA9IENvbGxhdGlvbjo6aW5jVGhyZWVCeXRlUHJpbWFyeUJ5T2Zmc2V0KHAsIEZBTFNFLCBoYW5TdGVwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHAgPT0gbGFzdEhhblByaW1hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHRIYW5QcmltYXJ5IDwgcCA9PSBsYXN0SGFuUHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIHRoZSBsYXN0IEhhbiByYW5nZSBvbiBwLgorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuYWRkRWxlbWVudCgoaW50MzJfdClwIHwgaGFuU3RlcCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRIYW5QcmltYXJ5ID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHRIYW5QcmltYXJ5IDwgbGFzdEhhblByaW1hcnkgPCBwCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIGxhc3QgSGFuIHJhbmdlLCB0aGVuIHdyaXRlIHAuCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5hZGRFbGVtZW50KChpbnQzMl90KWxhc3RIYW5QcmltYXJ5IHwgaGFuU3RlcCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRIYW5QcmltYXJ5ID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVsZW1lbnQoKGludDMyX3QpcCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZihwcmV2UHJpbWFyeSAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGhhcyBub3QgYmVlbiBhbiBpbnRlcnZlbmluZyBkZWx0YSB1bml0LAorICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIHdpbGwgdHJ5IHRvIGNvbWJpbmUgdGhlIHByZXZpb3VzIHByaW1hcnkgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHNldmVyYWwgcHJpbWFyaWVzIGludG8gYSByYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgIWhhc0RlbHRhVW5pdCAmJgorICAgICAgICAgICAgICAgICAgICAvLyBNaWdodCBnZXQgYSByYW5nZSB3aXRoIG1vcmUgdGhhbiB0d28gcHJpbWFyaWVzIGlmIHRoZSBjdXJyZW50IENFCisgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBjb21tb24gc2VjL3RlciB3ZWlnaHRzLgorICAgICAgICAgICAgICAgICAgICBzZWNUZXIgPT0gQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UgJiYKKyAgICAgICAgICAgICAgICAgICAgKGVuZCA9IHdyaXRlUm9vdEVsZW1lbnRzUmFuZ2UocHJldlByaW1hcnksIHAsIGkgKyAxLCB0YWJsZSwgZXJyb3JDb2RlKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIENFcyB3aXRoIG9ubHkgY29tbW9uIHNlY29uZGFyeS90ZXJ0aWFyeSB3ZWlnaHRzIHdlcmUKKyAgICAgICAgICAgICAgICAvLyBjb21iaW5lZCBpbnRvIGEgcHJpbWFyeSByYW5nZS4KKyAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2UgZW5kIHdhcyB3cml0dGVuLCBlbmRpbmcgd2l0aCB0aGUgcHJpbWFyeSBvZiByb290RWxlbWVudHNbZW5kXS4KKyAgICAgICAgICAgICAgICBjZSA9IHJvb3RFbGVtZW50cy5lbGVtZW50QXRpKGVuZCk7CisgICAgICAgICAgICAgICAgcCA9ICh1aW50MzJfdCkoY2UgPj4gMzIpOworICAgICAgICAgICAgICAgIHNlY1RlciA9ICh1aW50MzJfdCljZSAmIENvbGxhdGlvbjo6T05MWV9TRUNfVEVSX01BU0s7CisgICAgICAgICAgICAgICAgaSA9IGVuZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIHByaW1hcnkgd2VpZ2h0IG9mIGEgbm9ybWFsIENFLgorICAgICAgICAgICAgICAgIHRhYmxlLmFkZEVsZW1lbnQoKGludDMyX3QpcCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXZQcmltYXJ5ID0gcDsKKyAgICAgICAgICAgIG5lZWRDb21tb25TZWNUZXJVbml0ID0gRkFMU0U7CisgICAgICAgICAgICBoYXNEZWx0YVVuaXQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZihzZWNUZXIgPT0gQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UgJiYgIW5lZWRDb21tb25TZWNUZXJVbml0KSB7CisgICAgICAgICAgICAvLyBUaGUgY29tbW9uIHNlY29uZGFyL3RlcnRpYXJ5IHdlaWdodHMgYXJlIGltcGxpZWQgaW4gdGhlIHByaW1hcnkgdW5pdC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmKHNlY1RlciA8IENvbGxhdGlvbjo6Q09NTU9OX1NFQ19BTkRfVEVSX0NFKSB7CisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdG8gbm90IHN1cHByZXNzIGEgY29tbW9uIHNlYy90ZXIgdW5pdCBpZiBwIT0wLgorICAgICAgICAgICAgICAgIG5lZWRDb21tb25TZWNUZXJVbml0ID0gcCAhPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmKHNlY1RlciA9PSBDb2xsYXRpb246OkNPTU1PTl9TRUNfQU5EX1RFUl9DRSkgeworICAgICAgICAgICAgICAgIC8vIFJlYWwgY29tbW9uIHNlYy90ZXIgdW5pdCwgbm8gbmVlZCB0byBpbnNlcnQgYW4gYXJ0aWZpY2lhbCBvbmUuCisgICAgICAgICAgICAgICAgbmVlZENvbW1vblNlY1RlclVuaXQgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZvciBlYWNoIG5ldyBzZXQgb2Ygc2Vjb25kYXJ5L3RlcnRpYXJ5IHdlaWdodHMgd2Ugd3JpdGUgYSBkZWx0YSB1bml0LgorICAgICAgICAgICAgdGFibGUuYWRkRWxlbWVudCgoaW50MzJfdClzZWNUZXIgfCBDb2xsYXRpb25Sb290RWxlbWVudHM6OlNFQ19URVJfREVMVEFfRkxBRywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGhhc0RlbHRhVW5pdCA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludDMyX3QKK0NvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6d3JpdGVSb290RWxlbWVudHNSYW5nZSgKKyAgICAgICAgdWludDMyX3QgcHJldlByaW1hcnksIHVpbnQzMl90IHAsIGludDMyX3QgaSwKKyAgICAgICAgVVZlY3RvcjMyICZ0YWJsZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkgfHwgaSA+PSByb290RWxlbWVudHMuc2l6ZSgpKSB7IHJldHVybiAwOyB9CisgICAgVV9BU1NFUlQocHJldlByaW1hcnkgPCBwKTsKKyAgICAvLyBObyByYW5nZXMgb2Ygc2luZ2xlLWJ5dGUgcHJpbWFyaWVzLgorICAgIGlmKChwICYgcHJldlByaW1hcnkgJiAweGZmMDAwMCkgPT0gMCkgeyByZXR1cm4gMDsgfQorICAgIC8vIExlYWQgYnl0ZXMgb2YgY29tcHJlc3NpYmxlIHByaW1hcmllcyBtdXN0IG1hdGNoLgorICAgIFVCb29sIGlzQ29tcHJlc3NpYmxlID0gaXNDb21wcmVzc2libGVQcmltYXJ5KHApOworICAgIGlmKChpc0NvbXByZXNzaWJsZSB8fCBpc0NvbXByZXNzaWJsZVByaW1hcnkocHJldlByaW1hcnkpKSAmJgorICAgICAgICAgICAgKHAgJiAweGZmMDAwMDAwKSAhPSAocHJldlByaW1hcnkgJiAweGZmMDAwMDAwKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBwcmltYXJpZXMuCisgICAgVUJvb2wgdHdvQnl0ZXM7CisgICAgLy8gTnVtYmVyIG9mIHByaW1hcmllcyBmcm9tIHByZXZQcmltYXJ5IHRvIHAuCisgICAgaW50MzJfdCBzdGVwOworICAgIGlmKChwICYgMHhmZjAwKSA9PSAwKSB7CisgICAgICAgIC8vIDItYnl0ZSBwcmltYXJ5CisgICAgICAgIGlmKChwcmV2UHJpbWFyeSAmIDB4ZmYwMCkgIT0gMCkgeyByZXR1cm4gMDsgfSAgLy8gbGVuZ3RoIG1pc21hdGNoCisgICAgICAgIHR3b0J5dGVzID0gVFJVRTsKKyAgICAgICAgc3RlcCA9IGRpZmZUd29CeXRlUHJpbWFyaWVzKHByZXZQcmltYXJ5LCBwLCBpc0NvbXByZXNzaWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMy1ieXRlIHByaW1hcnkKKyAgICAgICAgaWYoKHByZXZQcmltYXJ5ICYgMHhmZjAwKSA9PSAwKSB7IHJldHVybiAwOyB9ICAvLyBsZW5ndGggbWlzbWF0Y2gKKyAgICAgICAgdHdvQnl0ZXMgPSBGQUxTRTsKKyAgICAgICAgc3RlcCA9IGRpZmZUaHJlZUJ5dGVQcmltYXJpZXMocHJldlByaW1hcnksIHAsIGlzQ29tcHJlc3NpYmxlKTsKKyAgICB9CisgICAgaWYoc3RlcCA+IChpbnQzMl90KUNvbGxhdGlvblJvb3RFbGVtZW50czo6UFJJTUFSWV9TVEVQX01BU0spIHsgcmV0dXJuIDA7IH0KKyAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gQ0VzIHdpdGggcHJpbWFyaWVzIGluY3JlYXNpbmcgYnkgInN0ZXAiCisgICAgLy8gYW5kIHdpdGggb25seSBjb21tb24gc2Vjb25kYXJ5L3RlcnRpYXJ5IHdlaWdodHMgb24gYWxsIGJ1dCB0aGUgbGFzdCBvbmUuCisgICAgaW50MzJfdCBlbmQgPSAwOyAgLy8gSW5pdGlhbGx5IDA6IE5vIHJhbmdlIGZvciBqdXN0IHR3byBwcmltYXJpZXMuCisgICAgZm9yKDs7KSB7CisgICAgICAgIHByZXZQcmltYXJ5ID0gcDsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIHByaW1hcnkgd2UgZXhwZWN0IG5leHQuCisgICAgICAgIHVpbnQzMl90IG5leHRQcmltYXJ5OyAgLy8gPSBwICsgc3RlcAorICAgICAgICBpZih0d29CeXRlcykgeworICAgICAgICAgICAgbmV4dFByaW1hcnkgPSBDb2xsYXRpb246OmluY1R3b0J5dGVQcmltYXJ5QnlPZmZzZXQocCwgaXNDb21wcmVzc2libGUsIHN0ZXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV4dFByaW1hcnkgPSBDb2xsYXRpb246OmluY1RocmVlQnl0ZVByaW1hcnlCeU9mZnNldChwLCBpc0NvbXByZXNzaWJsZSwgc3RlcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRmV0Y2ggdGhlIGFjdHVhbCBuZXh0IENFLgorICAgICAgICBpbnQ2NF90IGNlID0gcm9vdEVsZW1lbnRzLmVsZW1lbnRBdGkoaSk7CisgICAgICAgIHAgPSAodWludDMyX3QpKGNlID4+IDMyKTsKKyAgICAgICAgdWludDMyX3Qgc2VjVGVyID0gKHVpbnQzMl90KWNlICYgQ29sbGF0aW9uOjpPTkxZX1NFQ19URVJfTUFTSzsKKyAgICAgICAgLy8gRG9lcyB0aGlzIHByaW1hcnkgaW5jcmVhc2UgYnkgInN0ZXAiIGZyb20gdGhlIGxhc3Qgb25lPworICAgICAgICBpZihwICE9IG5leHRQcmltYXJ5IHx8CisgICAgICAgICAgICAgICAgLy8gRG8gbm90IGNyb3NzIGludG8gYSBuZXcgbGVhZCBieXRlIGlmIGVpdGhlciBpcyBjb21wcmVzc2libGUuCisgICAgICAgICAgICAgICAgKChwICYgMHhmZjAwMDAwMCkgIT0gKHByZXZQcmltYXJ5ICYgMHhmZjAwMDAwMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGlzQ29tcHJlc3NpYmxlIHx8IGlzQ29tcHJlc3NpYmxlUHJpbWFyeShwKSkpKSB7CisgICAgICAgICAgICAvLyBUaGUgcmFuZ2UgZW5kcyB3aXRoIHRoZSBwcmV2aW91cyBDRS4KKyAgICAgICAgICAgIHAgPSBwcmV2UHJpbWFyeTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgdG8gaW5jbHVkZSB0aGlzIHByaW1hcnkuCisgICAgICAgIGVuZCA9IGkrKzsKKyAgICAgICAgLy8gVGhpcyBwcmltYXJ5IGlzIHRoZSBsYXN0IGluIHRoZSByYW5nZSBpZiBpdCBoYXMgbm9uLWNvbW1vbiB3ZWlnaHRzCisgICAgICAgIC8vIG9yIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgICAgICBpZihzZWNUZXIgIT0gQ29sbGF0aW9uOjpDT01NT05fU0VDX0FORF9URVJfQ0UgfHwgaSA+PSByb290RWxlbWVudHMuc2l6ZSgpKSB7IGJyZWFrOyB9CisgICAgfQorICAgIGlmKGVuZCAhPSAwKSB7CisgICAgICAgIHRhYmxlLmFkZEVsZW1lbnQoKGludDMyX3QpcCB8IHN0ZXAsIGVycm9yQ29kZSk7CisgICAgfQorICAgIHJldHVybiBlbmQ7Cit9CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYgIC8vICFVQ09ORklHX05PX0NPTExBVElPTgpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnVjYS9jb2xsYXRpb25iYXNlZGF0YWJ1aWxkZXIuaCBiL3VuaWNvZGUvYy9nZW51Y2EvY29sbGF0aW9uYmFzZWRhdGFidWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0YjUyMQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW51Y2EvY29sbGF0aW9uYmFzZWRhdGFidWlsZGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIGNvbGxhdGlvbmJhc2VkYXRhYnVpbGRlci5oCisqCisqIGNyZWF0ZWQgb246IDIwMTJhdWcxMQorKiBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKi8KKworI2lmbmRlZiBfX0NPTExBVElPTkJBU0VEQVRBQlVJTERFUl9IX18KKyNkZWZpbmUgX19DT0xMQVRJT05CQVNFREFUQUJVSUxERVJfSF9fCisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCisKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAiY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uZGF0YS5oIgorI2luY2x1ZGUgImNvbGxhdGlvbmRhdGFidWlsZGVyLmgiCisjaW5jbHVkZSAibm9ybWFsaXplcjJpbXBsLmgiCisjaW5jbHVkZSAidXRyaWUyLmgiCisjaW5jbHVkZSAidXZlY3RyMzIuaCIKKyNpbmNsdWRlICJ1dmVjdHI2NC5oIgorI2luY2x1ZGUgInV2ZWN0b3IuaCIKKworVV9OQU1FU1BBQ0VfQkVHSU4KKworLyoqCisgKiBMb3ctbGV2ZWwgYmFzZSBDb2xsYXRpb25EYXRhIGJ1aWxkZXIuCisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyIDogcHVibGljIENvbGxhdGlvbkRhdGFCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIHZpcnR1YWwgfkNvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcigpOworCisgICAgdm9pZCBpbml0KFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBIYW4gcmFuZ2VzIGFzIHJhbmdlcyBvZiBvZmZzZXQgQ0UzMnMuCisgICAgICogTm90ZTogVW5paGFuIGV4dGVuc2lvbiBBIHNvcnRzIGFmdGVyIHRoZSBvdGhlciBCTVAgcmFuZ2VzLgorICAgICAqIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIxMC8jSW1wbGljaXRfV2VpZ2h0cworICAgICAqCisgICAgICogQHBhcmFtIHJhbmdlcyBhcnJheSBvZiByYW5nZXMgb2YgWzpVbmlmaWVkX0lkZW9ncmFwaDpdIGluIGNvbGxhdGlvbiBvcmRlciwKKyAgICAgKiAgICAgICAgICAgICAgIGFzIChzdGFydCwgZW5kKSBjb2RlIHBvaW50IHBhaXJzCisgICAgICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgY29kZSBwb2ludHMgKG5vdCBwYWlycykKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIGluL291dCBlcnJvciBjb2RlCisgICAgICovCisgICAgdm9pZCBpbml0SGFuUmFuZ2VzKGNvbnN0IFVDaGFyMzIgcmFuZ2VzW10sIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgdm9pZCBzZXROdW1lcmljUHJpbWFyeSh1aW50MzJfdCBucCkgeyBudW1lcmljUHJpbWFyeSA9IG5wOyB9CisKKyAgICB2aXJ0dWFsIFVCb29sIGlzQ29tcHJlc3NpYmxlTGVhZEJ5dGUodWludDMyX3QgYikgY29uc3Q7CisKKyAgICB2b2lkIHNldENvbXByZXNzaWJsZUxlYWRCeXRlKHVpbnQzMl90IGIpOworCisgICAgc3RhdGljIGludDMyX3QgZGlmZlR3b0J5dGVQcmltYXJpZXModWludDMyX3QgcDEsIHVpbnQzMl90IHAyLCBVQm9vbCBpc0NvbXByZXNzaWJsZSk7CisgICAgc3RhdGljIGludDMyX3QgZGlmZlRocmVlQnl0ZVByaW1hcmllcyh1aW50MzJfdCBwMSwgdWludDMyX3QgcDIsIFVCb29sIGlzQ29tcHJlc3NpYmxlKTsKKworICAgIHZpcnR1YWwgdWludDMyX3QgZW5jb2RlQ0VzKGNvbnN0IGludDY0X3QgY2VzW10sIGludDMyX3QgY2VzTGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgdm9pZCBhZGRSb290RWxlbWVudHMoY29uc3QgaW50NjRfdCBjZXNbXSwgaW50MzJfdCBjZXNMZW5ndGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdm9pZCBhZGRSb290RWxlbWVudChpbnQ2NF90IGNlLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgdm9pZCBhZGRTY3JpcHRTdGFydChpbnQzMl90IHNjcmlwdCwgdWludDMyX3QgcCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoQ29sbGF0aW9uRGF0YSAmZGF0YSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIHZvaWQgYnVpbGRSb290RWxlbWVudHNUYWJsZShVVmVjdG9yMzIgJnRhYmxlLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCitwcml2YXRlOgorICAgIGludDMyX3Qgd3JpdGVSb290RWxlbWVudHNSYW5nZSgKKyAgICAgICAgICAgIHVpbnQzMl90IHByZXZQcmltYXJ5LCB1aW50MzJfdCBwLCBpbnQzMl90IGksCisgICAgICAgICAgICBVVmVjdG9yMzIgJnRhYmxlLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgLy8gRmxhZ3MgZm9yIHdoaWNoIHByaW1hcnktd2VpZ2h0IGxlYWQgYnl0ZXMgYXJlIGNvbXByZXNzaWJsZS4KKyAgICBVQm9vbCBjb21wcmVzc2libGVCeXRlc1syNTZdOworICAgIHVpbnQzMl90IG51bWVyaWNQcmltYXJ5OworICAgIHVpbnQzMl90IGZpcnN0SGFuUHJpbWFyeTsKKyAgICB1aW50MzJfdCBsYXN0SGFuUHJpbWFyeTsKKyAgICBpbnQzMl90IGhhblN0ZXA7CisgICAgVVZlY3RvcjY0IHJvb3RFbGVtZW50czsKKyAgICB1aW50MTZfdCBzY3JpcHRzSW5kZXhbVVNDUklQVF9DT0RFX0xJTUlUICsgMTZdOyAgLy8gbmVlZCBleGFjdGx5IHRoaXMgbWFueQorICAgIHVpbnQxNl90IHNjcmlwdFN0YXJ0c1tVU0NSSVBUX0NPREVfTElNSVQgKyAxNl07ICAvLyBzaG91bGQgYmUgc2FmZWx5IG1vcmUgdGhhbiBuZWVkZWQKKyAgICBpbnQzMl90IHNjcmlwdFN0YXJ0c0xlbmd0aDsKK307CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYgIC8vICFVQ09ORklHX05PX0NPTExBVElPTgorI2VuZGlmICAvLyBfX0NPTExBVElPTkJBU0VEQVRBQlVJTERFUl9IX18KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudGVzdHN0dWIucHkgYi91bmljb2RlL2MvZ2VudWNhL2dlbnRlc3RzdHViLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZmRlODUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudWNhL2dlbnRlc3RzdHViLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgZmlsZSBuYW1lOiAgZ2VudGVzdHN0dWIucHkKKyMgICBlbmNvZGluZzogICBVUy1BU0NJSQorIyAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorIyAgIGluZGVudGF0aW9uOjIKKworX19hdXRob3JfXyA9ICJDbGFpcmUgSG8iCisKK2ltcG9ydCBzeXMKKworIyByZWFkIGZpbGUKK3ByaW50ICJjb21tYW5kOiAgcHl0aG9uIGdlbnRlc3RzdHViLnB5IDxpbnB1dEZpbGVOYW1lLnR4dD4gIDxvdXRwdXRGaWxlTmFtZS50eHQ+IgorcHJpbnQgImlmIHRoZSBmaWxlTmFtZS50eHQgaXMgb21pdHRlZCwgdGhlIGRlZmF1bHQgZGF0YSBmaWxlIGlzIENvbGxhdGlvblRlc3RfTk9OX0lHTk9SQUJMRV9TSE9SVC50eHQiCitpZiBsZW4oc3lzLmFyZ3YpID49IDI6CisgIGZuYW1lPXN5cy5hcmd2WzFdCitlbHNlIDoKKyAgZm5hbWU9IkNvbGxhdGlvblRlc3RfTk9OX0lHTk9SQUJMRV9TSE9SVC50eHQiCitvcGVuZmlsZSA9IG9wZW4oZm5hbWUsICdyJyk7CisKKyNvdXRwdXQgZmlsZSBuYW1lCitleHQ9Zm5hbWUuZmluZCgiLnR4dCIpOworaWYgbGVuKHN5cy5hcmd2KSA+PTMgOgorICB3Rm5hbWUgPSBzeXMuYXJndlsyXQorZWxpZiAoZXh0PjApIDoKKyAgd0ZuYW1lID0gZm5hbWVbOmV4dCsxXSsiX1NUVUIudHh0IgorZWxzZSA6CisgIHdGbmFtZSA9ICJvdXQudHh0Igord3JmaWxlID0gb3Blbih3Rm5hbWUsJ3cnKQorCitwcmludCAiUmVhZGluZyBmaWxlOiAiK2ZuYW1lKyIgLi4uIgorcHJpbnQgIldyaXRpbmcgZmlsZTogIit3Rm5hbWUrIiAuLi4iCitjb3VudD0xMAorZm9yIGxpbmUgaW4gb3BlbmZpbGUucmVhZGxpbmVzKCk6CisgIHBvcyA9IGxpbmUuZmluZCgiIyIpCisgIGlmIHBvcyA9PSAwOgorICAgICMgcHJpbnQgdGhlIGhlYWRlcgorICAgIHdyZmlsZS53cml0ZShsaW5lLnJzdHJpcCgpKyJcbiIpCisgICAgY29udGludWUKKyAgaWYgcG9zID49IDA6IGxpbmUgPSBsaW5lWzpwb3NdCisgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgIGlmIGxpbmU6CisgICAgaWYgKGNvdW50PT0xMCk6CisgICAgICB3cmZpbGUud3JpdGUobGluZSsiXG4iKQorICAgICAgY291bnQ9MAorICAgIGNvdW50PWNvdW50KzEKK2lmIGNvdW50IT0xOgorICBpZiBsaW5lOgorICAgIHdyZmlsZS53cml0ZShsaW5lKyJcbiIpICAjIHdyaXRlIHRoZSBsYXN0IGNhc2UKK3dyZmlsZS5jbG9zZSgpCitvcGVuZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS44LmluIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGZhZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EuOC5pbgpAQCAtMCwwICsxLDU4IEBACisuXCIgSGV5LCBFbWFjcyEgVGhpcyBpcyAtKi1ucm9mZi0qLSB5b3Uga25vdy4uLgorLlwiCisuXCIgZ2VudWNhLjg6IG1hbnVhbCBwYWdlIGZvciB0aGUgZ2VudWNhIHV0aWxpdHkKKy5cIgorLlwiIENvcHlyaWdodCAoQykgMjAwMC0yMDE0IElCTSwgSW5jLiBhbmQgb3RoZXJzLgorLlwiCisuVEggR0VOVUNBIDggIjIwMTQtRmViLTI0IiAiSUNVIE1BTlBBR0UiICJJQ1UgQFZFUlNJT05AIE1hbnVhbCIKKy5TSCBOQU1FCisuQiBnZW51Y2EKK1wtIGNyZWF0ZSB0aGUgcm9vdCBjb2xsYXRpb24gZGF0YSBmaWxlIGZvciBJQ1UKKy5TSCBTWU5PUFNJUworLkIgZ2VudWNhCitbCisuQlIgIlwtaFxmUCwgXGZCXC0/XGZQLCBcZkJcLVwtaGVscCIKK10KK1sKKy5CUiAiXC12XGZQLCBcZkJcLVwtdmVyYm9zZSIKK10KK1sKKy5CSSAiXC1jXGZQLCBcZkJcLVwtY29weXJpZ2h0IgorXQorWworLklSIHBhdGgvdG8vSUNVL3NyYy9yb290CitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGdlbnVjYQorcmVhZHMgcGF0aC90by9JQ1Uvc3JjL3Jvb3Qvc291cmNlL2RhdGEvdW5pZGF0YS9GcmFjdGlvbmFsVUNBLnR4dCBhbmQKK3dyaXRlcyBzb3VyY2UgYW5kIGJpbmFyeSBkYXRhIGZpbGVzIHdpdGggdGhlIGNvbGxhdGlvbiByb290IGRhdGEuCisKK1RoZSBiaW5hcnkgZmlsZQorLkIgdWNhZGF0YS5kYXQKK2NhbiB0aGVuIGJlIHJlYWQgZGlyZWN0bHkgYnkgSUNVLCBvciB1c2VkIGJ5CisuQlIgaWN1cGtnICg4KQorb3IKKy5CUiBwa2dkYXRhICg4KQorZm9yIGluY29ycG9yYXRpb24gaW50byBhIGxhcmdlciBhcmNoaXZlIG9yIGxpYnJhcnkuCisKK1NlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWNvbGxhdGlvbi5odG1sI1Jvb3RfRGF0YV9GaWxlcworLlNIIE9QVElPTlMKKy5UUAorLkJSICJcLWhcZlAsIFxmQlwtP1xmUCwgXGZCXC1cLWhlbHAiCitQcmludCBoZWxwIGFib3V0IHVzYWdlIGFuZCBleGl0LgorLlRQCisuQlIgIlwtdlxmUCwgXGZCXC1cLXZlcmJvc2UiCitEaXNwbGF5IGV4dHJhIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisuVFAKKy5CSSAiXC1jXGZQLCBcZkJcLVwtY29weXJpZ2h0IgorSW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2UgaW50byB0aGUgYmluYXJ5IGRhdGEuCisuU0ggRklMRVMKKy5UUCAxNQorLkIgRnJhY3Rpb25hbFVDQS50eHQKK01hY2hpbmUtcmVhZGFibGUgZmlsZSBjb250YWluaW5nIGRhdGEgZm9yIHRoZSBDTERSIHJvb3QgY29sbGF0aW9uIG9yZGVyLgorLlNIIFZFUlNJT04KK0BWRVJTSU9OQAorLlNIIENPUFlSSUdIVAorQ29weXJpZ2h0IChDKSAyMDAxIElCTSwgSW5jLiBhbmQgb3RoZXJzLgorLlNIIFNFRSBBTFNPCisuQlIgcGtnZGF0YSAoOCkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLmNwcCBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDc3NDEyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EuY3BwCkBAIC0wLDAgKzEsMTMzMiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGdlbnVjYS5jcHAKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgWFggY2VudHVyeQorKiAgIGNyZWF0ZWQgYnk6IFZsYWRpbWlyIFdlaW5zdGVpbiwKKyogICBtb2RpZmllZCBpbiAyMDEzLTIwMTQgYnkgTWFya3VzIFNjaGVyZXIKKyoKKyogICBUaGlzIHByb2dyYW0gcmVhZHMgdGhlIEZyYWN0aW9uYWwgVUNBIHRhYmxlIGFuZCBnZW5lcmF0ZXMKKyogICBpbnRlcm5hbCBmb3JtYXQgZm9yIFVDQSB0YWJsZSBhcyB3ZWxsIGFzIGludmVyc2UgVUNBIHRhYmxlLgorKiAgIEl0IHRoZW4gd3JpdGVzIHRoZSB1Y2FkYXRhLmljdSBiaW5hcnkgZmlsZSBjb250YWluaW5nIHRoZSBkYXRhLgorKi8KKworI2RlZmluZSBVX05PX0RFRkFVTFRfSU5DTFVERV9VVEZfSEVBREVSUyAxCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9lcnJvcmNvZGUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNjcmlwdC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXRmOC5oIgorI2luY2x1ZGUgImNoYXJzdHIuaCIKKyNpbmNsdWRlICJjbWVtb3J5LmgiCisjaW5jbHVkZSAiY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uYmFzZWRhdGFidWlsZGVyLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uZGF0YS5oIgorI2luY2x1ZGUgImNvbGxhdGlvbmRhdGFidWlsZGVyLmgiCisjaW5jbHVkZSAiY29sbGF0aW9uZGF0YXJlYWRlci5oIgorI2luY2x1ZGUgImNvbGxhdGlvbmRhdGF3cml0ZXIuaCIKKyNpbmNsdWRlICJjb2xsYXRpb25pbmZvLmgiCisjaW5jbHVkZSAiY29sbGF0aW9ucm9vdGVsZW1lbnRzLmgiCisjaW5jbHVkZSAiY29sbGF0aW9ucnVsZXBhcnNlci5oIgorI2luY2x1ZGUgImNvbGxhdGlvbnRhaWxvcmluZy5oIgorI2luY2x1ZGUgImNzdHJpbmcuaCIKKyNpbmNsdWRlICJub3JtYWxpemVyMmltcGwuaCIKKyNpbmNsdWRlICJ0b29sdXRpbC5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisjaW5jbHVkZSAidW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1cGFyc2UuaCIKKyNpbmNsdWRlICJ3cml0ZXNyYy5oIgorCisjaWYgVUNPTkZJR19OT19DT0xMQVRJT04KKworZXh0ZXJuICJDIiBpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKyAgICByZXR1cm4gMTsKK30KKworI2Vsc2UKKworVV9OQU1FU1BBQ0VfVVNFCisKK2VudW0gSGFuT3JkZXJWYWx1ZSB7CisgICAgSEFOX05PX09SREVSID0gLTEsCisgICAgSEFOX0lNUExJQ0lULAorICAgIEhBTl9SQURJQ0FMX1NUUk9LRQorfTsKKworc3RhdGljIFVCb29sIGJlVmVyYm9zZT1GQUxTRSwgd2l0aENvcHlyaWdodD1UUlVFOworCitzdGF0aWMgSGFuT3JkZXJWYWx1ZSBoYW5PcmRlciA9IEhBTl9OT19PUkRFUjsKKworc3RhdGljIFVWZXJzaW9uSW5mbyBVQ0FWZXJzaW9uPXsgMCwgMCwgMCwgMCB9OworCitzdGF0aWMgVURhdGFJbmZvIHVjYURhdGFJbmZvPXsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgVV9TSVpFT0ZfVUNIQVIsCisgICAgMCwKKworICAgIHsgMHg1NSwgMHg0MywgMHg2ZiwgMHg2YyB9LCAgICAgICAgIC8vIGRhdGFGb3JtYXQ9IlVDb2wiCisgICAgeyA1LCAwLCAwLCAwIH0sICAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0VmVyc2lvbgorICAgIHsgNiwgMywgMCwgMCB9ICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGFWZXJzaW9uCit9OworCitzdGF0aWMgY2hhciAqc2tpcFdoaXRlU3BhY2UoY2hhciAqcykgeworICAgIHdoaWxlKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKSB7ICsrczsgfQorICAgIHJldHVybiBzOworfQorCitzdGF0aWMgaW50MzJfdCBoZXgybnVtKGNoYXIgaGV4KSB7CisgICAgaWYoaGV4Pj0nMCcgJiYgaGV4IDw9JzknKSB7CisgICAgICAgIHJldHVybiBoZXgtJzAnOworICAgIH0gZWxzZSBpZihoZXg+PSdhJyAmJiBoZXg8PSdmJykgeworICAgICAgICByZXR1cm4gaGV4LSdhJysxMDsKKyAgICB9IGVsc2UgaWYoaGV4Pj0nQScgJiYgaGV4PD0nRicpIHsKKyAgICAgICAgcmV0dXJuIGhleC0nQScrMTA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IHBhcnNlV2VpZ2h0KGNoYXIgKiZzLCBjb25zdCBjaGFyICpzZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWF4Qnl0ZXMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiAwOyB9CisgICAgdWludDMyX3Qgd2VpZ2h0ID0gMDsKKyAgICBpbnQzMl90IG51bUJ5dGVzID0gMDsKKyAgICBmb3IoOzspIHsKKyAgICAgICAgLy8gQ2hlY2sgb25lIGNoYXJhY3RlciBhZnRlciBhbm90aGVyLCBzbyB0aGF0IHdlIGRvbid0IGp1c3QgcnVuIG92ZXIgYSAwMC4KKyAgICAgICAgaW50MzJfdCBuaWJibGUxLCBuaWJibGUyOworICAgICAgICBpZigobmliYmxlMSA9IGhleDJudW0oc1swXSkpIDwgMCB8fCAobmliYmxlMiA9IGhleDJudW0oc1sxXSkpIDwgMCkgeworICAgICAgICAgICAgLy8gU3RvcCB3aGVuIHdlIGZpbmQgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBwYWlyIG9mIGhleCBkaWdpdHMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihudW1CeXRlcyA9PSBtYXhCeXRlcyB8fCAobnVtQnl0ZXMgIT0gMCAmJiBuaWJibGUxID09IDAgJiYgbmliYmxlMiA8PSAxKSkgeworICAgICAgICAgICAgLy8gVG9vIG1hbnkgYnl0ZXMsIG9yIGEgMDAgb3IgMDEgYnl0ZSB3aGljaCBpcyBpbGxlZ2FsIGluc2lkZSBhIHdlaWdodC4KKyAgICAgICAgICAgIGVycm9yQ29kZSA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB3ZWlnaHQgPSAod2VpZ2h0IDw8IDgpIHwgKCh1aW50MzJfdCluaWJibGUxIDw8IDQpIHwgKHVpbnQzMl90KW5pYmJsZTI7CisgICAgICAgICsrbnVtQnl0ZXM7CisgICAgICAgIHMgKz0gMjsKKyAgICAgICAgaWYoKnMgIT0gJyAnKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICArK3M7CisgICAgfQorICAgIGNoYXIgYyA9ICpzOworICAgIGlmKGMgPT0gMCB8fCBzdHJjaHIoc2VwYXJhdG9ycywgYykgPT0gTlVMTCkgeworICAgICAgICBlcnJvckNvZGUgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8gbnVtQnl0ZXM9PTAgaXMgb2ssIGZvciBleGFtcGxlIGluIFssLF0gb3IgWywgODIsIDA1XQorICAgIC8vIExlZnQtYWxpZ24gdGhlIHdlaWdodC4KKyAgICB3aGlsZShudW1CeXRlcyA8IDQpIHsKKyAgICAgICAgd2VpZ2h0IDw8PSA4OworICAgICAgICArK251bUJ5dGVzOworICAgIH0KKyAgICByZXR1cm4gd2VpZ2h0OworfQorCisvKioKKyAqIFBhcnNlIGEgQ0UgbGlrZSBbMEEgODYsIDA1LCAxN10gb3IgW1UrNEUwMCwgMTBdLgorICogU3RvcCB3aXRoIGFuIGVycm9yLCBvciBlbHNlIHdpdGggdGhlIHBvaW50ZXIgcyBhZnRlciB0aGUgY2xvc2luZyBicmFja2V0LgorICovCitzdGF0aWMgaW50NjRfdCBwYXJzZUNFKGNvbnN0IENvbGxhdGlvbkRhdGFCdWlsZGVyICZidWlsZGVyLCBjaGFyIComcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIDA7IH0KKyAgICArK3M7ICAvLyBza2lwIG92ZXIgdGhlICdbJworICAgIGlmKHNbMF0gPT0gJ1UnICYmIHNbMV0gPT0gJysnKSB7CisgICAgICAgIC8vIFJlYWQgYSBjb2RlIHBvaW50IGFuZCBsb29rIHVwIGl0cyBDRS4KKyAgICAgICAgLy8gV2UgdXNlIHRoaXMgZXNwZWNpYWxseSBmb3IgaW1wbGljaXQgcHJpbWFyeSB3ZWlnaHRzLAorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiB1c2UgZGlmZmVyZW50IGFsZ29yaXRobXMgaW4gdGhlIEZyYWN0aW9uYWxVQ0EudHh0CisgICAgICAgIC8vIGdlbmVyYXRvciBhbmQgdGhlIHBhcnNlci4KKyAgICAgICAgLy8gVGhlIGdlbmVyYXRvciBtYXkgbm90IGV2ZW4gbmVlZCB0byBjb21wdXRlIGFueSBpbXBsaWNpdCBwcmltYXJpZXMgYXQgYWxsLgorICAgICAgICBzICs9IDI7CisgICAgICAgIGNoYXIgKmVuZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nQ3AgPSB1cHJ2X3N0cnRvdWwocywgJmVuZCwgMTYpOworICAgICAgICBpZihlbmQgPT0gcyB8fCBsb25nQ3AgPiAweDEwZmZmZikgeworICAgICAgICAgICAgZXJyb3JDb2RlID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIFVDaGFyMzIgYyA9IChVQ2hhcjMyKWxvbmdDcDsKKyAgICAgICAgaW50NjRfdCBjZSA9IGJ1aWxkZXIuZ2V0U2luZ2xlQ0UoYywgZXJyb3JDb2RlKTsKKyAgICAgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgcyA9IGVuZDsKKyAgICAgICAgaWYoKnMgPT0gJ10nKSB7ICAvLyBbVSs0RTAwXQorICAgICAgICAgICAgKytzOworICAgICAgICAgICAgcmV0dXJuIGNlOworICAgICAgICB9CisgICAgICAgIGlmKCpzICE9ICcsJykgeworICAgICAgICAgICAgZXJyb3JDb2RlID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8vIFBhcnNlIHRoZSBmb2xsb3dpbmcsIHNlY29uZGFyeSBvciB0ZXJ0aWFyeSB3ZWlnaHQuCisgICAgICAgIHMgPSBza2lwV2hpdGVTcGFjZShzICsgMSk7CisgICAgICAgIHVpbnQzMl90IHcgPSBwYXJzZVdlaWdodChzLCAiLF0iLCAyLCBlcnJvckNvZGUpOworICAgICAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gMDsgfQorICAgICAgICBpZigqcyA9PSAnXScpIHsgIC8vIFtVKzRFMDAsIDEwXQorICAgICAgICAgICAgKytzOworICAgICAgICAgICAgLy8gU2V0IHRoZSB0ZXJ0aWFyeSB3ZWlnaHQgdG8gdy4KKyAgICAgICAgICAgIHJldHVybiAoY2UgJiBJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmMDAwMCkpIHwgKHcgPj4gMTYpOworICAgICAgICB9CisgICAgICAgIC8vIFNldCB0aGUgc2Vjb25kYXJ5IHdlaWdodCB0byB3OiBbVSs5RjlDLCA3MCwgMjBdCisgICAgICAgIGNlID0gKGNlICYgSU5UNjRfQygweGZmZmZmZmZmMDAwMDAwMDApKSB8IHc7CisgICAgICAgIC8vIFBhcnNlIGFuZCBzZXQgdGhlIHRlcnRpYXJ5IHdlaWdodC4KKyAgICAgICAgcyA9IHNraXBXaGl0ZVNwYWNlKHMgKyAxKTsKKyAgICAgICAgdyA9IHBhcnNlV2VpZ2h0KHMsICJdIiwgMiwgZXJyb3JDb2RlKTsKKyAgICAgICAgKytzOworICAgICAgICByZXR1cm4gY2UgfCAodyA+PiAxNik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdWludDMyX3QgcCA9IHBhcnNlV2VpZ2h0KHMsICIsIiwgNCwgZXJyb3JDb2RlKTsKKyAgICAgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgaW50NjRfdCBjZSA9IChpbnQ2NF90KXAgPDwgMzI7CisgICAgICAgIHMgPSBza2lwV2hpdGVTcGFjZShzICsgMSk7CisgICAgICAgIHVpbnQzMl90IHcgPSBwYXJzZVdlaWdodChzLCAiLCIsIDIsIGVycm9yQ29kZSk7CisgICAgICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiAwOyB9CisgICAgICAgIGNlIHw9IHc7CisgICAgICAgIHMgPSBza2lwV2hpdGVTcGFjZShzICsgMSk7CisgICAgICAgIHcgPSBwYXJzZVdlaWdodChzLCAiXSIsIDIsIGVycm9yQ29kZSk7CisgICAgICAgICsrczsKKyAgICAgICAgcmV0dXJuIGNlIHwgKHcgPj4gMTYpOworICAgIH0KK30KKworLy8gSGFyZGNvZGVkIG1hcHBpbmcgZnJvbSBzY3JpcHQgc2FtcGxlIGNoYXJhY3RlcnMgdG8gc2NyaXB0IGNvZGVzLgorLy8gUHJvOiBBdmFpbGFibGUgd2l0aG91dCBjb21wbGV0ZSBhbmQgdXBkYXRlZCBVQ0Qgc2NyaXB0cyBkYXRhLAorLy8gICAgICBlYXN5IHRvIGFkZCBub24tc2NyaXB0IGNvZGVzIHNwZWNpZmljIHRvIGNvbGxhdGlvbi4KKy8vIENvbjogTmVlZHMgbWFudWFsIHVwZGF0ZSBmb3IgZWFjaCBuZXcgc2NyaXB0IG9yIGNoYW5nZSBpbiBzYW1wbGUgY2hhcmFjdGVyLgorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgVUNoYXIzMiBzYW1wbGVDaGFyOworICAgIGludDMyX3Qgc2NyaXB0OworfSBzYW1wbGVDaGFyc1RvU2NyaXB0c1tdID0geworICAgIHsgMHgwMEEwLCBVQ09MX1JFT1JERVJfQ09ERV9TUEFDRSB9LAorICAgIHsgMHgyMDFDLCBVQ09MX1JFT1JERVJfQ09ERV9QVU5DVFVBVElPTiB9LAorICAgIHsgMHgyNjNBLCBVQ09MX1JFT1JERVJfQ09ERV9TWU1CT0wgfSwKKyAgICB7IDB4MjBBQywgVUNPTF9SRU9SREVSX0NPREVfQ1VSUkVOQ1kgfSwKKyAgICB7IDB4MDAzNCwgVUNPTF9SRU9SREVSX0NPREVfRElHSVQgfSwKKyAgICB7IDB4MDA0QywgVVNDUklQVF9MQVRJTiB9LAorICAgIHsgMHgwM0E5LCBVU0NSSVBUX0dSRUVLIH0sCisgICAgeyAweDAzRTIsIFVTQ1JJUFRfQ09QVElDIH0sCisgICAgeyAweDA0MkYsIFVTQ1JJUFRfQ1lSSUxMSUMgfSwKKyAgICB7IDB4MkMwMCwgVVNDUklQVF9HTEFHT0xJVElDIH0sCisgICAgeyAweDEwMzZCLCBVU0NSSVBUX09MRF9QRVJNSUMgfSwKKyAgICB7IDB4MTBEMywgVVNDUklQVF9HRU9SR0lBTiB9LAorICAgIHsgMHgwNTMxLCBVU0NSSVBUX0FSTUVOSUFOIH0sCisgICAgeyAweDA1RDAsIFVTQ1JJUFRfSEVCUkVXIH0sCisgICAgeyAweDEwOTAwLCBVU0NSSVBUX1BIT0VOSUNJQU4gfSwKKyAgICB7IDB4MDgwMCwgVVNDUklQVF9TQU1BUklUQU4gfSwKKyAgICB7IDB4MDYyOCwgVVNDUklQVF9BUkFCSUMgfSwKKyAgICB7IDB4MDcxMCwgVVNDUklQVF9TWVJJQUMgfSwKKyAgICB7IDB4MDg0MCwgVVNDUklQVF9NQU5EQUlDIH0sCisgICAgeyAweDA3OEMsIFVTQ1JJUFRfVEhBQU5BIH0sCisgICAgeyAweDA3Q0EsIFVTQ1JJUFRfTktPIH0sCisgICAgeyAweDA3RDgsIFVTQ1JJUFRfTktPIH0sCisgICAgeyAweDJENUUsIFVTQ1JJUFRfVElGSU5BR0ggfSwKKyAgICB7IDB4MTJBMCwgVVNDUklQVF9FVEhJT1BJQyB9LAorICAgIHsgMHgwOTA1LCBVU0NSSVBUX0RFVkFOQUdBUkkgfSwKKyAgICB7IDB4MDk5NSwgVVNDUklQVF9CRU5HQUxJIH0sCisgICAgeyAweDBBMTUsIFVTQ1JJUFRfR1VSTVVLSEkgfSwKKyAgICB7IDB4MEE5NSwgVVNDUklQVF9HVUpBUkFUSSB9LAorICAgIHsgMHgwQjE1LCBVU0NSSVBUX09SSVlBIH0sCisgICAgeyAweDBCOTUsIFVTQ1JJUFRfVEFNSUwgfSwKKyAgICB7IDB4MEMxNSwgVVNDUklQVF9URUxVR1UgfSwKKyAgICB7IDB4MEM5NSwgVVNDUklQVF9LQU5OQURBIH0sCisgICAgeyAweDBEMTUsIFVTQ1JJUFRfTUFMQVlBTEFNIH0sCisgICAgeyAweDBEODUsIFVTQ1JJUFRfU0lOSEFMQSB9LAorICAgIHsgMHhBQkMwLCBVU0NSSVBUX01FSVRFSV9NQVlFSyB9LAorICAgIHsgMHhBODAwLCBVU0NSSVBUX1NZTE9USV9OQUdSSSB9LAorICAgIHsgMHhBODgyLCBVU0NSSVBUX1NBVVJBU0hUUkEgfSwKKyAgICB7IDB4MTEwODMsIFVTQ1JJUFRfS0FJVEhJIH0sCisgICAgeyAweDExMTUyLCBVU0NSSVBUX01BSEFKQU5JIH0sCisgICAgeyAweDExMTgzLCBVU0NSSVBUX1NIQVJBREEgfSwKKyAgICB7IDB4MTEyMDgsIFVTQ1JJUFRfS0hPSktJIH0sCisgICAgeyAweDExMkJFLCBVU0NSSVBUX0tIVURBV0FESSB9LAorICAgIHsgMHgxMTI4RiwgVVNDUklQVF9NVUxUQU5JIH0sCisgICAgeyAweDExMzE1LCBVU0NSSVBUX0dSQU5USEEgfSwKKyAgICB7IDB4MTE0ODQsIFVTQ1JJUFRfVElSSFVUQSB9LAorICAgIHsgMHgxMTU4RSwgVVNDUklQVF9TSURESEFNIH0sCisgICAgeyAweDExNjBFLCBVU0NSSVBUX01PREkgfSwKKyAgICB7IDB4MTE2ODAsIFVTQ1JJUFRfVEFLUkkgfSwKKyAgICB7IDB4MTE3MTcsIFVTQ1JJUFRfQUhPTSB9LAorICAgIHsgMHgxQjgzLCBVU0NSSVBUX1NVTkRBTkVTRSB9LAorICAgIHsgMHgxMTAwNSwgVVNDUklQVF9CUkFITUkgfSwKKyAgICB7IDB4MTBBMDAsIFVTQ1JJUFRfS0hBUk9TSFRISSB9LAorICAgIHsgMHgwRTE3LCBVU0NSSVBUX1RIQUkgfSwKKyAgICB7IDB4MEVBNSwgVVNDUklQVF9MQU8gfSwKKyAgICB7IDB4QUE4MCwgVVNDUklQVF9UQUlfVklFVCB9LAorICAgIHsgMHgwRjQwLCBVU0NSSVBUX1RJQkVUQU4gfSwKKyAgICB7IDB4MUMwMCwgVVNDUklQVF9MRVBDSEEgfSwKKyAgICB7IDB4QTg0MCwgVVNDUklQVF9QSEFHU19QQSB9LAorICAgIHsgMHgxOTAwLCBVU0NSSVBUX0xJTUJVIH0sCisgICAgeyAweDE3MDMsIFVTQ1JJUFRfVEFHQUxPRyB9LAorICAgIHsgMHgxNzIzLCBVU0NSSVBUX0hBTlVOT08gfSwKKyAgICB7IDB4MTc0MywgVVNDUklQVF9CVUhJRCB9LAorICAgIHsgMHgxNzYzLCBVU0NSSVBUX1RBR0JBTldBIH0sCisgICAgeyAweDFBMDAsIFVTQ1JJUFRfQlVHSU5FU0UgfSwKKyAgICB7IDB4MUJDMCwgVVNDUklQVF9CQVRBSyB9LAorICAgIHsgMHhBOTMwLCBVU0NSSVBUX1JFSkFORyB9LAorICAgIHsgMHhBOTBBLCBVU0NSSVBUX0tBWUFIX0xJIH0sCisgICAgeyAweDEwMDAsIFVTQ1JJUFRfTVlBTk1BUiB9LAorICAgIHsgMHgxMTEwMywgVVNDUklQVF9DSEFLTUEgfSwKKyAgICB7IDB4MTc4MCwgVVNDUklQVF9LSE1FUiB9LAorICAgIHsgMHgxOTUwLCBVU0NSSVBUX1RBSV9MRSB9LAorICAgIHsgMHgxOTgwLCBVU0NSSVBUX05FV19UQUlfTFVFIH0sCisgICAgeyAweDFBMjAsIFVTQ1JJUFRfTEFOTkEgfSwKKyAgICB7IDB4QUEwMCwgVVNDUklQVF9DSEFNIH0sCisgICAgeyAweDFCMDUsIFVTQ1JJUFRfQkFMSU5FU0UgfSwKKyAgICB7IDB4QTk4NCwgVVNDUklQVF9KQVZBTkVTRSB9LAorICAgIHsgMHgxODI2LCBVU0NSSVBUX01PTkdPTElBTiB9LAorICAgIHsgMHgxQzVBLCBVU0NSSVBUX09MX0NISUtJIH0sCisgICAgeyAweDEzQzQsIFVTQ1JJUFRfQ0hFUk9LRUUgfSwKKyAgICB7IDB4MTRDMCwgVVNDUklQVF9DQU5BRElBTl9BQk9SSUdJTkFMIH0sCisgICAgeyAweDE2OEYsIFVTQ1JJUFRfT0dIQU0gfSwKKyAgICB7IDB4MTZBMCwgVVNDUklQVF9SVU5JQyB9LAorICAgIHsgMHgxMENBMSwgVVNDUklQVF9PTERfSFVOR0FSSUFOIH0sCisgICAgeyAweDEwQzAwLCBVU0NSSVBUX09SS0hPTiB9LAorICAgIHsgMHhBNTQ5LCBVU0NSSVBUX1ZBSSB9LAorICAgIHsgMHhBNkEwLCBVU0NSSVBUX0JBTVVNIH0sCisgICAgeyAweDE2QUU2LCBVU0NSSVBUX0JBU1NBX1ZBSCB9LAorICAgIHsgMHgxRTgwMiwgVVNDUklQVF9NRU5ERSB9LAorICAgIHsgMHhBQzAwLCBVU0NSSVBUX0hBTkdVTCB9LAorICAgIHsgMHgzMDRCLCBVU0NSSVBUX0hJUkFHQU5BIH0sCisgICAgeyAweDMwQUIsIFVTQ1JJUFRfS0FUQUtBTkEgfSwKKyAgICB7IDB4MzEwNSwgVVNDUklQVF9CT1BPTU9GTyB9LAorICAgIHsgMHhBMjg4LCBVU0NSSVBUX1lJIH0sCisgICAgeyAweEE0RDAsIFVTQ1JJUFRfTElTVSB9LAorICAgIHsgMHhBNEU4LCBVU0NSSVBUX0xJU1UgfSwKKyAgICB7IDB4MTZGMDAsIFVTQ1JJUFRfTUlBTyB9LAorICAgIHsgMHgxMThCNCwgVVNDUklQVF9XQVJBTkdfQ0lUSSB9LAorICAgIHsgMHgxMUFDMCwgVVNDUklQVF9QQVVfQ0lOX0hBVSB9LAorICAgIHsgMHgxNkIxQywgVVNDUklQVF9QQUhBV0hfSE1PTkcgfSwKKyAgICB7IDB4MTAyODAsIFVTQ1JJUFRfTFlDSUFOIH0sCisgICAgeyAweDEwMkEwLCBVU0NSSVBUX0NBUklBTiB9LAorICAgIHsgMHgxMDJCNywgVVNDUklQVF9DQVJJQU4gfSwKKyAgICB7IDB4MTA5MjAsIFVTQ1JJUFRfTFlESUFOIH0sCisgICAgeyAweDEwMzAwLCBVU0NSSVBUX09MRF9JVEFMSUMgfSwKKyAgICB7IDB4MTAzMDgsIFVTQ1JJUFRfT0xEX0lUQUxJQyB9LAorICAgIHsgMHgxMDMzMCwgVVNDUklQVF9HT1RISUMgfSwKKyAgICB7IDB4MTA0MTQsIFVTQ1JJUFRfREVTRVJFVCB9LAorICAgIHsgMHgxMDQ1MCwgVVNDUklQVF9TSEFWSUFOIH0sCisgICAgeyAweDFCQzIwLCBVU0NSSVBUX0RVUExPWUFOIH0sCisgICAgeyAweDEwNDgwLCBVU0NSSVBUX09TTUFOWUEgfSwKKyAgICB7IDB4MTA1MDAsIFVTQ1JJUFRfRUxCQVNBTiB9LAorICAgIHsgMHgxMDUzNywgVVNDUklQVF9DQVVDQVNJQU5fQUxCQU5JQU4gfSwKKyAgICB7IDB4MTEwRDAsIFVTQ1JJUFRfU09SQV9TT01QRU5HIH0sCisgICAgeyAweDE2QTRGLCBVU0NSSVBUX01STyB9LAorICAgIHsgMHgxMDAwMCwgVVNDUklQVF9MSU5FQVJfQiB9LAorICAgIHsgMHgxMDY0NywgVVNDUklQVF9MSU5FQVJfQSB9LAorICAgIHsgMHgxMDgwMCwgVVNDUklQVF9DWVBSSU9UIH0sCisgICAgeyAweDEwQTYwLCBVU0NSSVBUX09MRF9TT1VUSF9BUkFCSUFOIH0sCisgICAgeyAweDEwQTk1LCBVU0NSSVBUX09MRF9OT1JUSF9BUkFCSUFOIH0sCisgICAgeyAweDEwQjAwLCBVU0NSSVBUX0FWRVNUQU4gfSwKKyAgICB7IDB4MTA4NzMsIFVTQ1JJUFRfUEFMTVlSRU5FIH0sCisgICAgeyAweDEwODk2LCBVU0NSSVBUX05BQkFUQUVBTiB9LAorICAgIHsgMHgxMDhGNCwgVVNDUklQVF9IQVRSQU4gfSwKKyAgICB7IDB4MTA4NDAsIFVTQ1JJUFRfSU1QRVJJQUxfQVJBTUFJQyB9LAorICAgIHsgMHgxMEI0MCwgVVNDUklQVF9JTlNDUklQVElPTkFMX1BBUlRISUFOIH0sCisgICAgeyAweDEwQjYwLCBVU0NSSVBUX0lOU0NSSVBUSU9OQUxfUEFITEFWSSB9LAorICAgIHsgMHgxMEI4RiwgVVNDUklQVF9QU0FMVEVSX1BBSExBVkkgfSwKKyAgICB7IDB4MTBBQzEsIFVTQ1JJUFRfTUFOSUNIQUVBTiB9LAorICAgIHsgMHgxMEFEOCwgVVNDUklQVF9NQU5JQ0hBRUFOIH0sCisgICAgeyAweDEwMzgwLCBVU0NSSVBUX1VHQVJJVElDIH0sCisgICAgeyAweDEwM0EwLCBVU0NSSVBUX09MRF9QRVJTSUFOIH0sCisgICAgeyAweDEyMDAwLCBVU0NSSVBUX0NVTkVJRk9STSB9LAorICAgIHsgMHgxMzE1MywgVVNDUklQVF9FR1lQVElBTl9ISUVST0dMWVBIUyB9LAorICAgIHsgMHgxMDlBMCwgVVNDUklQVF9NRVJPSVRJQ19DVVJTSVZFIH0sCisgICAgeyAweDEwOTgwLCBVU0NSSVBUX01FUk9JVElDX0hJRVJPR0xZUEhTIH0sCisgICAgeyAweDE0NDAwLCBVU0NSSVBUX0FOQVRPTElBTl9ISUVST0dMWVBIUyB9LAorICAgIHsgMHg1QjU3LCBVU0NSSVBUX0hBTiB9LAorICAgIHsgMHhGREQwLCBVU0NSSVBUX1VOS05PV04gfSAgLy8gdW5hc3NpZ25lZC1pbXBsaWNpdCBwcmltYXJ5IHdlaWdodHMKK307CisKK3N0YXRpYyBpbnQzMl90IGdldENoYXJTY3JpcHQoVUNoYXIzMiBjKSB7CisgICAgZm9yKGludDMyX3QgaSA9IDA7IGkgPCBVUFJWX0xFTkdUSE9GKHNhbXBsZUNoYXJzVG9TY3JpcHRzKTsgKytpKSB7CisgICAgICAgIGlmKGMgPT0gc2FtcGxlQ2hhcnNUb1NjcmlwdHNbaV0uc2FtcGxlQ2hhcikgeworICAgICAgICAgICAgcmV0dXJuIHNhbXBsZUNoYXJzVG9TY3JpcHRzW2ldLnNjcmlwdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVVNDUklQVF9JTlZBTElEX0NPREU7ICAvLyAtMQorfQorCisvKioKKyAqIE1hcHMgVW5pZmllZF9JZGVvZ3JhcGgncyB0byBwcmltYXJ5IENFcyBpbiB0aGUgZ2l2ZW4gb3JkZXIgb2YgcmFuZ2VzLgorICovCitjbGFzcyBIYW5PcmRlciB7CitwdWJsaWM6CisgICAgSGFuT3JkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSA6IHJhbmdlcyhlcnJvckNvZGUpLCBzZXQoKSwgZG9uZShGQUxTRSkge30KKworICAgIHZvaWQgYWRkUmFuZ2UoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBpbnQzMl90IGxlbmd0aCA9IHJhbmdlcy5zaXplKCk7CisgICAgICAgIGlmKGxlbmd0aCA+IDAgJiYgKHJhbmdlcy5lbGVtZW50QXRpKGxlbmd0aCAtIDEpICsgMSkgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyByYW5nZSBlbmQgaXMganVzdCBiZWZvcmUgdGhpcyByYW5nZSBzdGFydDogTWVyZ2UgYWRqYWNlbnQgcmFuZ2VzLgorICAgICAgICAgICAgcmFuZ2VzLnNldEVsZW1lbnRBdChlbmQsIGxlbmd0aCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2VzLmFkZEVsZW1lbnQoc3RhcnQsIGVycm9yQ29kZSk7CisgICAgICAgICAgICByYW5nZXMuYWRkRWxlbWVudChlbmQsIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0LmFkZChzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJ1aWxkZXJIYW5PcmRlcihDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXIgJmJ1aWxkZXIsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICAgICAgYnVpbGRlci5pbml0SGFuUmFuZ2VzKHJhbmdlcy5nZXRCdWZmZXIoKSwgcmFuZ2VzLnNpemUoKSwgZXJyb3JDb2RlKTsKKyAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgfQorCisgICAgdm9pZCBzZXREb25lKCkgeworICAgICAgICBkb25lID0gVFJVRTsKKyAgICB9CisKKyAgICBVQm9vbCBpc0RvbmUoKSB7IHJldHVybiBkb25lOyB9CisKKyAgICBjb25zdCBVbmljb2RlU2V0ICZnZXRTZXQoKSB7IHJldHVybiBzZXQ7IH0KKworcHJpdmF0ZToKKyAgICBVVmVjdG9yMzIgcmFuZ2VzOworICAgIFVuaWNvZGVTZXQgc2V0OworICAgIFVCb29sIGRvbmU7Cit9OworCitzdGF0aWMgSGFuT3JkZXIgKmltcGxpY2l0SGFuT3JkZXIgPSBOVUxMOworc3RhdGljIEhhbk9yZGVyICpyYWRpY2FsU3Ryb2tlT3JkZXIgPSBOVUxMOworCitlbnVtIEFjdGlvblR5cGUgeworICBSRUFEQ0UsCisgIFJFQURQUklNQVJZLAorICBSRUFEQllURSwKKyAgUkVBRFVOSUZJRURJREVPR1JBUEgsCisgIFJFQURSQURJQ0FMLAorICBSRUFEVUNBVkVSU0lPTiwKKyAgUkVBRExFQURCWVRFVE9TQ1JJUFRTLAorICBJR05PUkUKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7CisgICAgaW50NjRfdCB2YWx1ZTsKKyAgICBjb25zdCBBY3Rpb25UeXBlIHdoYXRfdG9fZG87Cit9IHZ0W10gID0geworICAgIHsiW2ZpcnN0IHRlcnRpYXJ5IGlnbm9yYWJsZSIsICAgICAwLCBJR05PUkV9LAorICAgIHsiW2xhc3QgdGVydGlhcnkgaWdub3JhYmxlIiwgICAgICAwLCBJR05PUkV9LAorICAgIHsiW2ZpcnN0IHNlY29uZGFyeSBpZ25vcmFibGUiLCAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3Qgc2Vjb25kYXJ5IGlnbm9yYWJsZSIsICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2ZpcnN0IHByaW1hcnkgaWdub3JhYmxlIiwgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3QgcHJpbWFyeSBpZ25vcmFibGUiLCAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2ZpcnN0IHZhcmlhYmxlIiwgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3QgdmFyaWFibGUiLCAgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2ZpcnN0IHJlZ3VsYXIiLCAgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3QgcmVndWxhciIsICAgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2ZpcnN0IGltcGxpY2l0IiwgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3QgaW1wbGljaXQiLCAgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2ZpcnN0IHRyYWlsaW5nIiwgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorICAgIHsiW2xhc3QgdHJhaWxpbmciLCAgICAgICAgICAgICAgICAwLCBSRUFEQ0V9LAorCisgICAgeyJbVW5pZmllZF9JZGVvZ3JhcGgiLCAgICAgICAgICAgIDAsIFJFQURVTklGSUVESURFT0dSQVBIfSwKKyAgICB7IltyYWRpY2FsIiwgICAgICAgICAgICAgICAgICAgICAgMCwgUkVBRFJBRElDQUx9LAorCisgICAgeyJbZml4ZWQgZmlyc3QgaW1wbGljaXQgYnl0ZSIsICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgbGFzdCBpbXBsaWNpdCBieXRlIiwgICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgZmlyc3QgdHJhaWwgYnl0ZSIsICAgICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgbGFzdCB0cmFpbCBieXRlIiwgICAgICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgZmlyc3Qgc3BlY2lhbCBieXRlIiwgICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgbGFzdCBzcGVjaWFsIGJ5dGUiLCAgICAgIDAsIElHTk9SRX0sCisgICAgeyJbZml4ZWQgc2Vjb25kYXJ5IGNvbW1vbiBieXRlIiwgICAgICAgICAgICAgICAgICAwLCBSRUFEQllURX0sCisgICAgeyJbZml4ZWQgbGFzdCBzZWNvbmRhcnkgY29tbW9uIGJ5dGUiLCAgICAgICAgICAgICAwLCBSRUFEQllURX0sCisgICAgeyJbZml4ZWQgZmlyc3QgaWdub3JhYmxlIHNlY29uZGFyeSBieXRlIiwgICAgICAgICAwLCBSRUFEQllURX0sCisgICAgeyJbZml4ZWQgdGVydGlhcnkgY29tbW9uIGJ5dGUiLCAgICAgICAgICAgICAgICAgICAwLCBSRUFEQllURX0sCisgICAgeyJbZml4ZWQgZmlyc3QgaWdub3JhYmxlIHRlcnRpYXJ5IGJ5dGUiLCAgICAgICAgICAwLCBSRUFEQllURX0sCisgICAgeyJbdmFyaWFibGUgdG9wID0gIiwgICAgICAgICAgICAgIDAsIElHTk9SRX0sCisgICAgeyJbVUNBIHZlcnNpb24gPSAiLCAgICAgICAgICAgICAgIDAsIFJFQURVQ0FWRVJTSU9OfSwKKyAgICB7Ilt0b3BfYnl0ZSIsICAgICAgICAgICAgICAgICAgICAgMCwgUkVBRExFQURCWVRFVE9TQ1JJUFRTfSwKKyAgICB7IltyZW9yZGVyaW5nVG9rZW5zIiwgICAgICAgICAgICAgMCwgSUdOT1JFfSwKKyAgICB7IltjYXRlZ29yaWVzIiwgICAgICAgICAgICAgICAgICAgMCwgSUdOT1JFfSwKKyAgICB7IltmaXJzdCB0ZXJ0aWFyeSBpbiBzZWNvbmRhcnkgbm9uLWlnbm9yYWJsZSIsICAgIDAsIElHTk9SRX0sCisgICAgeyJbbGFzdCB0ZXJ0aWFyeSBpbiBzZWNvbmRhcnkgbm9uLWlnbm9yYWJsZSIsICAgICAwLCBJR05PUkV9LAorICAgIHsiW2ZpcnN0IHNlY29uZGFyeSBpbiBwcmltYXJ5IG5vbi1pZ25vcmFibGUiLCAgICAgMCwgSUdOT1JFfSwKKyAgICB7IltsYXN0IHNlY29uZGFyeSBpbiBwcmltYXJ5IG5vbi1pZ25vcmFibGUiLCAgICAgIDAsIElHTk9SRX0sCit9OworCitzdGF0aWMgaW50NjRfdCBnZXRPcHRpb25WYWx1ZShjb25zdCBjaGFyICpuYW1lKSB7CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgVVBSVl9MRU5HVEhPRih2dCk7ICsraSkgeworICAgICAgICBpZih1cHJ2X3N0cmNtcChuYW1lLCB2dFtpXS5uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdnRbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRBbk9wdGlvbigKKyAgICAgICAgQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyICZidWlsZGVyLCBjaGFyICpidWZmZXIsIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIGZvciAoaW50MzJfdCBjbnQgPSAwOyBjbnQ8VVBSVl9MRU5HVEhPRih2dCk7IGNudCsrKSB7CisgICAgICAgIGludDMyX3QgdnRMZW4gPSAoaW50MzJfdCl1cHJ2X3N0cmxlbih2dFtjbnRdLm5hbWUpOworICAgICAgICBpZih1cHJ2X3N0cm5jbXAoYnVmZmVyLCB2dFtjbnRdLm5hbWUsIHZ0TGVuKSA9PSAwKSB7CisgICAgICAgICAgICBBY3Rpb25UeXBlIHdoYXRfdG9fZG8gPSB2dFtjbnRdLndoYXRfdG9fZG87CisgICAgICAgICAgICBjaGFyICpwb2ludGVyID0gc2tpcFdoaXRlU3BhY2UoYnVmZmVyICsgdnRMZW4pOworICAgICAgICAgICAgaWYgKHdoYXRfdG9fZG8gPT0gSUdOT1JFKSB7IC8vdnRbY250XS53aGF0X3RvX2RvID09IElHTk9SRQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAod2hhdF90b19kbyA9PSBSRUFEQ0UpIHsKKyAgICAgICAgICAgICAgICB2dFtjbnRdLnZhbHVlID0gcGFyc2VDRShidWlsZGVyLCBwb2ludGVyLCAqc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZihVX1NVQ0NFU1MoKnN0YXR1cykgJiYgKnBvaW50ZXIgIT0gJ10nKSB7CisgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTeW50YXggZXJyb3I6IHVuYWJsZSB0byBwYXJzZSB0aGUgQ0UgZnJvbSBsaW5lICclcydcbiIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYod2hhdF90b19kbyA9PSBSRUFEUFJJTUFSWSkgeworICAgICAgICAgICAgICAgIHZ0W2NudF0udmFsdWUgPSBwYXJzZVdlaWdodChwb2ludGVyLCAiXSIsIDQsICpzdGF0dXMpOworICAgICAgICAgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlIG9mIFwiJXNcIiBpcyBub3QgYSBwcmltYXJ5IHdlaWdodFxuIiwgYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZih3aGF0X3RvX2RvID09IFJFQURCWVRFKSB7CisgICAgICAgICAgICAgICAgdnRbY250XS52YWx1ZSA9IHBhcnNlV2VpZ2h0KHBvaW50ZXIsICJdIiwgMSwgKnN0YXR1cykgPj4gMjQ7CisgICAgICAgICAgICAgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVmFsdWUgb2YgXCIlc1wiIGlzIG5vdCBhIHZhbGlkIGJ5dGVcbiIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYod2hhdF90b19kbyA9PSBSRUFEVU5JRklFRElERU9HUkFQSCkgeworICAgICAgICAgICAgICAgIGlmKGltcGxpY2l0SGFuT3JkZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImR1cGxpY2F0ZSBbVW5pZmllZF9JZGVvZ3JhcGhdIGxpbmVzXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW1wbGljaXRIYW5PcmRlciA9IG5ldyBIYW5PcmRlcigqc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsgcmV0dXJuOyB9CisgICAgICAgICAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGlmKCpwb2ludGVyID09ICddJykgeyBicmVhazsgfQorICAgICAgICAgICAgICAgICAgICBpZigqcG9pbnRlciA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXNzaW5nIF0gYWZ0ZXIgcmFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2hhciAqcyA9IHBvaW50ZXI7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICddJyAmJiAqcyAhPSAnXDAnKSB7ICsrczsgfQorICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSAqczsKKyAgICAgICAgICAgICAgICAgICAgKnMgPSAwOworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwgZW5kOworICAgICAgICAgICAgICAgICAgICB1X3BhcnNlQ29kZVBvaW50UmFuZ2UocG9pbnRlciwgJnN0YXJ0LCAmZW5kLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAqcyA9IGM7CisgICAgICAgICAgICAgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTeW50YXggZXJyb3I6IHVuYWJsZSB0byBwYXJzZSBvbmUgb2YgdGhlIHJhbmdlcyBmcm9tIGxpbmUgJyVzJ1xuIiwgYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0SGFuT3JkZXItPmFkZFJhbmdlKChVQ2hhcjMyKXN0YXJ0LCAoVUNoYXIzMillbmQsICpzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBwb2ludGVyID0gc2tpcFdoaXRlU3BhY2Uocyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGhhbk9yZGVyID09IEhBTl9JTVBMSUNJVCkgeworICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdEhhbk9yZGVyLT5zZXRCdWlsZGVySGFuT3JkZXIoYnVpbGRlciwgKnN0YXR1cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGltcGxpY2l0SGFuT3JkZXItPnNldERvbmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZih3aGF0X3RvX2RvID09IFJFQURSQURJQ0FMKSB7CisgICAgICAgICAgICAgICAgaWYocmFkaWNhbFN0cm9rZU9yZGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaW1wbGljaXRIYW5PcmRlciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIltyYWRpY2FsXSBzZWN0aW9uIGJlZm9yZSBbVW5pZmllZF9JZGVvZ3JhcGhdIGxpbmVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmFkaWNhbFN0cm9rZU9yZGVyID0gbmV3IEhhbk9yZGVyKCpzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsgcmV0dXJuOyB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJhZGljYWxTdHJva2VPcmRlci0+aXNEb25lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJkdXBsaWNhdGUgW3JhZGljYWxdIHNlY3Rpb25zXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVUJvb2wgb2s7CisgICAgICAgICAgICAgICAgaWYodXBydl9zdHJjbXAocG9pbnRlciwgImVuZF0iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKHJhZGljYWxTdHJva2VPcmRlci0+Z2V0U2V0KCkgIT0gaW1wbGljaXRIYW5PcmRlci0+Z2V0U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3JhZGljYWwgZW5kXTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZSBvZiBbVW5pZmllZF9JZGVvZ3JhcGhdIG1pc3NpbmcgZnJvbSBbcmFkaWNhbF0gbGluZXNcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoaGFuT3JkZXIgPT0gSEFOX1JBRElDQUxfU1RST0tFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYWRpY2FsU3Ryb2tlT3JkZXItPnNldEJ1aWxkZXJIYW5PcmRlcihidWlsZGVyLCAqc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByYWRpY2FsU3Ryb2tlT3JkZXItPnNldERvbmUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIEhhbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMgYmV0d2VlbiA6IGFuZCBdLgorICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIHJhZGljYWwgZGF0YSBiZWZvcmUgdGhlIDouCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN0YXJ0UG9pbnRlciA9IHVwcnZfc3RyY2hyKHBvaW50ZXIsICc6Jyk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbWl0UG9pbnRlciA9IHVwcnZfc3RyY2hyKHBvaW50ZXIsICddJyk7CisgICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0UG9pbnRlciA9PSBOVUxMIHx8IGxpbWl0UG9pbnRlciA9PSBOVUxMIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0UG9pbnRlciArIDEpID49IGxpbWl0UG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJbcmFkaWNhbF06IG5vIEhhbiBjaGFyYWN0ZXJzIGxpc3RlZCBiZXR3ZWVuIDogYW5kIF1cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9pbnRlciA9IHN0YXJ0UG9pbnRlciArIDE7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoID0gKGludDMyX3QpKGxpbWl0UG9pbnRlciAtIHBvaW50ZXIpOworICAgICAgICAgICAgICAgICAgICBmb3IoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBVOF9ORVhUKHBvaW50ZXIsIGksIGxlbmd0aCwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihwb2ludGVyW2ldID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVOF9ORVhUKHBvaW50ZXIsIGksIGxlbmd0aCwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZihyYWRpY2FsU3Ryb2tlT3JkZXItPmdldFNldCgpLmNvbnRhaW5zU29tZShzdGFydCwgZW5kKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3JhZGljYWxdOiBzb21lIG9mIFUrJTA0eC4uVSslMDR4IG9jY3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcmFkaWNhbC1zdHJva2Ugb3JkZXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZighaW1wbGljaXRIYW5PcmRlci0+Z2V0U2V0KCkuY29udGFpbnMoc3RhcnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIltyYWRpY2FsXTogc29tZSBvZiBVKyUwNHguLlUrJTA0eCBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBVbmlmaWVkX0lkZW9ncmFwaFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhZGljYWxTdHJva2VPcmRlci0+YWRkUmFuZ2Uoc3RhcnQsIGVuZCwgKnN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXRfdG9fZG8gPT0gUkVBRFVDQVZFUlNJT04pIHsKKyAgICAgICAgICAgICAgICB1X3ZlcnNpb25Gcm9tU3RyaW5nKFVDQVZlcnNpb24sIHBvaW50ZXIpOworICAgICAgICAgICAgICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIHVjYVtVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworICAgICAgICAgICAgICAgICAgICB1X3ZlcnNpb25Ub1N0cmluZyhVQ0FWZXJzaW9uLCB1Y2EpOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlVDQSB2ZXJzaW9uICVzXG4iLCB1Y2EpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVVmVyc2lvbkluZm8gVUNEVmVyc2lvbjsKKyAgICAgICAgICAgICAgICB1X2dldFVuaWNvZGVWZXJzaW9uKFVDRFZlcnNpb24pOworICAgICAgICAgICAgICAgIGlmIChVQ0FWZXJzaW9uWzBdICE9IFVDRFZlcnNpb25bMF0gfHwgVUNBVmVyc2lvblsxXSAhPSBVQ0RWZXJzaW9uWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgdWNhW1VfTUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSF07CisgICAgICAgICAgICAgICAgICAgIGNoYXIgdWNkW1VfTUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSF07CisgICAgICAgICAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKFVDQVZlcnNpb24sIHVjYSk7CisgICAgICAgICAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKFVDRFZlcnNpb24sIHVjZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdhcm5pbmcsIG5vdCBlcnJvciwgdG8gcGVybWl0IGJvb3RzdHJhcHBpbmcgZHVyaW5nIGEgdmVyc2lvbiB1cGdyYWRlLgorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IFVDQSB2ZXJzaW9uICVzICE9IFVDRCB2ZXJzaW9uICVzXG4iLCB1Y2EsIHVjZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICh3aGF0X3RvX2RvID09IFJFQURMRUFEQllURVRPU0NSSVBUUykgeworICAgICAgICAgICAgICAgIGlmIChzdHJzdHIocG9pbnRlciwgIkNPTVBSRVNTIikgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZWFkQnl0ZSA9IChoZXgybnVtKCpwb2ludGVyKyspICogMTYpOworICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZSArPSBoZXgybnVtKCpwb2ludGVyKyspOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldENvbXByZXNzaWJsZUxlYWRCeXRlKGxlYWRCeXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQgdGhlIGxpc3Qgb2Ygc2NyaXB0cyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAlc1xuIiwgYnVmZmVyKTsKK30KKworc3RhdGljIFVCb29sCityZWFkQW5FbGVtZW50KEZJTEUgKmRhdGEsCisgICAgICAgIENvbGxhdGlvbkJhc2VEYXRhQnVpbGRlciAmYnVpbGRlciwKKyAgICAgICAgVW5pY29kZVN0cmluZyAmcHJlZml4LCBVbmljb2RlU3RyaW5nICZzLAorICAgICAgICBpbnQ2NF90IGNlc1szMl0sIGludDMyX3QgJmNlc0xlbmd0aCwKKyAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKSB7CisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY2hhciBidWZmZXJbMzAwMDBdOworICAgIGNoYXIgKnJlc3VsdCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGRhdGEpOworICAgIGlmKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIGlmKGZlb2YoZGF0YSkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW1wdHkgbGluZSBidXQgbm8gRU9GIVxuIik7CisgICAgICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQzMl90IGJ1ZmxlbiA9IChpbnQzMl90KXVwcnZfc3RybGVuKGJ1ZmZlcik7CisgICAgd2hpbGUoYnVmbGVuPjAgJiYgKGJ1ZmZlcltidWZsZW4tMV0gPT0gJ1xyJyB8fCBidWZmZXJbYnVmbGVuLTFdID09ICdcbicpKSB7CisgICAgICBidWZmZXJbLS1idWZsZW5dID0gMDsKKyAgICB9CisKKyAgICBpZihidWZmZXJbMF0gPT0gMCB8fCBidWZmZXJbMF0gPT0gJyMnKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsgLy8ganVzdCBhIGNvbW1lbnQsIHNraXAgd2hvbGUgbGluZQorICAgIH0KKworICAgIC8vIERpcmVjdGl2ZXMuCisgICAgaWYoYnVmZmVyWzBdID09ICdbJykgeworICAgICAgICByZWFkQW5PcHRpb24oYnVpbGRlciwgYnVmZmVyLCBzdGF0dXMpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgY2hhciAqc3RhcnRDb2RlUG9pbnQgPSBidWZmZXI7CisgICAgY2hhciAqZW5kQ29kZVBvaW50ID0gc3RyY2hyKHN0YXJ0Q29kZVBvaW50LCAnOycpOworICAgIGlmKGVuZENvZGVQb2ludCA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgLSBsaW5lIHdpdGggbm8gY29kZSBwb2ludCFcbiIpOworICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsgLyogTm8gY29kZSBwb2ludCAtIGNvdWxkIGJlIGFuIGVycm9yLCBidXQgcHJvYmFibHkgb25seSBhbiBlbXB0eSBsaW5lICovCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgICAqZW5kQ29kZVBvaW50ID0gMDsKKyAgICB9CisKKyAgICBjaGFyICpwaXBlUG9pbnRlciA9IHN0cmNocihidWZmZXIsICd8Jyk7CisgICAgaWYgKHBpcGVQb2ludGVyICE9IE5VTEwpIHsKKyAgICAgICAgLy8gUmVhZCB0aGUgcHJlZml4IHN0cmluZyB3aGljaCBwcmVjZWRlcyB0aGUgYWN0dWFsIHN0cmluZy4KKyAgICAgICAgKnBpcGVQb2ludGVyID0gMDsKKyAgICAgICAgVUNoYXIgKnByZWZpeENoYXJzID0gcHJlZml4LmdldEJ1ZmZlcigzMik7CisgICAgICAgIGludDMyX3QgcHJlZml4U2l6ZSA9CisgICAgICAgICAgICB1X3BhcnNlU3RyaW5nKHN0YXJ0Q29kZVBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhDaGFycywgcHJlZml4LmdldENhcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHN0YXR1cyk7CisgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgcHJlZml4LnJlbGVhc2VCdWZmZXIoMCk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIC0gcGFyc2luZyBvZiBwcmVmaXggXCIlc1wiIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29kZVBvaW50LCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisgICAgICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBwcmVmaXgucmVsZWFzZUJ1ZmZlcihwcmVmaXhTaXplKTsKKyAgICAgICAgc3RhcnRDb2RlUG9pbnQgPSBwaXBlUG9pbnRlciArIDE7CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgc3RyaW5nIHdoaWNoIGdldHMgdGhlIENFKHMpIGFzc2lnbmVkLgorICAgIFVDaGFyICp1Y2hhcnMgPSBzLmdldEJ1ZmZlcigzMik7CisgICAgaW50MzJfdCBjU2l6ZSA9CisgICAgICAgIHVfcGFyc2VTdHJpbmcoc3RhcnRDb2RlUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgdWNoYXJzLCBzLmdldENhcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgcy5yZWxlYXNlQnVmZmVyKDApOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIC0gcGFyc2luZyBvZiBjb2RlIHBvaW50KHMpIFwiJXNcIiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIHN0YXJ0Q29kZVBvaW50LCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisgICAgICAgICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHMucmVsZWFzZUJ1ZmZlcihjU2l6ZSk7CisKKyAgICBjaGFyICpwb2ludGVyID0gZW5kQ29kZVBvaW50ICsgMTsKKworICAgIGNoYXIgKmNvbW1lbnRTdGFydCA9IHN0cmNocihwb2ludGVyLCAnIycpOworICAgIGlmKGNvbW1lbnRTdGFydCA9PSBOVUxMKSB7CisgICAgICAgIGNvbW1lbnRTdGFydCA9IHN0cmNocihwb2ludGVyLCAwKTsKKyAgICB9CisKKyAgICBjZXNMZW5ndGggPSAwOworICAgIGZvcig7OykgeworICAgICAgICBwb2ludGVyID0gc2tpcFdoaXRlU3BhY2UocG9pbnRlcik7CisgICAgICAgIGlmKHBvaW50ZXIgPT0gY29tbWVudFN0YXJ0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihjZXNMZW5ndGggPj0gMzEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IFRvbyBtYW55IENFcyBvbiBsaW5lICclcydcbiIsIGJ1ZmZlcik7CisgICAgICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBjZXNbY2VzTGVuZ3RoKytdID0gcGFyc2VDRShidWlsZGVyLCBwb2ludGVyLCAqc3RhdHVzKTsKKyAgICAgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlN5bnRheCBlcnJvciBwYXJzaW5nIENFIGZyb20gbGluZSAnJXMnIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYocy5sZW5ndGgoKSA9PSAxICYmIHNbMF0gPT0gMHhmZmZlKSB7CisgICAgICAgIC8vIFVDQSA2LjAgZ2l2ZXMgVStGRkZFIGEgc3BlY2lhbCBtaW5pbXVtIHdlaWdodCB1c2luZyB0aGUKKyAgICAgICAgLy8gYnl0ZSAwMiB3aGljaCBpcyB0aGUgbWVyZ2Utc29ydC1rZXkgc2VwYXJhdG9yIGFuZCBpbGxlZ2FsIGZvciBhbnkKKyAgICAgICAgLy8gb3RoZXIgY2hhcmFjdGVycy4KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSdWRpbWVudGFyeSBjaGVjayBmb3IgdmFsaWQgYnl0ZXMgaW4gQ0Ugd2VpZ2h0cy4KKyAgICAgICAgLy8gRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrIHNlZSBDb2xsYXRpb25UZXN0OjpUZXN0Um9vdEVsZW1lbnRzKCksCisgICAgICAgIC8vIGludGx0ZXN0IGNvbGxhdGUvQ29sbGF0aW9uVGVzdC9UZXN0Um9vdEVsZW1lbnRzCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNlc0xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpbnQ2NF90IGNlID0gY2VzW2ldOworICAgICAgICAgICAgVUJvb2wgaXNDb21wcmVzc2libGUgPSBGQUxTRTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSA3OyBqID49IDA7IC0taikgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9ICh1aW50OF90KShjZSA+PiAoaiAqIDgpKTsKKyAgICAgICAgICAgICAgICBpZihqIDw9IDEpIHsgYiAmPSAweDNmOyB9ICAvLyB0ZXJ0aWFyeSBieXRlcyB1c2UgNiBiaXRzCisgICAgICAgICAgICAgICAgaWYgKGIgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IGludmFsaWQgVUNBIHdlaWdodCBieXRlIDAxIGZvciAlc1xuIiwgYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaiA9PSA3ICYmIGIgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IGludmFsaWQgVUNBIHByaW1hcnkgd2VpZ2h0IGxlYWQgYnl0ZSAwMiBmb3IgJXNcbiIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGogPT0gNykgeworICAgICAgICAgICAgICAgICAgICBpc0NvbXByZXNzaWJsZSA9IGJ1aWxkZXIuaXNDb21wcmVzc2libGVMZWFkQnl0ZShiKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGogPT0gNikgeworICAgICAgICAgICAgICAgICAgICAvLyBQcmltYXJ5IHNlY29uZCBieXRlcyAwMyBhbmQgRkYgYXJlIGNvbXByZXNzaW9uIHRlcm1pbmF0b3JzLgorICAgICAgICAgICAgICAgICAgICAvLyAwMiwgMDMgYW5kIEZGIGFyZSB1c2FibGUgd2hlbiB0aGUgbGVhZCBieXRlIGlzIG5vdCBjb21wcmVzc2libGUuCisgICAgICAgICAgICAgICAgICAgIC8vIDAyIGlzIHVudXNhYmxlIGFuZCAwMyBpcyB0aGUgbG93IGNvbXByZXNzaW9uIHRlcm1pbmF0b3Igd2hlbiB0aGUgbGVhZCBieXRlIGlzIGNvbXByZXNzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcHJlc3NpYmxlICYmIChiIDw9IDMgfHwgYiA9PSAweGZmKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBpbnZhbGlkIFVDQSBwcmltYXJ5IHNlY29uZCB3ZWlnaHQgYnl0ZSAlMDJYIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiwgYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorcGFyc2VGcmFjdGlvbmFsVUNBKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgIENvbGxhdGlvbkJhc2VEYXRhQnVpbGRlciAmYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7IHJldHVybjsgfQorICAgIEZJTEUgKmRhdGEgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKyAgICBpZihkYXRhID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlbmFtZSk7CisgICAgICAgICpzdGF0dXMgPSBVX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVpbnQzMl90IGxpbmUgPSAwOworCisgICAgVUNoYXIzMiBtYXhDb2RlUG9pbnQgPSAwOworICAgIHdoaWxlKCFmZW9mKGRhdGEpKSB7CisgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTb21ldGhpbmcgcmV0dXJuZWQgYW4gZXJyb3IgJWkgKCVzKSB3aGlsZSBwcm9jZXNzaW5nIGxpbmUgJXUgb2YgJXMuIEV4aXRpbmcuLi5cbiIsCisgICAgICAgICAgICAgICAgKnN0YXR1cywgdV9lcnJvck5hbWUoKnN0YXR1cyksIChpbnQpbGluZSwgZmlsZW5hbWUpOworICAgICAgICAgICAgZXhpdCgqc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUrKzsKKworICAgICAgICBVbmljb2RlU3RyaW5nIHByZWZpeDsKKyAgICAgICAgVW5pY29kZVN0cmluZyBzOworICAgICAgICBpbnQ2NF90IGNlc1szMl07CisgICAgICAgIGludDMyX3QgY2VzTGVuZ3RoID0gMDsKKyAgICAgICAgaWYocmVhZEFuRWxlbWVudChkYXRhLCBidWlsZGVyLCBwcmVmaXgsIHMsIGNlcywgY2VzTGVuZ3RoLCBzdGF0dXMpKSB7CisgICAgICAgICAgICAvLyB3ZSBoYXZlIHJlYWQgdGhlIGxpbmUsIG5vdyBkbyBzb21ldGhpbmcgc2Vuc2libGUgd2l0aCB0aGUgcmVhZCBkYXRhIQorICAgICAgICAgICAgdWludDMyX3QgcCA9ICh1aW50MzJfdCkoY2VzWzBdID4+IDMyKTsKKworICAgICAgICAgICAgaWYocy5sZW5ndGgoKSA+IDEgJiYgc1swXSA9PSAweEZERDApIHsKKyAgICAgICAgICAgICAgICAvLyBGcmFjdGlvbmFsVUNBLnR4dCBjb250cmFjdGlvbnMgc3RhcnRpbmcgd2l0aCBVK0ZERDAKKyAgICAgICAgICAgICAgICAvLyBhcmUgb25seSBlbnRlcmVkIGludG8gdGhlIGludmVyc2UgdGFibGUsCisgICAgICAgICAgICAgICAgLy8gbm90IGludG8gdGhlIG5vcm1hbCBjb2xsYXRpb24gZGF0YS4KKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFJvb3RFbGVtZW50cyhjZXMsIGNlc0xlbmd0aCwgKnN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYocy5sZW5ndGgoKSA9PSAyICYmIGNlc0xlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlYWQgYnl0ZSBmb3IgbnVtZXJpYyBzb3J0aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXROdW1lcmljUHJpbWFyeShwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYyMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU2NyaXB0U3RhcnQoQ29sbGF0aW9uRGF0YTo6UkVPUkRFUl9SRVNFUlZFRF9CRUZPUkVfTEFUSU4sIHApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjNBOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRTY3JpcHRTdGFydChDb2xsYXRpb25EYXRhOjpSRU9SREVSX1JFU0VSVkVEX0FGVEVSX0xBVElOLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFVDaGFyMzIgYyA9IHMuY2hhcjMyQXQoMCk7CisgICAgICAgICAgICAgICAgaWYoYyA+IG1heENvZGVQb2ludCkgeyBtYXhDb2RlUG9pbnQgPSBjOyB9CisKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIENFcyBmb3IgVStGRkZELi5VK0ZGRkYgYW5kIGZvciB0aGUgdW5hc3NpZ25lZCBmaXJzdCBwcmltYXJ5LgorICAgICAgICAgICAgICAgIC8vIENvbGxhdGlvbkJhc2VEYXRhQnVpbGRlcjo6aW5pdCgpIG1hcHMgdGhlbSB0byBzcGVjaWFsIENFcy4KKyAgICAgICAgICAgICAgICAvLyBFeGNlcHQgZm9yIFUrRkZGRSwgdGhlc2UgaGF2ZSBoaWdoZXIgcHJpbWFyaWVzIGluIHYyIHRoYW4gaW4gRnJhY3Rpb25hbFVDQS50eHQuCisgICAgICAgICAgICAgICAgaWYoMHhmZmZkIDw9IGMgJiYgYyA8PSAweGZmZmYpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICBpZihzLmxlbmd0aCgpID49IDIgJiYgYyA9PSAweEZERDEpIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjMiA9IHMuY2hhcjMyQXQoMSk7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2NyaXB0ID0gZ2V0Q2hhclNjcmlwdChjMik7CisgICAgICAgICAgICAgICAgICAgIGlmKHNjcmlwdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IFVua25vd24gc2NyaXB0IGZvciBmaXJzdC1wcmltYXJ5IHNhbXBsZSBjaGFyYWN0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVSslMDR4IG9uIGxpbmUgJXUgb2YgJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAoYWRkIHRoZSBjaGFyYWN0ZXIgdG8gZ2VudWNhLmNwcCBzYW1wbGVDaGFyc1RvU2NyaXB0c1tdKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIsIChpbnQpbGluZSwgZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdChVX0lOVkFMSURfRk9STUFUX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihzY3JpcHQgPT0gVVNDUklQVF9VTktOT1dOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGREQxIEZERDAsIGZpcnN0IHVuYXNzaWduZWQtaW1wbGljaXQgcHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRTY3JpcHRTdGFydChzY3JpcHQsIENvbGxhdGlvbjo6RklSU1RfVU5BU1NJR05FRF9QUklNQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU2NyaXB0U3RhcnQoc2NyaXB0LCBwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoc2NyaXB0ID09IFVTQ1JJUFRfSElSQUdBTkEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU2NyaXB0U3RhcnQoVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSwgcCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihzY3JpcHQgPT0gVVNDUklQVF9IQU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU2NyaXB0U3RhcnQoVVNDUklQVF9TSU1QTElGSUVEX0hBTiwgcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFNjcmlwdFN0YXJ0KFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKDB4ZTAwMDAwMDAgPD0gcCAmJiBwIDwgMHhmMDAwMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IFVuZXhwZWN0ZWQgbWFwcGluZyB0byBhbiBpbXBsaWNpdCBvciB0cmFpbGluZyBwcmltYXJ5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb24gbGluZSAldSBvZiAlcy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClsaW5lLCBmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoVV9JTlZBTElEX0ZPUk1BVF9FUlJPUik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnVpbGRlci5hZGQocHJlZml4LCBzLCBjZXMsIGNlc0xlbmd0aCwgKnN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG51bVJhbmdlcyA9IDA7CisgICAgaW50MzJfdCBudW1SYW5nZUNvZGVQb2ludHMgPSAwOworICAgIFVDaGFyMzIgcmFuZ2VGaXJzdCA9IFVfU0VOVElORUw7CisgICAgVUNoYXIzMiByYW5nZUxhc3QgPSBVX1NFTlRJTkVMOworICAgIHVpbnQzMl90IHJhbmdlRmlyc3RQcmltYXJ5ID0gMDsKKyAgICB1aW50MzJfdCByYW5nZUxhc3RQcmltYXJ5ID0gMDsKKyAgICBpbnQzMl90IHJhbmdlU3RlcCA9IC0xOworCisgICAgLy8gRGV0ZWN0IHJhbmdlcyBvZiBjaGFyYWN0ZXJzIGluIHByaW1hcnkgY29kZSBwb2ludCBvcmRlciwKKyAgICAvLyB3aXRoIDMtYnl0ZSBwcmltYXJpZXMgYW5kCisgICAgLy8gd2l0aCBjb25zaXN0ZW50ICJzdGVwIiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGFkamFjZW50IHByaW1hcmllcy4KKyAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgRnJhY3Rpb25hbFVDQSBnZW5lcmF0b3IgdXNpbmcgdGhlIHNhbWUgcHJpbWFyeS13ZWlnaHQgaW5jcmVtZW50YXRpb24uCisgICAgLy8gU3RhcnQgYXQgVSswMTgwOiBObyByYW5nZXMgZm9yIGNvbW1vbiBMYXRpbiBjaGFyYWN0ZXJzLgorICAgIC8vIEdvIG9uZSBiZXlvbmQgbWF4Q29kZVBvaW50IGluIGNhc2UgYSByYW5nZSBlbmRzIHRoZXJlLgorICAgIGZvcihVQ2hhcjMyIGMgPSAweDE4MDsgYyA8PSAobWF4Q29kZVBvaW50ICsgMSk7ICsrYykgeworICAgICAgICBVQm9vbCBhY3Rpb247CisgICAgICAgIHVpbnQzMl90IHAgPSBidWlsZGVyLmdldExvbmdQcmltYXJ5SWZTaW5nbGVDRShjKTsKKyAgICAgICAgaWYocCAhPSAwKSB7CisgICAgICAgICAgICAvLyBwIGlzIGEgImxvbmciICh0aHJlZS1ieXRlKSBwcmltYXJ5LgorICAgICAgICAgICAgaWYocmFuZ2VGaXJzdCA+PSAwICYmIGMgPT0gKHJhbmdlTGFzdCArIDEpICYmIHAgPiByYW5nZUxhc3RQcmltYXJ5KSB7CisgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIHR3byBwcmltYXJpZXMuCisgICAgICAgICAgICAgICAgaW50MzJfdCBzdGVwID0gQ29sbGF0aW9uQmFzZURhdGFCdWlsZGVyOjpkaWZmVGhyZWVCeXRlUHJpbWFyaWVzKAorICAgICAgICAgICAgICAgICAgICByYW5nZUxhc3RQcmltYXJ5LCBwLCBidWlsZGVyLmlzQ29tcHJlc3NpYmxlUHJpbWFyeShwKSk7CisgICAgICAgICAgICAgICAgaWYocmFuZ2VGaXJzdCA9PSByYW5nZUxhc3QgJiYgc3RlcCA+PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGMgPT0gcmFuZ2VGaXJzdCArIDEsIHN0b3JlIHRoZSAic3RlcCIgYmV0d2VlbiByYW5nZSBwcmltYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIHJhbmdlU3RlcCA9IHN0ZXA7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlTGFzdCA9IGM7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlTGFzdFByaW1hcnkgPSBwOworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAwOyAgLy8gY29udGludWUgcmFuZ2UKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmFuZ2VTdGVwID09IHN0ZXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgdGhlIHJhbmdlIHdpdGggdGhlIHNhbWUgInN0ZXAiIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIHJhbmdlTGFzdCA9IGM7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlTGFzdFByaW1hcnkgPSBwOworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAwOyAgLy8gY29udGludWUgcmFuZ2UKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAxOyAgLy8gbWF5YmUgZmluaXNoIHJhbmdlLCBzdGFydCBhIG5ldyBvbmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFjdGlvbiA9IDE7ICAvLyBtYXliZSBmaW5pc2ggcmFuZ2UsIHN0YXJ0IGEgbmV3IG9uZQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWN0aW9uID0gLTE7ICAvLyBtYXliZSBmaW5pc2ggcmFuZ2UsIGRvIG5vdCBzdGFydCBhIG5ldyBvbmUKKyAgICAgICAgfQorICAgICAgICBpZihhY3Rpb24gIT0gMCAmJiByYW5nZUZpcnN0ID49IDApIHsKKyAgICAgICAgICAgIC8vIEZpbmlzaCBhIHJhbmdlLgorICAgICAgICAgICAgLy8gU2V0IG9mZnNldCBDRTMycyBmb3IgYSBsb25nIHJhbmdlLCBsZWF2ZSBzaW5nbGUgQ0VzIGZvciBhIHNob3J0IHJhbmdlLgorICAgICAgICAgICAgVUJvb2wgZGlkU2V0UmFuZ2UgPSBidWlsZGVyLm1heWJlU2V0UHJpbWFyeVJhbmdlKAorICAgICAgICAgICAgICAgIHJhbmdlRmlyc3QsIHJhbmdlTGFzdCwKKyAgICAgICAgICAgICAgICByYW5nZUZpcnN0UHJpbWFyeSwgcmFuZ2VTdGVwLCAqc3RhdHVzKTsKKyAgICAgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgImZhaWx1cmUgc2V0dGluZyBjb2RlIHBvaW50IG9yZGVyIHJhbmdlIFUrJTA0bHguLlUrJTA0bHggIgorICAgICAgICAgICAgICAgICAgICAgICAgIiUwOGx4Li4lMDhseCBzdGVwICVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylyYW5nZUZpcnN0LCAobG9uZylyYW5nZUxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylyYW5nZUZpcnN0UHJpbWFyeSwgKGxvbmcpcmFuZ2VMYXN0UHJpbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcmFuZ2VTdGVwLCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYoZGlkU2V0UmFuZ2UpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJhbmdlTGVuZ3RoID0gcmFuZ2VMYXN0IC0gcmFuZ2VGaXJzdCArIDE7CisgICAgICAgICAgICAgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKiBzZXQgY29kZSBwb2ludCBvcmRlciByYW5nZSBVKyUwNGx4Li5VKyUwNGx4IFslZF0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDhseC4uJTA4bHggc3RlcCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylyYW5nZUZpcnN0LCAobG9uZylyYW5nZUxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyYW5nZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylyYW5nZUZpcnN0UHJpbWFyeSwgKGxvbmcpcmFuZ2VMYXN0UHJpbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJhbmdlU3RlcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbnVtUmFuZ2VzOworICAgICAgICAgICAgICAgIG51bVJhbmdlQ29kZVBvaW50cyArPSByYW5nZUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJhbmdlRmlyc3QgPSBVX1NFTlRJTkVMOworICAgICAgICAgICAgcmFuZ2VTdGVwID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYoYWN0aW9uID4gMCkgeworICAgICAgICAgICAgLy8gU3RhcnQgYSBuZXcgcmFuZ2UuCisgICAgICAgICAgICByYW5nZUZpcnN0ID0gcmFuZ2VMYXN0ID0gYzsKKyAgICAgICAgICAgIHJhbmdlRmlyc3RQcmltYXJ5ID0gcmFuZ2VMYXN0UHJpbWFyeSA9IHA7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCIqKiBzZXQgJWQgcmFuZ2VzIHdpdGggJWQgY29kZSBwb2ludHNcbiIsIChpbnQpbnVtUmFuZ2VzLCAoaW50KW51bVJhbmdlQ29kZVBvaW50cyk7CisKKyAgICAvLyBJZGVhOiBQcm9iYWJseSBiZXN0IHRvIHdvcmsgaW4gdHdvIHBhc3Nlcy4KKyAgICAvLyBQYXNzIDEgZm9yIHJlYWRpbmcgYWxsIGRhdGEsIHNldHRpbmcgaXNDb21wcmVzc2libGUgZmxhZ3MgKGFuZCByZW9yZGVyaW5nIGdyb3VwcykKKyAgICAvLyBhbmQgZmluZGluZyByYW5nZXMuCisgICAgLy8gVGhlbiBzZXQgdGhlIHJhbmdlcyBpbiBhIG5ld2x5IGluaXRpYWxpemVkIGJ1aWxkZXIKKyAgICAvLyBmb3Igb3B0aW1hbCBjb21wcmVzc2lvbiAobWFrZXMgc3VyZSB0aGF0IGFkamFjZW50IGJsb2NrcyBjYW4gb3ZlcmxhcCBlYXNpbHkpLgorICAgIC8vIFRoZW4gc2V0IGFsbCBtYXBwaW5ncyBvdXRzaWRlIHRoZSByYW5nZXMuCisgICAgLy8KKyAgICAvLyBJbiB0aGUgZmlyc3QgcGFzcywgd2UgY291bGQgc3RvcmUgbWFwcGluZ3MgaW4gYSBzaW1wbGUgbGlzdCwKKyAgICAvLyB3aXRoIHNpbmdsZS1jaGFyYWN0ZXIvc2luZ2xlLWxvbmctcHJpbWFyeS1DRSBtYXBwaW5ncyBpbiBhIFVUcmllMjsKKyAgICAvLyBvciBzdG9yZSB0aGUgbWFwcGluZ3MgaW4gYSB0ZW1wb3JhcnkgYnVpbGRlcjsKKyAgICAvLyBvciB3ZSBjb3VsZCBqdXN0IHBhcnNlIHRoZSBpbnB1dCBmaWxlIGFnYWluIGluIHRoZSBzZWNvbmQgcGFzcy4KKyAgICAvLworICAgIC8vIElkZWFsbHkgc2V0L2NvcHkgVSswMDAwLi5VKzAxN0YgYmVmb3JlIHNldHRpbmcgYW55dGhpbmcgZWxzZSwKKyAgICAvLyB0aGVuIHNldCBkZWZhdWx0IEhhbi9IYW5ndWwsIHRoZW4gc2V0IHRoZSByYW5nZXMsIHRoZW4gY29weSBub24tcmFuZ2UgbWFwcGluZ3MuCisgICAgLy8gSXQgc2hvdWxkIGJlIGVhc3kgdG8gY29weSBtYXBwaW5ncyBmcm9tIGFuIHVuLWJ1aWx0IGJ1aWxkZXIgdG8gYSBuZXcgb25lLgorICAgIC8vIEFkZCBDb2xsYXRpb25EYXRhQnVpbGRlcjo6Y29weUZyb20oYnVpbGRlciwgY29kZSBwb2ludCwgZXJyb3JDb2RlKSAtLSBjb3B5IGNvbnRleHRzICYgZXhwYW5zaW9ucy4KKworICAgIGlmKFVDQVZlcnNpb25bMF0gPT0gMCAmJiBVQ0FWZXJzaW9uWzFdID09IDAgJiYgVUNBVmVyc2lvblsyXSA9PSAwICYmIFVDQVZlcnNpb25bM10gPT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVDQSB2ZXJzaW9uIG5vdCBzcGVjaWZpZWQuIENhbm5vdCBjcmVhdGUgZGF0YSBmaWxlIVxuIik7CisgICAgICAgIGZjbG9zZShkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChiZVZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnRmKCJcbkxpbmVzIHJlYWQ6ICV1XG4iLCAoaW50KWxpbmUpOworICAgIH0KKworICAgIGZjbG9zZShkYXRhKTsKKworICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2J1aWxkQW5kV3JpdGVCYXNlRGF0YShDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXIgJmJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBpZihnZXRPcHRpb25WYWx1ZSgiW2ZpeGVkIHNlY29uZGFyeSBjb21tb24gYnl0ZSIpICE9IENvbGxhdGlvbjo6Q09NTU9OX0JZVEUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5leHBlY3RlZCBbZml4ZWQgc2Vjb25kYXJ5IGNvbW1vbiBieXRlXSIpOworICAgICAgICBlcnJvckNvZGUgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKGdldE9wdGlvblZhbHVlKCJbZml4ZWQgdGVydGlhcnkgY29tbW9uIGJ5dGUiKSAhPSBDb2xsYXRpb246OkNPTU1PTl9CWVRFKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHVuZXhwZWN0ZWQgW2ZpeGVkIHRlcnRpYXJ5IGNvbW1vbiBieXRlXSIpOworICAgICAgICBlcnJvckNvZGUgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29sbGF0aW9uRGF0YSBkYXRhKCpOb3JtYWxpemVyMkZhY3Rvcnk6OmdldE5GQ0ltcGwoZXJyb3JDb2RlKSk7CisgICAgYnVpbGRlci5lbmFibGVGYXN0TGF0aW4oKTsKKyAgICBidWlsZGVyLmJ1aWxkKGRhdGEsIGVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJidWlsZGVyLmJ1aWxkKCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBDb2xsYXRpb25TZXR0aW5ncyBjb25zdHJ1Y3RvciBnaXZlcyB1cyB0aGUgcHJvcGVybHkgZW5jb2RlZAorICAgIC8vIGRlZmF1bHQgb3B0aW9ucywgc28gdGhhdCB3ZSBuZWVkIG5vdCBkdXBsaWNhdGUgdGhlbSBoZXJlLgorICAgIENvbGxhdGlvblNldHRpbmdzIHNldHRpbmdzOworCisgICAgVVZlY3RvcjMyIHJvb3RFbGVtZW50cyhlcnJvckNvZGUpOworICAgIGZvcihpbnQzMl90IGkgPSAwOyBpIDwgQ29sbGF0aW9uUm9vdEVsZW1lbnRzOjpJWF9DT1VOVDsgKytpKSB7CisgICAgICAgIHJvb3RFbGVtZW50cy5hZGRFbGVtZW50KDAsIGVycm9yQ29kZSk7CisgICAgfQorICAgIGJ1aWxkZXIuYnVpbGRSb290RWxlbWVudHNUYWJsZShyb290RWxlbWVudHMsIGVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJidWlsZGVyLmJ1aWxkUm9vdEVsZW1lbnRzVGFibGUoKSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludDMyX3QgaW5kZXggPSBDb2xsYXRpb25Sb290RWxlbWVudHM6OklYX0NPVU5UOworICAgIHJvb3RFbGVtZW50cy5zZXRFbGVtZW50QXQoaW5kZXgsIENvbGxhdGlvblJvb3RFbGVtZW50czo6SVhfRklSU1RfVEVSVElBUllfSU5ERVgpOworCisgICAgd2hpbGUoKHJvb3RFbGVtZW50cy5lbGVtZW50QXRpKGluZGV4KSAmIDB4ZmZmZjAwMDApID09IDApIHsgKytpbmRleDsgfQorICAgIHJvb3RFbGVtZW50cy5zZXRFbGVtZW50QXQoaW5kZXgsIENvbGxhdGlvblJvb3RFbGVtZW50czo6SVhfRklSU1RfU0VDT05EQVJZX0lOREVYKTsKKworICAgIHdoaWxlKChyb290RWxlbWVudHMuZWxlbWVudEF0aShpbmRleCkgJiBDb2xsYXRpb25Sb290RWxlbWVudHM6OlNFQ19URVJfREVMVEFfRkxBRykgIT0gMCkgeworICAgICAgICArK2luZGV4OworICAgIH0KKyAgICByb290RWxlbWVudHMuc2V0RWxlbWVudEF0KGluZGV4LCBDb2xsYXRpb25Sb290RWxlbWVudHM6OklYX0ZJUlNUX1BSSU1BUllfSU5ERVgpOworCisgICAgcm9vdEVsZW1lbnRzLnNldEVsZW1lbnRBdChDb2xsYXRpb246OkNPTU1PTl9TRUNfQU5EX1RFUl9DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhdGlvblJvb3RFbGVtZW50czo6SVhfQ09NTU9OX1NFQ19BTkRfVEVSX0NFKTsKKworICAgIGludDMyX3Qgc2VjVGVyQm91bmRhcmllcyA9IChpbnQzMl90KWdldE9wdGlvblZhbHVlKCJbZml4ZWQgbGFzdCBzZWNvbmRhcnkgY29tbW9uIGJ5dGUiKSA8PCAyNDsKKyAgICBzZWNUZXJCb3VuZGFyaWVzIHw9IChpbnQzMl90KWdldE9wdGlvblZhbHVlKCJbZml4ZWQgZmlyc3QgaWdub3JhYmxlIHNlY29uZGFyeSBieXRlIikgPDwgMTY7CisgICAgc2VjVGVyQm91bmRhcmllcyB8PSAoaW50MzJfdClnZXRPcHRpb25WYWx1ZSgiW2ZpeGVkIGZpcnN0IGlnbm9yYWJsZSB0ZXJ0aWFyeSBieXRlIik7CisgICAgcm9vdEVsZW1lbnRzLnNldEVsZW1lbnRBdChzZWNUZXJCb3VuZGFyaWVzLCBDb2xsYXRpb25Sb290RWxlbWVudHM6OklYX1NFQ19URVJfQk9VTkRBUklFUyk7CisKKyAgICBMb2NhbE1lbW9yeTx1aW50OF90PiBidWZmZXI7CisgICAgaW50MzJfdCBjYXBhY2l0eSA9IDEwMDAwMDA7CisgICAgdWludDhfdCAqZGVzdCA9IGJ1ZmZlci5hbGxvY2F0ZUluc3RlYWRBbmRDb3B5KGNhcGFjaXR5KTsKKyAgICBpZihkZXN0ID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtZW1vcnkgYWxsb2NhdGlvbiAoJWxkIGJ5dGVzKSBmb3IgZmlsZSBjb250ZW50cyBmYWlsZWRcbiIsCisgICAgICAgICAgICAgICAgKGxvbmcpY2FwYWNpdHkpOworICAgICAgICBlcnJvckNvZGUgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludDMyX3QgaW5kZXhlc1tDb2xsYXRpb25EYXRhUmVhZGVyOjpJWF9UT1RBTF9TSVpFICsgMV07CisgICAgaW50MzJfdCB0b3RhbFNpemUgPSBDb2xsYXRpb25EYXRhV3JpdGVyOjp3cml0ZUJhc2UoCisgICAgICAgICAgICBkYXRhLCBzZXR0aW5ncywKKyAgICAgICAgICAgIHJvb3RFbGVtZW50cy5nZXRCdWZmZXIoKSwgcm9vdEVsZW1lbnRzLnNpemUoKSwKKyAgICAgICAgICAgIGluZGV4ZXMsIGRlc3QsIGNhcGFjaXR5LAorICAgICAgICAgICAgZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbGxhdGlvbkRhdGFXcml0ZXI6OndyaXRlQmFzZShjYXBhY2l0eSA9ICVsZCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAobG9uZyljYXBhY2l0eSwgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJpbnRmKCIqKiogQ0xEUiByb290IGNvbGxhdGlvbiBwYXJ0IHNpemVzICoqKlxuIik7CisgICAgQ29sbGF0aW9uSW5mbzo6cHJpbnRTaXplcyh0b3RhbFNpemUsIGluZGV4ZXMpOworICAgIHByaW50ZigiKioqIENMRFIgcm9vdCBjb2xsYXRpb24gc2l6ZTogICAlNmxkICh3aXRoIGZpbGUgaGVhZGVyIGJ1dCBubyBjb3B5cmlnaHQgc3RyaW5nKVxuIiwKKyAgICAgICAgICAgKGxvbmcpdG90YWxTaXplICsgMzIpOyAgLy8gMzIgYnl0ZXMgPSBEYXRhSGVhZGVyIHJvdW5kZWQgdXAgdG8gMTYtYnl0ZSBib3VuZGFyeQorCisgICAgQ29sbGF0aW9uVGFpbG9yaW5nOjptYWtlQmFzZVZlcnNpb24oVUNBVmVyc2lvbiwgdWNhRGF0YUluZm8uZGF0YVZlcnNpb24pOworICAgIGNvbnN0IGNoYXIgKmRhdGFOYW1lID0KKyAgICAgICAgaGFuT3JkZXIgPT0gSEFOX0lNUExJQ0lUID8gInVjYWRhdGEtaW1wbGljaXRoYW4iIDoKKyAgICAgICAgInVjYWRhdGEtdW5paGFuIjsKKyAgICBVTmV3RGF0YU1lbW9yeSAqcERhdGE9dWRhdGFfY3JlYXRlKHBhdGgsICJpY3UiLCBkYXRhTmFtZSwgJnVjYURhdGFJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENvcHlyaWdodCA/IFVfQ09QWVJJR0hUX1NUUklORyA6IE5VTEwsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VudWNhOiB1ZGF0YV9jcmVhdGUoJXMsIHVjYWRhdGEuaWN1KSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBwYXRoLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGRlc3QsIHRvdGFsU2l6ZSk7CisgICAgbG9uZyBkYXRhTGVuZ3RoID0gdWRhdGFfZmluaXNoKHBEYXRhLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnVjYTogZXJyb3IgJXMgd3JpdGluZyB0aGUgb3V0cHV0IGZpbGVcbiIsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoZGF0YUxlbmd0aCAhPSAobG9uZyl0b3RhbFNpemUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgInVkYXRhX2ZpbmlzaCh1Y2FkYXRhLmljdSkgcmVwb3J0cyAlbGQgYnl0ZXMgd3JpdHRlbiBidXQgc2hvdWxkIGJlICVsZFxuIiwKKyAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoLCAobG9uZyl0b3RhbFNpemUpOworICAgICAgICBlcnJvckNvZGU9VV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SOworICAgIH0KK30KKworLyoqCisgKiBBZGRzIGVhY2ggbGVhZCBzdXJyb2dhdGUgdG8gdGhlIGJtcCBzZXQgaWYgYW55IG9mIHRoZSAxMDI0CisgKiBhc3NvY2lhdGVkIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgaXMgaW4gdGhlIHN1cHAgc2V0LgorICogVGhlc2UgY2FuIGJlIG9uZSBhbmQgdGhlIHNhbWUgc2V0LgorICovCitzdGF0aWMgdm9pZAorc2V0TGVhZFN1cnJvZ2F0ZXNGb3JBc3NvY2lhdGVkU3VwcGxlbWVudGFyeShVbmljb2RlU2V0ICZibXAsIGNvbnN0IFVuaWNvZGVTZXQgJnN1cHApIHsKKyAgICBVQ2hhcjMyIGMgPSAweDEwMDAwOworICAgIGZvcihVQ2hhciBsZWFkID0gMHhkODAwOyBsZWFkIDwgMHhkYzAwOyArK2xlYWQsIGMgKz0gMHg0MDApIHsKKyAgICAgICAgaWYoc3VwcC5jb250YWluc1NvbWUoYywgYyArIDB4M2ZmKSkgeworICAgICAgICAgICAgYm1wLmFkZChsZWFkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludDMyX3QKK21ha2VCTVBGb2xkZWRCaXRTZXQoY29uc3QgVW5pY29kZVNldCAmc2V0LCB1aW50OF90IGluZGV4WzB4ODAwXSwgdWludDMyX3QgYml0c1syNTZdLAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gMDsgfQorICAgIGJpdHNbMF0gPSAwOyAgLy8gbm8gYml0cyBzZXQKKyAgICBiaXRzWzFdID0gMHhmZmZmZmZmZjsgIC8vIGFsbCBiaXRzIHNldAorICAgIGludDMyX3QgYml0c0xlbmd0aCA9IDI7CisgICAgaW50MzJfdCBpID0gMDsKKyAgICBmb3IoVUNoYXIzMiBjID0gMDsgYyA8PSAweGZmZmY7IGMgKz0gMHgyMCwgKytpKSB7CisgICAgICAgIGlmKHNldC5jb250YWluc05vbmUoYywgYyArIDB4MWYpKSB7CisgICAgICAgICAgICBpbmRleFtpXSA9IDA7CisgICAgICAgIH0gZWxzZSBpZihzZXQuY29udGFpbnMoYywgYyArIDB4MWYpKSB7CisgICAgICAgICAgICBpbmRleFtpXSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1aW50MzJfdCBiID0gMDsKKyAgICAgICAgICAgIGZvcihpbnQzMl90IGogPSAwOyBqIDw9IDB4MWY7ICsraikgeworICAgICAgICAgICAgICAgIGlmKHNldC5jb250YWlucyhjICsgaikpIHsKKyAgICAgICAgICAgICAgICAgICAgYiB8PSAodWludDMyX3QpMSA8PCBqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludDMyX3QgazsKKyAgICAgICAgICAgIGZvcihrID0gMjs7ICsraykgeworICAgICAgICAgICAgICAgIGlmKGsgPT0gYml0c0xlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAvLyBuZXcgYml0IGNvbWJpbmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmKGJpdHNMZW5ndGggPT0gMjU2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJpdHNbYml0c0xlbmd0aCsrXSA9IGI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihiaXRzW2tdID09IGIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlIGJpdCBjb21iaW5hdGlvbgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleFtpXSA9IGs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJpdHNMZW5ndGg7Cit9CisKKy8vIFRPRE86IE1ha2UgcHJlcGFyc2V1Y2QucHkgd3JpdGUgZmNkX2RhdGEuaCBtYXBwaW5nIGNvZGUgcG9pbnQgcmFuZ2VzIHRvIEZDRDE2IHZhbHVlcywKKy8vIHVzZSB0aGF0IHJhdGhlciB0aGFuIHByb3BlcnRpZXMgQVBJcy4KKy8vIFRoZW4gY29uc2lkZXIgbW92aW5nIHJlbGF0ZWQgbG9naWMgZm9yIHRoZSB1bnNhZmVCd2RTZXQgYmFjayBmcm9tIHRoZSBsb2FkZXIgaW50byB0aGlzIGJ1aWxkZXIuCisKKy8qKgorICogQnVpbGRzIGRhdGEgZm9yIHRoZSBGQ0QgY2hlY2sgZmFzdCBwYXRoLgorICogRm9yIGRldGFpbHMgc2VlIHRoZSBDb2xsYXRpb25GQ0QgY2xhc3MgY29tbWVudHMuCisgKi8KK3N0YXRpYyB2b2lkCitidWlsZEFuZFdyaXRlRkNERGF0YShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBVbmljb2RlU2V0IGxjY2NTZXQoVU5JQ09ERV9TVFJJTkdfU0lNUExFKCJbWzpebGNjYz0wOl1bXFx1ZGMwMC1cXHVkZmZmXV0iKSwgZXJyb3JDb2RlKTsKKyAgICBVbmljb2RlU2V0IHRjY2NTZXQoVU5JQ09ERV9TVFJJTkdfU0lNUExFKCJbOl50Y2NjPTA6XSIpLCBlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorICAgIHNldExlYWRTdXJyb2dhdGVzRm9yQXNzb2NpYXRlZFN1cHBsZW1lbnRhcnkodGNjY1NldCwgdGNjY1NldCk7CisgICAgLy8gVGhlIGZvbGxvd2luZyBzdXBwKGxjY2MpLT5sZWFkKHRjY2MpIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQorICAgIC8vIGFmdGVyIHRoZSBwcmV2aW91cyBzdXBwKHRjY2MpLT5sZWFkKHRjY2MpCisgICAgLy8gYmVjYXVzZSB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBjaGFyYWN0ZXJzIHdpdGggbGNjYyE9MCBhbmQgdGNjYz0wLgorICAgIC8vIEl0IGlzIHNhZmUgYW5kIGhhcm1sZXNzLgorICAgIHNldExlYWRTdXJyb2dhdGVzRm9yQXNzb2NpYXRlZFN1cHBsZW1lbnRhcnkodGNjY1NldCwgbGNjY1NldCk7CisgICAgc2V0TGVhZFN1cnJvZ2F0ZXNGb3JBc3NvY2lhdGVkU3VwcGxlbWVudGFyeShsY2NjU2V0LCBsY2NjU2V0KTsKKyAgICB1aW50OF90IGxjY2NJbmRleFsweDgwMF0sIHRjY2NJbmRleFsweDgwMF07CisgICAgdWludDMyX3QgbGNjY0JpdHNbMjU2XSwgdGNjY0JpdHNbMjU2XTsKKyAgICBpbnQzMl90IGxjY2NCaXRzTGVuZ3RoID0gbWFrZUJNUEZvbGRlZEJpdFNldChsY2NjU2V0LCBsY2NjSW5kZXgsIGxjY2NCaXRzLCBlcnJvckNvZGUpOworICAgIGludDMyX3QgdGNjY0JpdHNMZW5ndGggPSBtYWtlQk1QRm9sZGVkQml0U2V0KHRjY2NTZXQsIHRjY2NJbmRleCwgdGNjY0JpdHMsIGVycm9yQ29kZSk7CisgICAgcHJpbnRmKCJAQEAgbGNjY0JpdHNMZW5ndGg9JWQgLT4gJWQgYnl0ZXNcbiIsIGxjY2NCaXRzTGVuZ3RoLCAweDgwMCArIGxjY2NCaXRzTGVuZ3RoICogNCk7CisgICAgcHJpbnRmKCJAQEAgdGNjY0JpdHNMZW5ndGg9JWQgLT4gJWQgYnl0ZXNcbiIsIHRjY2NCaXRzTGVuZ3RoLCAweDgwMCArIHRjY2NCaXRzTGVuZ3RoICogNCk7CisKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIEZJTEUgKmY9dXNyY19jcmVhdGUocGF0aCwgImNvbGxhdGlvbmZjZC5jcHAiLAorICAgICAgICAgICAgICAgICAgICAgICAgImljdS90b29scy91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS5jcHAiKTsKKyAgICBpZihmPT1OVUxMKSB7CisgICAgICAgIGVycm9yQ29kZT1VX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZwdXRzKCIjaW5jbHVkZSBcInVuaWNvZGUvdXR5cGVzLmhcIlxuXG4iLCBmKTsKKyAgICBmcHV0cygiI2lmICFVQ09ORklHX05PX0NPTExBVElPTlxuXG4iLCBmKTsKKyAgICBmcHV0cygiI2luY2x1ZGUgXCJjb2xsYXRpb25mY2QuaFwiXG5cbiIsIGYpOworICAgIGZwdXRzKCJVX05BTUVTUEFDRV9CRUdJTlxuXG4iLCBmKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgImNvbnN0IHVpbnQ4X3QgQ29sbGF0aW9uRkNEOjpsY2NjSW5kZXhbJWxkXT17XG4iLAorICAgICAgICBsY2NjSW5kZXgsIDgsIDB4ODAwLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgImNvbnN0IHVpbnQzMl90IENvbGxhdGlvbkZDRDo6bGNjY0JpdHNbJWxkXT17XG4iLAorICAgICAgICBsY2NjQml0cywgMzIsIGxjY2NCaXRzTGVuZ3RoLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgImNvbnN0IHVpbnQ4X3QgQ29sbGF0aW9uRkNEOjp0Y2NjSW5kZXhbJWxkXT17XG4iLAorICAgICAgICB0Y2NjSW5kZXgsIDgsIDB4ODAwLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgImNvbnN0IHVpbnQzMl90IENvbGxhdGlvbkZDRDo6dGNjY0JpdHNbJWxkXT17XG4iLAorICAgICAgICB0Y2NjQml0cywgMzIsIHRjY2NCaXRzTGVuZ3RoLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICBmcHV0cygiVV9OQU1FU1BBQ0VfRU5EXG5cbiIsIGYpOworICAgIGZwdXRzKCIjZW5kaWYgIC8vICFVQ09ORklHX05PX0NPTExBVElPTlxuIiwgZik7CisgICAgZmNsb3NlKGYpOworfQorCitzdGF0aWMgdm9pZAorcGFyc2VBbmRXcml0ZUNvbGxhdGlvblJvb3REYXRhKAorICAgICAgICBjb25zdCBjaGFyICpmcmFjVUNBUGF0aCwKKyAgICAgICAgY29uc3QgY2hhciAqYmluYXJ5RGF0YVBhdGgsCisgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZUNvZGVQYXRoLAorICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICBDb2xsYXRpb25CYXNlRGF0YUJ1aWxkZXIgYnVpbGRlcihlcnJvckNvZGUpOworICAgIGJ1aWxkZXIuaW5pdChlcnJvckNvZGUpOworICAgIHBhcnNlRnJhY3Rpb25hbFVDQShmcmFjVUNBUGF0aCwgYnVpbGRlciwgJmVycm9yQ29kZSk7CisgICAgYnVpbGRBbmRXcml0ZUJhc2VEYXRhKGJ1aWxkZXIsIGJpbmFyeURhdGFQYXRoLCBlcnJvckNvZGUpOworICAgIGJ1aWxkQW5kV3JpdGVGQ0REYXRhKHNvdXJjZUNvZGVQYXRoLCBlcnJvckNvZGUpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitlbnVtIHsKKyAgICBIRUxQX0gsCisgICAgSEVMUF9RVUVTVElPTl9NQVJLLAorICAgIFZFUkJPU0UsCisgICAgQ09QWVJJR0hULAorICAgIEhBTl9PUkRFUgorfTsKKworc3RhdGljIFVPcHRpb24gb3B0aW9uc1tdPXsKKyAgICBVT1BUSU9OX0hFTFBfSCwKKyAgICBVT1BUSU9OX0hFTFBfUVVFU1RJT05fTUFSSywKKyAgICBVT1BUSU9OX1ZFUkJPU0UsCisgICAgVU9QVElPTl9DT1BZUklHSFQsCisgICAgVU9QVElPTl9ERUYoImhhbk9yZGVyIiwgJ1x4MDEnLCBVT1BUX1JFUVVJUkVTX0FSRykKK307CisKK2V4dGVybiAiQyIgaW50CittYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKKyAgICBVX01BSU5fSU5JVF9BUkdTKGFyZ2MsIGFyZ3YpOworCisgICAgYXJnYz11X3BhcnNlQXJncyhhcmdjLCBhcmd2LCBVUFJWX0xFTkdUSE9GKG9wdGlvbnMpLCBvcHRpb25zKTsKKworICAgIC8qIGVycm9yIGhhbmRsaW5nLCBwcmludGluZyB1c2FnZSBtZXNzYWdlICovCisgICAgaWYoYXJnYzwwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgImVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudCBcIiVzXCJcbiIsCisgICAgICAgICAgICBhcmd2Wy1hcmdjXSk7CisgICAgfQorICAgIGlmKG9wdGlvbnNbSEFOX09SREVSXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgY29uc3QgY2hhciAqb3JkZXIgPSBvcHRpb25zW0hBTl9PUkRFUl0udmFsdWU7CisgICAgICAgIGlmKHVwcnZfc3RyY21wKG9yZGVyLCAiaW1wbGljaXQiKSA9PSAwKSB7CisgICAgICAgICAgICBoYW5PcmRlciA9IEhBTl9JTVBMSUNJVDsKKyAgICAgICAgfSBlbHNlIGlmKHVwcnZfc3RyY21wKG9yZGVyLCAicmFkaWNhbC1zdHJva2UiKSA9PSAwKSB7CisgICAgICAgICAgICBoYW5PcmRlciA9IEhBTl9SQURJQ0FMX1NUUk9LRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihoYW5PcmRlciA9PSBIQU5fTk9fT1JERVIpIHsKKyAgICAgICAgYXJnYyA9IC0xOworICAgIH0KKyAgICBpZiggYXJnYzwyIHx8CisgICAgICAgIG9wdGlvbnNbSEVMUF9IXS5kb2VzT2NjdXIgfHwgb3B0aW9uc1tIRUxQX1FVRVNUSU9OX01BUktdLmRvZXNPY2N1cgorICAgICkgeworICAgICAgICAvKgorICAgICAgICAgKiBCcm9rZW4gaW50byBjaHVua3MgYmVjYXVzZSB0aGUgQzg5IHN0YW5kYXJkIHNheXMgdGhlIG1pbmltdW0KKyAgICAgICAgICogcmVxdWlyZWQgc3VwcG9ydGVkIHN0cmluZyBsZW5ndGggaXMgNTA5IGJ5dGVzLgorICAgICAgICAgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiVXNhZ2U6ICVzIFstb3B0aW9uc10gLS1oYW5PcmRlciAoaW1wbGljaXR8cmFkaWNhbC1zdHJva2UpIHBhdGgvdG8vSUNVL3NyYy9yb290XG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiUmVhZHMgcGF0aC90by9JQ1Uvc3JjL3Jvb3Qvc291cmNlL2RhdGEvdW5pZGF0YS9GcmFjdGlvbmFsVUNBLnR4dCBhbmRcbiIKKyAgICAgICAgICAgICJ3cml0ZXMgc291cmNlIGFuZCBiaW5hcnkgZGF0YSBmaWxlcyB3aXRoIHRoZSBjb2xsYXRpb24gcm9vdCBkYXRhLlxuIgorICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgIGFyZ3ZbMF0pOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJPcHRpb25zOlxuIgorICAgICAgICAgICAgIlx0LWggb3IgLT8gb3IgLS1oZWxwICB0aGlzIHVzYWdlIHRleHRcbiIKKyAgICAgICAgICAgICJcdC12IG9yIC0tdmVyYm9zZSAgICAgdmVyYm9zZSBvdXRwdXRcbiIKKyAgICAgICAgICAgICJcdC1jIG9yIC0tY29weXJpZ2h0ICAgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2VcbiIKKyAgICAgICAgICAgICJcdCAgICAgIC0taGFuT3JkZXIgICAgaW1wbGljaXQgb3IgcmFkaWNhbC1zdHJva2VcbiIpOworICAgICAgICByZXR1cm4gYXJnYzwwID8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIDogVV9aRVJPX0VSUk9SOworICAgIH0KKworICAgIGJlVmVyYm9zZT1vcHRpb25zW1ZFUkJPU0VdLmRvZXNPY2N1cjsKKyAgICB3aXRoQ29weXJpZ2h0PW9wdGlvbnNbQ09QWVJJR0hUXS5kb2VzT2NjdXI7CisKKyAgICBJY3VUb29sRXJyb3JDb2RlIGVycm9yQ29kZSgiZ2VudWNhIik7CisKKyAgICBDaGFyU3RyaW5nIGljdVNyY1Jvb3QoYXJndlsxXSwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgaWN1U291cmNlKGljdVNyY1Jvb3QsIGVycm9yQ29kZSk7CisgICAgaWN1U291cmNlLmFwcGVuZFBhdGhQYXJ0KCJzb3VyY2UiLCBlcnJvckNvZGUpOworCisgICAgQ2hhclN0cmluZyBpY3VTb3VyY2VEYXRhKGljdVNvdXJjZSwgZXJyb3JDb2RlKTsKKyAgICBpY3VTb3VyY2VEYXRhLmFwcGVuZFBhdGhQYXJ0KCJkYXRhIiwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgZnJhY1VDQVBhdGgoaWN1U291cmNlRGF0YSwgZXJyb3JDb2RlKTsKKyAgICBmcmFjVUNBUGF0aC5hcHBlbmRQYXRoUGFydCgidW5pZGF0YSIsIGVycm9yQ29kZSk7CisgICAgZnJhY1VDQVBhdGguYXBwZW5kUGF0aFBhcnQoIkZyYWN0aW9uYWxVQ0EudHh0IiwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgc291cmNlRGF0YUluQ29sbChpY3VTb3VyY2VEYXRhLCBlcnJvckNvZGUpOworICAgIHNvdXJjZURhdGFJbkNvbGwuYXBwZW5kUGF0aFBhcnQoImluIiwgZXJyb3JDb2RlKTsKKyAgICBzb3VyY2VEYXRhSW5Db2xsLmFwcGVuZFBhdGhQYXJ0KCJjb2xsIiwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgc291cmNlSTE4bihpY3VTb3VyY2UsIGVycm9yQ29kZSk7CisgICAgc291cmNlSTE4bi5hcHBlbmRQYXRoUGFydCgiaTE4biIsIGVycm9yQ29kZSk7CisKKyAgICBlcnJvckNvZGUuYXNzZXJ0U3VjY2VzcygpOworCisgICAgcGFyc2VBbmRXcml0ZUNvbGxhdGlvblJvb3REYXRhKAorICAgICAgICBmcmFjVUNBUGF0aC5kYXRhKCksCisgICAgICAgIHNvdXJjZURhdGFJbkNvbGwuZGF0YSgpLAorICAgICAgICBzb3VyY2VJMThuLmRhdGEoKSwKKyAgICAgICAgZXJyb3JDb2RlKTsKKworICAgIHJldHVybiBlcnJvckNvZGU7Cit9CisKKyNlbmRpZiAgLy8gVUNPTkZJR19OT19DT0xMQVRJT04KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLnZjcHJvaiBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY5MTkzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EudmNwcm9qCkBAIC0wLDAgKzEsNDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJnZW51Y2EiCisJUHJvamVjdEdVSUQ9Ins4NjgyOTY5NC1BMzc1LTRDNTgtQjRFQS05NkVGNTE0RTMyMjV9IgorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4ODZcRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2XERlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgLi5cLi5cLi5cYmluJiN4MEQ7JiN4MEE7IgorCQkJCU91dHB1dHM9Ii4uXC4uXC4uXGJpblwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4ODZcRGVidWcvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlwuLlxpMThuOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDg2XERlYnVnL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4ODZcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg4NlxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4ODZcRGVidWcvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg4NlxEZWJ1Zy9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJCVVzZUZBVDMyV29ya2Fyb3VuZD0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IC4uXC4uXC4uXGJpbiYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW5cJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cY29tbW9uOy4uXC4uXGkxOG47Li5cdG9vbHV0aWwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg4NlxSZWxlYXNlL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlPYmplY3RGaWxlPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx4ODZcUmVsZWFzZS8iCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXHg2NFxEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4NjRcRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW42NCYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW42NFwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4NjRcRGVidWcvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlwuLlxpMThuOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU42NDtXSU4zMjtfREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDY0XERlYnVnL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg2NFxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4NjRcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcRGVidWcvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg2NFxEZWJ1Zy9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkJVXNlRkFUMzJXb3JrYXJvdW5kPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5ceDY0XFJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDY0XFJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW42NCYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW42NFwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EudGxiIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxjb21tb247Li5cLi5caTE4bjsuLlx0b29sdXRpbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lONjQ7V0lOMzI7TkRFQlVHO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDY0XFJlbGVhc2UvZ2VudWNhLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5ceDY0XFJlbGVhc2UvIgorCQkJCU9iamVjdEZpbGU9Ii5ceDY0XFJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxSZWxlYXNlLyIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW51Y2EuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCIKKwkJCT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisJCQk+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnV0czQ2L0NNYWtlTGlzdHMudHh0IGIvdW5pY29kZS9jL2dlbnV0czQ2L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzc4MmUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw5IEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjAzCisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisjIGVkaXRlZCBvbjogMjAxMGp1bDIwCisjIGVkaXRlZCBieTogU3R1YXJ0IEcuIEdpbGwKK2FkZF9leGVjdXRhYmxlKGdlbnV0czQ2IGdlbnV0czQ2LmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW51dHM0NiBpY3V1YyBpY3V0dSkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51dHM0Ni9nZW51dHM0Ni5jcHAgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODY0N2EKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuY3BwCkBAIC0wLDAgKzEsMzY0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGdlbnV0czQ2LmNwcAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDIwMTBtYXIwMgorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqCisqIHF1aWNrICYgZGlydHkgdG9vbCB0byByZWNyZWF0ZSB0aGUgVVRTICM0NiBkYXRhIHRhYmxlIGFjY29yZGluZyB0byB0aGUgc3BlYworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9lcnJvcmNvZGUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL25vcm1hbGl6ZXIyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzcHJlcC5oIgorI2luY2x1ZGUgInNwcnBpbXBsLmgiICAvLyBIQUNLCisKKy8qKgorICogaWN1OjpFcnJvckNvZGUgc3ViY2xhc3MgZm9yIGVhc3kgVUVycm9yQ29kZSBoYW5kbGluZy4KKyAqIFRoZSBkZXN0cnVjdG9yIGNhbGxzIGhhbmRsZUZhaWx1cmUoKSB3aGljaCBjYWxscyBleGl0KGVycm9yQ29kZSkgd2hlbiBpc0ZhaWx1cmUoKS4KKyAqLworY2xhc3MgRXhpdGluZ0Vycm9yQ29kZSA6IHB1YmxpYyBpY3U6OkVycm9yQ29kZSB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQHBhcmFtIGxvYyBBIHNob3J0IHN0cmluZyBkZXNjcmliaW5nIHdoZXJlIHRoZSBFeGl0aW5nRXJyb3JDb2RlIGlzIHVzZWQuCisgICAgICovCisgICAgRXhpdGluZ0Vycm9yQ29kZShjb25zdCBjaGFyICpsb2MpIDogbG9jYXRpb24obG9jKSB7fQorICAgIHZpcnR1YWwgfkV4aXRpbmdFcnJvckNvZGUoKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmFpbHVyZSgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyICpsb2NhdGlvbjsKK307CisKK0V4aXRpbmdFcnJvckNvZGU6On5FeGl0aW5nRXJyb3JDb2RlKCkgeworICAgIC8vIFNhZmUgYmVjYXVzZSBvdXIgaGFuZGxlRmFpbHVyZSgpIGRvZXMgbm90IHRocm93IGV4Y2VwdGlvbnMuCisgICAgaWYoaXNGYWlsdXJlKCkpIHsgaGFuZGxlRmFpbHVyZSgpOyB9Cit9CisKK3ZvaWQgRXhpdGluZ0Vycm9yQ29kZTo6aGFuZGxlRmFpbHVyZSgpIGNvbnN0IHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGF0ICVzOiAlc1xuIiwgbG9jYXRpb24sIGVycm9yTmFtZSgpKTsKKyAgICBleGl0KGVycm9yQ29kZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RvSUROQTIwMDMoY29uc3QgVVN0cmluZ1ByZXBQcm9maWxlICpwcmVwLCBVQ2hhcjMyIGMsIGljdTo6VW5pY29kZVN0cmluZyAmZGVzdFN0cmluZykgeworICAgIFVDaGFyIHNyY1syXTsKKyAgICBpbnQzMl90IHNyY0xlbmd0aD0wOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKHNyYywgc3JjTGVuZ3RoLCBjKTsKKyAgICBVQ2hhciAqZGVzdDsKKyAgICBpbnQzMl90IGRlc3RMZW5ndGg7CisgICAgZGVzdD1kZXN0U3RyaW5nLmdldEJ1ZmZlcigzMik7CisgICAgaWYoZGVzdD09TlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlPVVfWkVST19FUlJPUjsKKyAgICBkZXN0TGVuZ3RoPXVzcHJlcF9wcmVwYXJlKHByZXAsIHNyYywgc3JjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFN0cmluZy5nZXRDYXBhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNQUkVQX0RFRkFVTFQsIE5VTEwsICZlcnJvckNvZGUpOworICAgIGRlc3RTdHJpbmcucmVsZWFzZUJ1ZmZlcihkZXN0TGVuZ3RoKTsKKyAgICBpZihlcnJvckNvZGU9PVVfU1RSSU5HUFJFUF9QUk9ISUJJVEVEX0VSUk9SKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZXR1cm5zIEZBTFNFPTAgZm9yIFVfU1RSSU5HUFJFUF9VTkFTU0lHTkVEX0VSUk9SIGFuZCBwcm9jZXNzaW5nIGVycm9ycywKKyAgICAgICAgLy8gVFJVRT0xIGlmIGMgaXMgdmFsaWQgb3IgbWFwcGVkLgorICAgICAgICByZXR1cm4gVV9TVUNDRVNTKGVycm9yQ29kZSk7CisgICAgfQorfQorCitlbnVtIFN0YXR1cyB7CisgICAgRElTQUxMT1dFRCwgSUdOT1JFRCwgTUFQUEVELCBERVZJQVRJT04sIFZBTElELAorICAgIERJU0FMTE9XRURfU1REM19WQUxJRCwgRElTQUxMT1dFRF9TVEQzX01BUFBFRAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGF0dXNOYW1lc1tdPXsKKyAgICAiZGlzYWxsb3dlZCIsICJpZ25vcmVkIiwgIm1hcHBlZCIsICJkZXZpYXRpb24iLCAidmFsaWQiLAorICAgICJkaXNhbGxvd2VkX1NURDNfdmFsaWQiLCAiZGlzYWxsb3dlZF9TVEQzX21hcHBlZCIKK307CisKK3N0YXRpYyB2b2lkCitwcmludExpbmUoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsIFN0YXR1cyBzdGF0dXMsIGNvbnN0IGljdTo6VW5pY29kZVN0cmluZyAmbWFwcGluZykgeworICAgIGlmKHN0YXJ0PT1lbmQpIHsKKyAgICAgICAgcHJpbnRmKCIlMDRsWCAgICAgICAgICAiLCAobG9uZylzdGFydCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIlMDRsWC4uJTA0bFggICAgIiwgKGxvbmcpc3RhcnQsIChsb25nKWVuZCk7CisgICAgfQorICAgIHByaW50ZigiOyAlcyIsIHN0YXR1c05hbWVzW3N0YXR1c10pOworICAgIGlmKHN0YXR1cz09TUFQUEVEIHx8IHN0YXR1cz09REVWSUFUSU9OIHx8ICFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBwcmludGYoIiA7Iik7CisgICAgICAgIGNvbnN0IFVDaGFyICpidWZmZXI9bWFwcGluZy5nZXRCdWZmZXIoKTsKKyAgICAgICAgaW50MzJfdCBsZW5ndGg9bWFwcGluZy5sZW5ndGgoKTsKKyAgICAgICAgaW50MzJfdCBpPTA7CisgICAgICAgIFVDaGFyMzIgYzsKKyAgICAgICAgd2hpbGUoaTxsZW5ndGgpIHsKKyAgICAgICAgICAgIFUxNl9ORVhUKGJ1ZmZlciwgaSwgbGVuZ3RoLCBjKTsKKyAgICAgICAgICAgIHByaW50ZigiICUwNGxYIiwgKGxvbmcpYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHV0cygiIik7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRBZ2VJZkFzc2lnbmVkKFVDaGFyMzIgYywgVVZlcnNpb25JbmZvIGFnZSkgeworICAgIGlmKHVfaXNkZWZpbmVkKGMpKSB7CisgICAgICAgIHVfY2hhckFnZShjLCBhZ2UpOworICAgIH0gZWxzZSBpZihVX0lTX1VOSUNPREVfTk9OQ0hBUihjKSkgeworICAgICAgICBhZ2VbMF09MDsKKyAgICAgICAgYWdlWzFdPTA7CisgICAgICAgIGFnZVsyXT0wOworICAgICAgICBhZ2VbM109MTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1zZXQoYWdlLCAwLCA0KTsKKyAgICB9Cit9CisKK2V4dGVybiBpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgeworICAgIEV4aXRpbmdFcnJvckNvZGUgZXJyb3JDb2RlKCJnZW51dHM0NiIpOworCisgICAgLy8gcHJlZGVmaW5lZCBiYXNlIHNldHMKKyAgICBpY3U6OlVuaWNvZGVTZXQgdW5hc3NpZ25lZFNldChVTklDT0RFX1NUUklOR19TSU1QTEUoIls6Q246XSIpLCBlcnJvckNvZGUpOworCisgICAgaWN1OjpVbmljb2RlU2V0IGxhYmVsU2VwYXJhdG9ycygKKyAgICAgICAgVU5JQ09ERV9TVFJJTkdfU0lNUExFKCJbXFx1MDAyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0iKSwgZXJyb3JDb2RlKTsKKworICAgIGljdTo6VW5pY29kZVNldCBtYXBwZWRTZXQoCisgICAgICAgIFVOSUNPREVfU1RSSU5HX1NJTVBMRSgiWzpDaGFuZ2VzX1doZW5fTkZLQ19DYXNlZm9sZGVkOl0iKSwgZXJyb3JDb2RlKTsKKyAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKGxhYmVsU2VwYXJhdG9ycyk7ICAvLyBzaW1wbGlmaWVzIGNoZWNraW5nIG9mIG1hcHBlZCBjaGFyYWN0ZXJzCisKKyAgICBpY3U6OlVuaWNvZGVTZXQgYmFzZVZhbGlkU2V0KGljdTo6VW5pY29kZVN0cmluZygKKyAgICAgICAgIltbW1s6XkNoYW5nZXNfV2hlbl9ORktDX0Nhc2Vmb2xkZWQ6XSIKKyAgICAgICAgIi1bOkM6XS1bOlo6XSIKKyAgICAgICAgIi1bOkJsb2NrPUlkZW9ncmFwaGljX0Rlc2NyaXB0aW9uX0NoYXJhY3RlcnM6XV0iCisgICAgICAgICJbOmFzY2lpOl1dLVsuXV0iLCAtMSwgVVNfSU5WKSwgZXJyb3JDb2RlKTsKKworICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgZGlzYWxsb3dlZCB3aGVuIFNURDMgcnVsZXMgYXJlIGFwcGxpZWQsCisgICAgLy8gYnV0IHZhbGlkIHdoZW4gU1REMyBydWxlcyBhcmUgbm90IGFwcGxpZWQuCisgICAgaWN1OjpVbmljb2RlU2V0IGRpc2FsbG93ZWRTVEQzU2V0KGljdTo6VW5pY29kZVN0cmluZygKKyAgICAgICAgIltbOmFzY2lpOl0tW1xcdTAwMkQuYS16QS1aMC05XV0iLCAtMSwgVVNfSU5WKSwgZXJyb3JDb2RlKTsKKworICAgIGljdTo6VW5pY29kZVNldCBkZXZpYXRpb25TZXQoCisgICAgICAgIFVOSUNPREVfU1RSSU5HX1NJTVBMRSgiW1xcdTAwREZcXHUwM0MyXFx1MjAwQ1xcdTIwMERdIiksIGVycm9yQ29kZSk7CisgICAgZXJyb3JDb2RlLmFzc2VydFN1Y2Nlc3MoKTsKKworICAgIC8vIGRlcml2ZWQgc2V0cworICAgIGljdTo6TG9jYWxVU3RyaW5nUHJlcFByb2ZpbGVQb2ludGVyIG5hbWVQcmVwKHVzcHJlcF9vcGVuQnlUeXBlKFVTUFJFUF9SRkMzNDkxX05BTUVQUkVQLCBlcnJvckNvZGUpKTsKKyAgICBjb25zdCBpY3U6Ok5vcm1hbGl6ZXIyICpuZmtjX2NmPQorICAgICAgICBpY3U6Ok5vcm1hbGl6ZXIyOjpnZXRJbnN0YW5jZShOVUxMLCAibmZrY19jZiIsIFVOT1JNMl9DT01QT1NFLCBlcnJvckNvZGUpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICAvLyBIQUNLOiBUaGUgU3RyaW5nUHJlcCBBUEkgcGVyZm9ybXMgYSBCaURpIGNoZWNrIGFjY29yZGluZyB0byB0aGUgZGF0YS4KKyAgICAvLyBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoYXQgZm9yIHRoaXMgZGF0YSBnZW5lcmF0aW9uLCBieSByZXNldHRpbmcgYW4gaW50ZXJuYWwgZmxhZy4KKyAgICBuYW1lUHJlcC0+Y2hlY2tCaURpPUZBTFNFOworCisgICAgaWN1OjpVbmljb2RlU2V0IGJhc2VFeGNsdXNpb25TZXQ7CisgICAgaWN1OjpVbmljb2RlU3RyaW5nIGNTdHJpbmcsIG1hcHBpbmcsIG5hbWVQcmVwUmVzdWx0OworICAgIGZvcihVQ2hhcjMyIGM9MDsgYzw9MHgxMGZmZmY7ICsrYykgeworICAgICAgICBpZihjPT0weGQ4MDApIHsKKyAgICAgICAgICAgIGM9MHhlMDAwOworICAgICAgICB9CisgICAgICAgIGludCBuYW1lUHJlcFN0YXR1cz10b0lETkEyMDAzKG5hbWVQcmVwLmdldEFsaWFzKCksIGMsIG5hbWVQcmVwUmVzdWx0KTsKKyAgICAgICAgaWYobmFtZVByZXBTdGF0dXMhPTApIHsKKyAgICAgICAgICAgIC8vIGdldCB0aGUgVVRTICM0NiBiYXNlIG1hcHBpbmcgdmFsdWUKKyAgICAgICAgICAgIHN3aXRjaChjKSB7CisgICAgICAgICAgICBjYXNlIDB4ZmYwZToKKyAgICAgICAgICAgIGNhc2UgMHgzMDAyOgorICAgICAgICAgICAgY2FzZSAweGZmNjE6CisgICAgICAgICAgICAgICAgbWFwcGluZy5zZXRUbygweDJlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY1N0cmluZy5zZXRUbyhjKTsKKyAgICAgICAgICAgICAgICBuZmtjX2NmLT5ub3JtYWxpemUoY1N0cmluZywgbWFwcGluZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKAorICAgICAgICAgICAgICAgIG5hbWVQcmVwU3RhdHVzPjAgPworICAgICAgICAgICAgICAgICAgICAvLyBjIGlzIHZhbGlkIG9yIG1hcHBlZCBpbiBJRE5BMjAwMworICAgICAgICAgICAgICAgICAgICAhbGFiZWxTZXBhcmF0b3JzLmNvbnRhaW5zKGMpICYmIG5hbWVQcmVwUmVzdWx0IT1tYXBwaW5nIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gbmFtZVByZXBTdGF0dXM8MDogYyBpcyBwcm9oaWJpdGVkIGluIElETkEyMDAzCisgICAgICAgICAgICAgICAgICAgIGJhc2VWYWxpZFNldC5jb250YWlucyhjKSB8fCAoY1N0cmluZyE9bWFwcGluZyAmJiBiYXNlVmFsaWRTZXQuY29udGFpbnNBbGwobWFwcGluZykpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBiYXNlRXhjbHVzaW9uU2V0LmFkZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGljdTo6VW5pY29kZVNldCBkaXNhbGxvd2VkU2V0KDAsIDB4MTBmZmZmKTsKKyAgICBkaXNhbGxvd2VkU2V0LgorICAgICAgICByZW1vdmVBbGwobGFiZWxTZXBhcmF0b3JzKS4KKyAgICAgICAgcmVtb3ZlQWxsKGRldmlhdGlvblNldCkuCisgICAgICAgIHJlbW92ZUFsbChtYXBwZWRTZXQpLgorICAgICAgICByZW1vdmVBbGwoYmFzZVZhbGlkU2V0KS4KKyAgICAgICAgYWRkQWxsKGJhc2VFeGNsdXNpb25TZXQpLgorICAgICAgICBhZGRBbGwodW5hc3NpZ25lZFNldCk7CisKKyAgICBjb25zdCBpY3U6Ok5vcm1hbGl6ZXIyICpuZmQ9CisgICAgICAgIGljdTo6Tm9ybWFsaXplcjI6OmdldEluc3RhbmNlKE5VTEwsICJuZmMiLCBVTk9STTJfREVDT01QT1NFLCBlcnJvckNvZGUpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICBpY3U6OlVuaWNvZGVTZXQgaWdub3JlZFNldDsgIC8vIHdpbGwgYmUgYSBzdWJzZXQgb2YgbWFwcGVkU2V0CisgICAgaWN1OjpVbmljb2RlU2V0IHJlbW92ZVNldDsKKyAgICBpY3U6OlVuaWNvZGVTdHJpbmcgbmZkU3RyaW5nOworICAgIHsKKyAgICAgICAgaWN1OjpVbmljb2RlU2V0SXRlcmF0b3IgaXRlcihtYXBwZWRTZXQpOworICAgICAgICB3aGlsZShpdGVyLm5leHQoKSkgeworICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICBjU3RyaW5nLnNldFRvKGMpOworICAgICAgICAgICAgbmZrY19jZi0+bm9ybWFsaXplKGNTdHJpbmcsIG1hcHBpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBpZighYmFzZVZhbGlkU2V0LmNvbnRhaW5zQWxsKG1hcHBpbmcpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIG1hcHBlZCAtPiBkaXNhbGxvd2VkOiBtYXBwaW5nIG5vdCB3aG9sbHkgaW4gYmFzZSB2YWxpZCBzZXRcbiIsIChsb25nKWMpOworICAgICAgICAgICAgICAgIGRpc2FsbG93ZWRTZXQuYWRkKGMpOworICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICB9IGVsc2UgaWYobWFwcGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZ25vcmVkU2V0LmFkZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKHJlbW92ZVNldCk7CisgICAgfQorICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICBpY3U6OlVuaWNvZGVTZXQgdmFsaWRTZXQoYmFzZVZhbGlkU2V0KTsKKyAgICB2YWxpZFNldC4KKyAgICAgICAgcmVtb3ZlQWxsKGxhYmVsU2VwYXJhdG9ycykuICAvLyBub24tQVNDSUkgbGFiZWwgc2VwYXJhdG9ycyB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgZW5kCisgICAgICAgIHJlbW92ZUFsbChkZXZpYXRpb25TZXQpLgorICAgICAgICByZW1vdmVBbGwoZGlzYWxsb3dlZFNldCkuCisgICAgICAgIHJlbW92ZUFsbChtYXBwZWRTZXQpLgorICAgICAgICBhZGQoMHgyZSk7ICAvLyBub3QgbWFwcGVkLCBzaW1wbHkgdmFsaWQKKyAgICBVQm9vbCBtYWRlQ2hhbmdlOworICAgIGRvIHsKKyAgICAgICAgbWFkZUNoYW5nZT1GQUxTRTsKKyAgICAgICAgeworICAgICAgICAgICAgcmVtb3ZlU2V0LmNsZWFyKCk7CisgICAgICAgICAgICBpY3U6OlVuaWNvZGVTZXRJdGVyYXRvciBpdGVyKHZhbGlkU2V0KTsKKyAgICAgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICAgICAgaWYobmZkLT5nZXREZWNvbXBvc2l0aW9uKGMsIG5mZFN0cmluZykgJiYgIXZhbGlkU2V0LmNvbnRhaW5zQWxsKG5mZFN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIHZhbGlkIC0+IGRpc2FsbG93ZWQ6IE5GRCBub3Qgd2hvbGx5IHZhbGlkXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dlZFNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIG1hZGVDaGFuZ2U9VFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWxpZFNldC5yZW1vdmVBbGwocmVtb3ZlU2V0KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICByZW1vdmVTZXQuY2xlYXIoKTsKKyAgICAgICAgICAgIGljdTo6VW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIobWFwcGVkU2V0KTsKKyAgICAgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICAgICAgY1N0cmluZy5zZXRUbyhjKTsKKyAgICAgICAgICAgICAgICBuZmtjX2NmLT5ub3JtYWxpemUoY1N0cmluZywgbWFwcGluZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBuZmQtPm5vcm1hbGl6ZShtYXBwaW5nLCBuZmRTdHJpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgaWYoIXZhbGlkU2V0LmNvbnRhaW5zQWxsKG5mZFN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIG1hcHBlZCAtPiBkaXNhbGxvd2VkOiBORkQgb2YgbWFwcGluZyBub3Qgd2hvbGx5IHZhbGlkXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dlZFNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIG1hZGVDaGFuZ2U9VFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKHJlbW92ZVNldCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlKG1hZGVDaGFuZ2UpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICAvLyBmaW5pc2ggdXAKKyAgICBsYWJlbFNlcGFyYXRvcnMucmVtb3ZlKDB4MmUpLmZyZWV6ZSgpOyAgLy8gVSswMDJFIGlzIHNpbXBseSB2YWxpZAorICAgIGRldmlhdGlvblNldC5mcmVlemUoKTsKKyAgICBpZ25vcmVkU2V0LmZyZWV6ZSgpOworICAgIHZhbGlkU2V0LmZyZWV6ZSgpOworICAgIG1hcHBlZFNldC5mcmVlemUoKTsKKyAgICBkaXNhbGxvd2VkU1REM1NldC5mcmVlemUoKTsKKworICAgIC8vIG91dHB1dAorICAgIFVDaGFyMzIgcHJldlN0YXJ0PTAsIGM9MDsKKyAgICBTdGF0dXMgcHJldlN0YXR1cz1ESVNBTExPV0VEX1NURDNfVkFMSUQsIHN0YXR1czsKKyAgICBpY3U6OlVuaWNvZGVTdHJpbmcgcHJldk1hcHBpbmc7CisgICAgVVZlcnNpb25JbmZvIHByZXZBZ2U9eyAxLCAxLCAwLCAwIH0sIGFnZTsKKworICAgIGljdTo6VW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIoZGlzYWxsb3dlZFNldCk7CisgICAgd2hpbGUoaXRlci5uZXh0UmFuZ2UoKSkgeworICAgICAgICBVQ2hhcjMyIHN0YXJ0PWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgIHdoaWxlKGM8c3RhcnQpIHsKKyAgICAgICAgICAgIG1hcHBpbmcucmVtb3ZlKCk7CisgICAgICAgICAgICBpZihsYWJlbFNlcGFyYXRvcnMuY29udGFpbnMoYykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXM9TUFQUEVEOworICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0VG8oMHgyZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYoZGV2aWF0aW9uU2V0LmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzPURFVklBVElPTjsKKyAgICAgICAgICAgICAgICBjU3RyaW5nLnNldFRvKGMpOworICAgICAgICAgICAgICAgIG5ma2NfY2YtPm5vcm1hbGl6ZShjU3RyaW5nLCBtYXBwaW5nLCBlcnJvckNvZGUpOworICAgICAgICAgICAgfSBlbHNlIGlmKGlnbm9yZWRTZXQuY29udGFpbnMoYykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXM9SUdOT1JFRDsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWxpZFNldC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgIGlmKGRpc2FsbG93ZWRTVEQzU2V0LmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVSslMDRsWCB2YWxpZCAtPiBkaXNhbGxvd2VkX1NURDNfdmFsaWQ6IGl0c2VsZiBub3QgU1REM1xuIiwgKGxvbmcpYyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1ESVNBTExPV0VEX1NURDNfVkFMSUQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCBuZmQtPmdldERlY29tcG9zaXRpb24oYywgbmZkU3RyaW5nKSAmJgorICAgICAgICAgICAgICAgICAgICBkaXNhbGxvd2VkU1REM1NldC5jb250YWluc1NvbWUobmZkU3RyaW5nKQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlUrJTA0bFggdmFsaWQgLT4gZGlzYWxsb3dlZF9TVEQzX3ZhbGlkOiBORkQgbm90IHdob2xseSBTVEQzXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzPURJU0FMTE9XRURfU1REM19WQUxJRDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXM9VkFMSUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmKG1hcHBlZFNldC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgIGNTdHJpbmcuc2V0VG8oYyk7CisgICAgICAgICAgICAgICAgbmZrY19jZi0+bm9ybWFsaXplKGNTdHJpbmcsIG1hcHBpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgaWYoZGlzYWxsb3dlZFNURDNTZXQuY29udGFpbnNTb21lKG1hcHBpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVSslMDRsWCBtYXBwZWQgLT4gZGlzYWxsb3dlZF9TVEQzX21hcHBlZFxuIiwgKGxvbmcpYyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1ESVNBTExPV0VEX1NURDNfTUFQUEVEOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1NQVBQRUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiB1bmRldGVybWluZWQgc3RhdHVzIG9mIFUrJTA0bFhcbiIsIChsb25nKWMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUHJpbnQgYSBuZXcgbGluZSB3aGVyZSB0aGUgc3RhdHVzLCB0aGUgbWFwcGluZyBvcgorICAgICAgICAgICAgLy8gdGhlIGNoYXJhY3RlciBhZ2UgY2hhbmdlLgorICAgICAgICAgICAgZ2V0QWdlSWZBc3NpZ25lZChjLCBhZ2UpOworICAgICAgICAgICAgaWYoIHByZXZTdGFydDxjICYmCisgICAgICAgICAgICAgICAgKHN0YXR1cyE9cHJldlN0YXR1cyB8fCBtYXBwaW5nIT1wcmV2TWFwcGluZyB8fCAwIT1tZW1jbXAocHJldkFnZSwgYWdlLCA0KSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgICAgICAgICAgICAgIHByZXZTdGFydD1jOworICAgICAgICAgICAgICAgIHByZXZTdGF0dXM9c3RhdHVzOworICAgICAgICAgICAgICAgIHByZXZNYXBwaW5nPW1hcHBpbmc7CisgICAgICAgICAgICAgICAgbWVtY3B5KHByZXZBZ2UsIGFnZSwgNCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2M7CisgICAgICAgIH0KKyAgICAgICAgLy8gYz09c3RhcnQgaXMgZGlzYWxsb3dlZAorICAgICAgICBpZihwcmV2U3RhcnQ8YykgeworICAgICAgICAgICAgcHJpbnRMaW5lKHByZXZTdGFydCwgYy0xLCBwcmV2U3RhdHVzLCBwcmV2TWFwcGluZyk7CisgICAgICAgIH0KKyAgICAgICAgcHJldlN0YXJ0PWM7CisgICAgICAgIHByZXZTdGF0dXM9RElTQUxMT1dFRDsKKyAgICAgICAgcHJldk1hcHBpbmcucmVtb3ZlKCk7CisgICAgICAgIGdldEFnZUlmQXNzaWduZWQoYywgcHJldkFnZSk7CisgICAgICAgIFVDaGFyMzIgZW5kPWl0ZXIuZ2V0Q29kZXBvaW50RW5kKCk7CisgICAgICAgIHdoaWxlKCsrYzw9ZW5kKSB7CisgICAgICAgICAgICBnZXRBZ2VJZkFzc2lnbmVkKGMsIGFnZSk7CisgICAgICAgICAgICBpZihwcmV2U3RhcnQ8YyAmJiAwIT1tZW1jbXAocHJldkFnZSwgYWdlLCA0KSkgeworICAgICAgICAgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgICAgICAgICAgICAgIHByZXZTdGFydD1jOworICAgICAgICAgICAgICAgIG1lbWNweShwcmV2QWdlLCBhZ2UsIDQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKHByZXZTdGFydDxjKSB7CisgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51dHM0Ni9nZW51dHM0Ni5zbG4gYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGExMzAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuc2xuCkBAIC0wLDAgKzEsMjAgQEAKK++7vworTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDAKKyMgVmlzdWFsIEMrKyBFeHByZXNzIDIwMDgKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VudXRzNDYiLCAiZ2VudXRzNDYudmNwcm9qIiwgInsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMgorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7MjBGOUYxQjEtRTM2Mi00QTRELTg0QkEtNTQ4NTU3NzQ1Q0Q5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MjBGOUYxQjEtRTM2Mi00QTRELTg0QkEtNTQ4NTU3NzQ1Q0Q5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezIwRjlGMUIxLUUzNjItNEE0RC04NEJBLTU0ODU1Nzc0NUNEOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYudmNwcm9qIGIvdW5pY29kZS9jL2dlbnV0czQ2L2dlbnV0czQ2LnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTRmODQzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnV0czQ2L2dlbnV0czQ2LnZjcHJvagpAQCAtMCwwICsxLDE4MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjkuMDAiCisJTmFtZT0iZ2VudXRzNDYiCisJUHJvamVjdEdVSUQ9InsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9IgorCVJvb3ROYW1lc3BhY2U9ImdlbnV0czQ2IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcaW5jbHVkZSwgLi5cLi5cLi5cLi5cLi5caWN1XHRydW5rXHNvdXJjZVxjb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlVfVVNJTkdfSUNVX05BTUVTUEFDRT0wIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpY3V1Y2QubGliIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcbGliIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXC4uXC4uXGljdVx0cnVua1xpbmNsdWRlLCAuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcc291cmNlXGNvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iVV9VU0lOR19JQ1VfTkFNRVNQQUNFPTAiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iaWN1dWMubGliIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcbGliIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VudXRzNDYuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS91bmljb2RlL2MvcmVhZG1lLnR4dCBiL3VuaWNvZGUvYy9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWEzMDIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvcmVhZG1lLnR4dApAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjA0CisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisKK1RoZXNlIHRvb2xzIHBhcnNlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGVzIGFuZCBnZW5lcmF0ZQorZGF0YSBmaWxlcyAodGV4dCwgc291cmNlIGNvZGUgYW5kIGJpbmFyeSkgZm9yIHVzZSBpbiBJQ1UuCitUaGV5IGFyZSB1c2VkIGR1cmluZyB0aGUgVW5pY29kZSBiZXRhIHBlcmlvZCBhbmQgYWZ0ZXIgYSBVbmljb2RlIHJlbGVhc2UuCisKK0ZvciBhIGxvZyBvZiBhY3Rpb25zIGFuZCBjaGFuZ2VzIGZvciByZWNlbnQgVW5pY29kZSB2ZXJzaW9uIHVwZ3JhZGVzIG9mIElDVSwgc2VlCitodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy9icm93c2VyL2ljdS90cnVuay9zb3VyY2UvZGF0YS91bmlkYXRhL2NoYW5nZXMudHh0CisKK1NpbmNlIHRoZSBVbmljb2RlIDUuMiB1cGdyYWRlLCB0aGVzZSB0b29scyBoYXZlIGJlZW4gbW92ZWQgb3V0IG9mIHRoZSBJQ1Ugc291cmNlCit0cmVlIHRvIGhlcmUuIFRoZXkgaGF2ZSBub3QgYmVlbiBmdWxseSB0ZXN0ZWQgYW5kIHByb2JhYmx5IG5lZWQgc29tZSBtb3JlIHdvcmsKK2FuZCBzZXR1cC4gVGhleSBtaWdodCBiZW5lZml0IGZyb20gYWRkaXRpb25hbCBzaGVsbCBvciBQeXRob24gc2NyaXB0cy4KKworVGhlcmUgYXJlIGF1dG9jb25mIG1ha2VmaWxlcyAoTWFrZWZpbGUuaW4pIGFuZCBWaXN1YWwgQysrIHByb2plY3QgZmlsZXMgKC52Y3Byb2opCitpbiB0aGUgc3ViZm9sZGVycy4gVGhleSBhcmUgY29waWVkIG92ZXIgZnJvbSB0aGUgSUNVIHNvdXJjZSB0cmVlIGFuZCB3aWxsIG5vdAord29yayB3aXRob3V0IG1vZGlmaWNhdGlvbnMuIEhvd2V2ZXIsIEkgc3RhcnRlZCB0byB1c2UgQ01ha2UgKENNYWtlTGlzdHMudHh0KQord2hpY2ggaXMgbXVjaCBzaW1wbGVyLCBhbmQgaWYgaXQgd29ya3Mgd2VsbCBlbm91Z2ggdGhlbiBJIHBsYW4gdG8ganVzdAorZGVsZXRlIHRoZSBvbGQgbWFrZWZpbGVzIGFuZCBwcm9qZWN0IGZpbGVzLiBUaGUgQ01ha2UgZmlsZXMgc2hvdWxkCit3b3JrIG9uIExpbnV4IGFuZCBNYWNPUyBYLgorSSBzaG91bGQgdXNlIG1vcmUgdmFyaWFibGVzIHRvIG1ha2UgdGhlIENNYWtlIGZpbGVzIG1vcmUgcG9ydGFibGUsIGFuZCBzaG91bGQKK3VzZSBJQ1UncyBpbnN0YWxsZWQgaWN1LWNvbmZpZyBvciBNYWtlZmlsZS5pbmMgdG8gZ2V0IHRoZSB2YWx1ZXMgZm9yIHRoZXNlCit2YXJpYWJsZXMuCisoSWYgYW5kIHdoZW4gSUNVIGl0c2VsZiB1c2VzIENNYWtlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBwb2ludCB0byBpdHMgbW9kdWxlcy4pCisKK1RoaW5ncyB3aWxsIGltcHJvdmUgYXMgSSB3b3JrIG9uIFVuaWNvZGUgNi4uLgorCittYXJrdXMKZGlmZiAtLWdpdCBhL3VuaWNvZGUvcHkvcGFyc2VzY3JpcHRtZXRhZGF0YS5weSBiL3VuaWNvZGUvcHkvcGFyc2VzY3JpcHRtZXRhZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjgyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9weS9wYXJzZXNjcmlwdG1ldGFkYXRhLnB5CkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBwYXJzZXNjcmlwdG1ldGFkYXRhLnB5CisjCisjIDIwMTNmZWIxNSBNYXJrdXMgVy4gU2NoZXJlcgorIworIyAuL3BhcnNlc2NyaXB0bWV0YWRhdGEucHkKKyMgICB+L3N2bi5pY3UvdHJ1bmsvc3JjL3NvdXJjZS9jb21tb24vdW5pY29kZS91c2NyaXB0LmgKKyMgICB+L3N2bi5jbGRyL3RydW5rL2NvbW1vbi9wcm9wZXJ0aWVzL3NjcmlwdE1ldGFkYXRhLnR4dAorCisiIiJQYXJzZXMgSUNVNEMgdXNjcmlwdC5oICYgQ0xEUiBzY3JpcHRNZXRhZGF0YS50eHQsCithbmQgd3JpdGVzIElDVSBzY3JpcHQgZGF0YSBpbml0aWFsaXplcnMuIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitkZWYgbWFpbigpOgorICBpZiBsZW4oc3lzLmFyZ3YpIDwgMzoKKyAgICBwcmludCAoIlVzYWdlOiB7fSAgcGF0aC90by9JQ1U0Qy91c2NyaXB0LmggICIKKyAgICAgICAgICAgInBhdGgvdG8vQ0xEUi9zY3JpcHRNZXRhZGF0YS50eHQiLmZvcm1hdChzeXMuYXJndlswXSkpCisgICAgcmV0dXJuCisgICh1c2NyaXB0X3BhdGgsIHNtZF9wYXRoKSA9IHN5cy5hcmd2WzE6M10KKworICBpc29fdG9faWN1ID0ge30KKyAgbWF4X2ljdV9udW0gPSAwCisKKyAgIyBQYXJzZSBsaW5lcyBsaWtlCisgICMgICBVU0NSSVBUX0FSQUJJQyAgICAgICA9ICAyLCAgLyogQXJhYiAqLworICAjIGFuZCBleHRyYWN0IHRoZSBJQ1UgbnVtZXJpYyBzY3JpcHQgY29kZSBhbmQgdGhlIElTTyBzY3JpcHQgY29kZS4KKyAgc2NyaXB0X251bV9yZSA9IHJlLmNvbXBpbGUociIgKj0gKihbMC05XSspLCAqL1wqICooW0EtWl1bYS16XXszfSkgKlwqLyIpCisgIHdpdGggb3Blbih1c2NyaXB0X3BhdGgsICJyIikgYXMgdXNjcmlwdF9maWxlOgorICAgIGZvciBsaW5lIGluIHVzY3JpcHRfZmlsZToKKyAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIik6IGNvbnRpbnVlICAjIHdob2xlLWxpbmUgY29tbWVudAorICAgICAgbWF0Y2ggPSBzY3JpcHRfbnVtX3JlLnNlYXJjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIGljdV9udW0gPSBpbnQobWF0Y2guZ3JvdXAoMSkpCisgICAgICAgIGlzb190b19pY3VbbWF0Y2guZ3JvdXAoMildID0gaWN1X251bQorICAgICAgICBpZiBpY3VfbnVtID4gbWF4X2ljdV9udW06IG1heF9pY3VfbnVtID0gaWN1X251bQorCisgIGljdV9kYXRhID0gW05vbmVdICogKG1heF9pY3VfbnVtICsgMSkKKworICAjIFBhcnNlIGxpbmVzIGxpa2UKKyAgIyAgIEFyYWI7IDg7IDA2Mjg7IFNBOyAxOyBSRUNPTU1FTkRFRDsgWUVTOyBOTzsgWUVTOyBOTzsgTk8KKyAgIyBhbmQgcHV0IHRoZSBkYXRhIChhcyBzdHJpbmdzKSBpbnRvIHRoZSBpY3VfZGF0YSBsaXN0LgorICB3aXRoIG9wZW4oc21kX3BhdGgsICJyIikgYXMgc21kX2ZpbGU6CisgICAgZm9yIGxpbmUgaW4gc21kX2ZpbGU6CisgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyIpOiBjb250aW51ZSAgIyB3aG9sZS1saW5lIGNvbW1lbnQKKworICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgiOyIpCisgICAgICBpZiBub3QgZmllbGRzIG9yIGxlbihmaWVsZHMpIDwgMTE6IGNvbnRpbnVlCisgICAgICBpc29fY29kZSA9IGZpZWxkc1swXS5zdHJpcCgpCisgICAgICBpY3VfbnVtID0gaXNvX3RvX2ljdVtpc29fY29kZV0KKyAgICAgIGljdV9kYXRhW2ljdV9udW1dID0gKGlzb19jb2RlLAorICAgICAgICAgICMgc2FtcGxlLCB1c2FnZQorICAgICAgICAgIGZpZWxkc1syXS5zdHJpcCgpLCBmaWVsZHNbNV0uc3RyaXAoKSwKKyAgICAgICAgICAjIFJUTCwgTEIsIGNhc2VkCisgICAgICAgICAgZmllbGRzWzZdLnN0cmlwKCksIGZpZWxkc1s3XS5zdHJpcCgpLCBmaWVsZHNbMTBdLnN0cmlwKCkpCisKKyAgIyBQcmludCBJQ1UgYXJyYXkgaW5pdGlhbGl6ZXJzIHdpdGggdGhlIHJlbGV2YW50IGRhdGEuCisgIGZvciB0IGluIGljdV9kYXRhOgorICAgIGlmIHQ6CisgICAgICAoaXNvX2NvZGUsIHNhbXBsZSwgdXNhZ2UsIHJ0bCwgbGIsIGNhc2VkKSA9IHQKKyAgICAgIHMgPSAiMHgiICsgc2FtcGxlICsgIiB8ICIgKyB1c2FnZQorICAgICAgaWYgcnRsID09ICJZRVMiOiBzICs9ICIgfCBSVEwiCisgICAgICBpZiBsYiA9PSAiWUVTIjogcyArPSAiIHwgTEJfTEVUVEVSUyIKKyAgICAgIGlmIGNhc2VkID09ICJZRVMiOiBzICs9ICIgfCBDQVNFRCIKKyAgICAgIHByaW50ICIgICAgIiArIHMgKyAiLCAgLy8gIiArIGlzb19jb2RlCisgICAgZWxzZToKKyAgICAgIHByaW50ICIgICAgMCwiCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgbWFpbigpCmRpZmYgLS1naXQgYS91bmljb2RlL3B5L3ByZXBhcnNldWNkLnB5IGIvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjhkNWJkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQpAQCAtMCwwICsxLDIxMzAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgZmlsZSBuYW1lOiAgcHJlcGFyc2V1Y2QucHkKKyMgICBlbmNvZGluZzogICBVUy1BU0NJSQorIyAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorIyAgIGluZGVudGF0aW9uOjQKKyMKKyMgICBjcmVhdGVkIG9uOiAyMDExbm92MDMgKGZvcmtlZCBmcm9tIHVjZGNvcHkucHkpCisjICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyMKKyMgQ29waWVzIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIGZpbGVzIGZyb20gYSB0cmVlCisjIG9mIGZpbGVzIGRvd25sb2FkZWQgZnJvbSAoZm9yIGV4YW1wbGUpIGZ0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvCisjIHRvIElDVSdzIHNvdXJjZS9kYXRhL3VuaWRhdGEvIGFuZCBzb3VyY2UvdGVzdC90ZXN0ZGF0YS8KKyMgYW5kIG1vZGlmaWVzIHNvbWUgb2YgdGhlIGZpbGVzIHRvIG1ha2UgdGhlbSBtb3JlIGNvbXBhY3QuCisjIFBhcnNlcyB0aGVtIGFuZCB3cml0ZXMgdW5pZGF0YS9wcHVjZC50eHQgKFByZVBhcnNlZCBVQ0QpIHdpdGggc2ltcGxlIHN5bnRheC4KKyMKKyMgSW52b2tlIHdpdGggdGhyZWUgY29tbWFuZC1saW5lIHBhcmFtZXRlcnM6CisjIDEuIHNvdXJjZSBmb2xkZXIgd2l0aCBVQ0QgJiBpZG5hIGZpbGVzCisjIDIuIElDVSBzb3VyY2Ugcm9vdCBmb2xkZXIKKyMgMy4gSUNVIHRvb2xzIHJvb3QgZm9sZGVyCisjCisjIFNhbXBsZSBpbnZvY2F0aW9uOgorIyAgIH4vc3ZuLmljdS90b29scy90cnVuay9zcmMvdW5pY29kZSQgcHkvcHJlcGFyc2V1Y2QucHkgfi91bmk2MS8yMDEyMDExOCB+L3N2bi5pY3UvdHJ1bmsvc3JjIH4vc3ZuLmljdS90b29scy90cnVuay9zcmMKKworaW1wb3J0IGFycmF5CitpbXBvcnQgYmlzZWN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworCisjIFVuaWNvZGUgdmVyc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfdWNkX3ZlcnNpb24gPSAiPyIKK19jb3B5cmlnaHQgPSAiIgorX3Rlcm1zX29mX3VzZSA9ICIiCitfY3VycmVudF95ZWFyID0gZGF0ZXRpbWUuZGF0ZS50b2RheSgpLnN0cmZ0aW1lKCIlWSIpCisKKyMgSVNPIDE1OTI0IHNjcmlwdCBjb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKKyMgU2NyaXB0IGNvZGVzIGZyb20gSVNPIDE1OTI0IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvaXNvMTU5MjQvY29kZWNoYW5nZXMuaHRtbAorIyB0aGF0IGFyZSBub3QgeWV0IGluIHRoZSBVQ0QuCitfc2NyaXB0c19vbmx5X2luX2lzbzE1OTI0ID0gKAorICAgICJBZmFrIiwgIkJsaXMiLCAiQ2lydCIsICJDeXJzIiwKKyAgICAiRWd5ZCIsICJFZ3loIiwgIkdlb2siLAorICAgICJIYW5zIiwgIkhhbnQiLAorICAgICJJbmRzIiwgIkpwYW4iLCAiSnVyYyIsICJLb3JlIiwgIktwZWwiLCAiTGF0ZiIsICJMYXRnIiwgIkxvbWEiLAorICAgICJNYXlhIiwgIk1vb24iLCAiTmtnYiIsICJOc2h1IiwgIlBobHYiLCAiUm9ybyIsCisgICAgIlNhcmEiLCAiU3lyZSIsICJTeXJqIiwgIlN5cm4iLAorICAgICJUYW5nIiwgIlRlbmciLCAiVmlzcCIsICJXb2xlIiwgIlptdGgiLCAiWnN5bSIsICJaeHh4IgorKQorCisjIFByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfaWdub3JlZF9wcm9wZXJ0aWVzID0gc2V0KCgKKyAgIyBPdGhlcl9YeXogb25seSBjb250cmlidXRlIHRvIFh5eiwgc3RvcmUgb25seSB0aGUgbGF0dGVyLgorICAiT0FscGhhIiwKKyAgIk9ESSIsCisgICJPR3JfRXh0IiwKKyAgIk9JREMiLAorICAiT0lEUyIsCisgICJPTG93ZXIiLAorICAiT01hdGgiLAorICAiT1VwcGVyIiwKKyAgIyBGdXJ0aGVyIHByb3BlcnRpZXMgdGhhdCBqdXN0IGNvbnRyaWJ1dGUgdG8gb3RoZXJzLgorICAiQ0UiLCAgIyBDb21wb3NpdGlvbl9FeGNsdXNpb24ganVzdCBjb250cmlidXRlcyB0byBGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbi4KKyAgIkpTTiIsCisgICMgVGhlc2UgcHJvcGVydGllcyBqdXN0IGRvbid0IHNlZW0gdXNlZnVsLgorICAjIFRoZXkgYXJlIGRlcHJlY2F0ZWQgc2luY2UgVW5pY29kZSA2LjAuCisgICJYT19ORkMiLAorICAiWE9fTkZEIiwKKyAgIlhPX05GS0MiLAorICAiWE9fTkZLRCIsCisgICMgSUNVIGRvZXMgbm90IHVzZSBVbmloYW4gcHJvcGVydGllcy4KKyAgImNqa0FjY291bnRpbmdOdW1lcmljIiwKKyAgImNqa090aGVyTnVtZXJpYyIsCisgICJjamtQcmltYXJ5TnVtZXJpYyIsCisgICJjamtDb21wYXRpYmlsaXR5VmFyaWFudCIsCisgICJjamtJSUNvcmUiLAorICAiY2prSVJHX0dTb3VyY2UiLAorICAiY2prSVJHX0hTb3VyY2UiLAorICAiY2prSVJHX0pTb3VyY2UiLAorICAiY2prSVJHX0tQU291cmNlIiwKKyAgImNqa0lSR19LU291cmNlIiwKKyAgImNqa0lSR19NU291cmNlIiwKKyAgImNqa0lSR19UU291cmNlIiwKKyAgImNqa0lSR19VU291cmNlIiwKKyAgImNqa0lSR19WU291cmNlIiwKKyAgImNqa1JTVW5pY29kZSIKKykpCisKKyMgRGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLgorIyBLZXllZCBieSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWVzIGFuZCBhbGlhc2VzLgorIyBFYWNoIHZhbHVlIGlzIGEgdHVwbGUgd2l0aAorIyAwOiBUeXBlIG9mIHByb3BlcnR5IChiaW5hcnksIGVudW0sIC4uLikKKyMgMTogTGlzdCBvZiBhbGlhc2VzOyBzaG9ydCAmIGxvbmcgbmFtZSBmb2xsb3dlZCBieSBvdGhlciBhbGlhc2VzLgorIyAgICBUaGUgc2hvcnQgbmFtZSBpcyAiIiBpZiBpdCBpcyBsaXN0ZWQgYXMgIm4vYSIgaW4gUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LgorIyAyOiBTZXQgb2Ygc2hvcnQgcHJvcGVydHkgdmFsdWUgbmFtZXMuCisjIDM6IERpY3Rpb25hcnkgb2YgcHJvcGVydHkgdmFsdWVzLgorIyAgICBGb3IgQ2F0YWxvZyAmIEVudW1lcmF0ZWQgcHJvcGVydGllcywKKyMgICAgbWFwcyBlYWNoIHZhbHVlIG5hbWUgdG8gYSBsaXN0IG9mIGFsaWFzZXMuCisjICAgIEVtcHR5IGZvciBvdGhlciB0eXBlcyBvZiBwcm9wZXJ0aWVzLgorX3Byb3BlcnRpZXMgPSB7fQorCisjIERpY3Rpb25hcnkgb2YgYmluYXJ5LXByb3BlcnR5IHZhbHVlcyB3aGljaCB3ZSBzdG9yZSBhcyBGYWxzZS9UcnVlLgorIyBTYW1lIGFzIHRoZSB2YWx1ZXMgZGljdGlvbmFyeSBvZiBvbmUgb2YgdGhlIGJpbmFyeSBwcm9wZXJ0aWVzLgorX2JpbmFyeV92YWx1ZXMgPSB7fQorCisjIERpY3Rpb25hcnkgb2YgbnVsbCB2YWx1ZXMuCisjIEtleWVkIGJ5IHNob3J0IHByb3BlcnR5IG5hbWVzLgorIyBUaGVzZSBhcmUgdHlwZS1zcGVjaWZpYyB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBvY2N1ciBpbiB0aGUgZGF0YS4KKyMgVGhleSBhcmUgb3ZlcnJpZGRlbiBieSBfZGVmYXVsdHMsIGJsb2NrIGFuZCBjb2RlIHBvaW50IHByb3BlcnRpZXMuCitfbnVsbF92YWx1ZXMgPSB7fQorCisjIFByb3BlcnR5IHZhbHVlIG5hbWVzIGZvciBudWxsIHZhbHVlcy4KKyMgV2UgZG8gbm90IHN0b3JlIHRoZXNlIGluIF9kZWZhdWx0cy4KK19udWxsX25hbWVzID0gZnJvemVuc2V0KCgiPG5vbmU+IiwgIk5hTiIpKQorCisjIERpY3Rpb25hcnkgb2YgZXhwbGljaXQgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMuCisjIEtleWVkIGJ5IHNob3J0IHByb3BlcnR5IG5hbWVzLgorX2RlZmF1bHRzID0ge30KKworIyBfbnVsbF92YWx1ZXMgb3ZlcnJpZGRlbiBieSBleHBsaWNpdCBfZGVmYXVsdHMuCisjIEluaXRpYWxpemVkIGFmdGVyIHBhcnNpbmcgaXMgZG9uZS4KK19udWxsX29yX2RlZmF1bHRzID0ge30KKworIyBMaXN0IG9mIHByb3BlcnRpZXMgd2l0aCBhbiBJQ1UgVVByb3BlcnR5IGVudW0uCisjIEVhY2ggaXRlbSBpcyBhbiAoZW51bSwgcG5hbWUsIHZhbHVlcykgdHVwbGUuCisjIC0gZW51bTogdGhlIElDVSBlbnVtIFVQcm9wZXJ0eSBjb25zdGFudCBzdHJpbmcKKyMgLSBwbmFtZTogdGhlIFVDRCBzaG9ydCBwcm9wZXJ0eSBuYW1lCisjIC0gdmFsdWVzOiBsaXN0IG9mIChlbnVtLCB2bmFtZSkgcGFpcnMgcGVyIHByb3BlcnR5IHZhbHVlCisjICAgLSBlbnVtOiB0aGUgSUNVIHByb3BlcnR5IHZhbHVlJ3MgZW51bSBjb25zdGFudCBzdHJpbmcKKyMgICAtIHZuYW1lOiB0aGUgVUNEIHNob3J0IHByb3BlcnR5IHZhbHVlIG5hbWUKK19pY3VfcHJvcGVydGllcyA9IFtdCisKKyMgRGljdGlvbmFyeSBvZiBzaG9ydCBwcm9wZXJ0eSBuYW1lcyBtYXBwZWQgdG8gX2ljdV9wcm9wZXJ0aWVzIGl0ZW1zLgorX3BuYW1lX3RvX2ljdV9wcm9wID0ge30KKworX25vbl9hbG51bV9yZSA9IHJlLmNvbXBpbGUoIlteYS16QS1aMC05XSIpCisKK2RlZiBOb3JtUHJvcE5hbWUocG5hbWUpOgorICAiIiJSZXR1cm5zIGEgbm9ybWFsaXplZCBmb3JtIG9mIHBuYW1lLgorICBSZW1vdmVzIG5vbi1BU0NJSS1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcyBsZXR0ZXJzLiIiIgorICByZXR1cm4gX25vbl9hbG51bV9yZS5zdWIoIiIsIHBuYW1lKS5sb3dlcigpCisKKworZGVmIEdldFByb3BlcnR5KHBuYW1lKToKKyAgIiIiUmV0dXJucyB0aGUgX3Byb3BlcnRpZXMgdmFsdWUgZm9yIHRoZSBwbmFtZS4KKyAgUmV0dXJucyBudWxsIGlmIHRoZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLgorICBDYWNoZXMgYWx0ZXJuYXRlIHNwZWxsaW5ncyBvZiB0aGUgcHJvcGVydHkgbmFtZS4iIiIKKyAgIyBUcnkgdGhlIGlucHV0IG5hbWUuCisgIHByb3AgPSBfcHJvcGVydGllcy5nZXQocG5hbWUpCisgIGlmIHByb3AgIT0gTm9uZTogcmV0dXJuIHByb3AKKyAgaWYgcG5hbWUgaW4gX2lnbm9yZWRfcHJvcGVydGllczogcmV0dXJuIE5vbmUKKyAgIyBUcnkgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgbmFtZS4KKyAgbm9ybV9uYW1lID0gTm9ybVByb3BOYW1lKHBuYW1lKQorICBwcm9wID0gX3Byb3BlcnRpZXMuZ2V0KG5vcm1fbmFtZSkKKyAgaWYgcHJvcCAhPSBOb25lOgorICAgIF9wcm9wZXJ0aWVzW3BuYW1lXSA9IHByb3AgICMgQ2FjaGUgcHJvcCB1bmRlciB0aGlzIG5ldyBuYW1lIHNwZWxsaW5nLgorICAgIHJldHVybiBwcm9wCisgIGVsaWYgcG5hbWUgaW4gX2lnbm9yZWRfcHJvcGVydGllczoKKyAgICBfaWdub3JlZF9wcm9wZXJ0aWVzLmFkZChwbmFtZSkgICMgUmVtZW1iZXIgdG8gaWdub3JlIHRoaXMgbmV3IG5hbWUgc3BlbGxpbmcuCisgICAgcmV0dXJuIE5vbmUKKyAgZWxzZToKKyAgICByYWlzZSBOYW1lRXJyb3IoInVua25vd24gcHJvcGVydHkgJXNcbiIgJSBwbmFtZSkKKworCitkZWYgR2V0U2hvcnRQcm9wZXJ0eU5hbWUocG5hbWUpOgorICBpZiBwbmFtZSBpbiBfbnVsbF92YWx1ZXM6IHJldHVybiBwbmFtZSAgIyBwbmFtZSBpcyBhbHJlYWR5IHRoZSBzaG9ydCBuYW1lLgorICBwcm9wID0gR2V0UHJvcGVydHkocG5hbWUpCisgIGlmIG5vdCBwcm9wOiByZXR1cm4gIiIgICMgRm9yIGlnbm9yZWQgcHJvcGVydGllcy4KKyAgcmV0dXJuIHByb3BbMV1bMF0gb3IgcHJvcFsxXVsxXSAgIyBMb25nIG5hbWUgaWYgbm8gc2hvcnQgbmFtZS4KKworCitkZWYgR2V0U2hvcnRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCB2bmFtZSk6CisgIGlmIHZuYW1lIGluIHByb3BbMl06IHJldHVybiB2bmFtZQorICB2YWx1ZXMgPSBwcm9wWzNdCisgIGFsaWFzZXMgPSB2YWx1ZXMuZ2V0KHZuYW1lKQorICBpZiBhbGlhc2VzID09IE5vbmU6CisgICAgbm9ybV9uYW1lID0gTm9ybVByb3BOYW1lKHZuYW1lKQorICAgIGFsaWFzZXMgPSB2YWx1ZXMuZ2V0KG5vcm1fbmFtZSkKKyAgICBpZiBhbGlhc2VzID09IE5vbmU6CisgICAgICByYWlzZSBOYW1lRXJyb3IoInVua25vd24gdmFsdWUgbmFtZSAlcyBmb3IgcHJvcGVydHkgJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICh2bmFtZSwgcHJvcFsxXVswXSkpCisgICAgdmFsdWVzW3ZuYW1lXSA9IGFsaWFzZXMKKyAgcmV0dXJuIGFsaWFzZXNbMF0gb3IgYWxpYXNlc1sxXSAgIyBMb25nIG5hbWUgaWYgbm8gc2hvcnQgbmFtZS4KKworCitkZWYgTm9ybWFsaXplUHJvcGVydHlWYWx1ZShwcm9wLCB2bmFtZSk6CisgIGlmIHByb3BbMl06ICAjIEJpbmFyeS9DYXRhbG9nL0VudW1lcmF0ZWQgcHJvcGVydHkuCisgICAgdmFsdWUgPSBHZXRTaG9ydFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIHZuYW1lKQorICAgIGlmIHByb3BbMF0gPT0gIkJpbmFyeSI6CisgICAgICB2YWx1ZSA9IHZhbHVlID09ICJZIgorICAgIGlmIHByb3BbMV1bMF0uZW5kc3dpdGgoImNjYyIpOgorICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCisgIGVsc2U6CisgICAgdmFsdWUgPSB2bmFtZQorICByZXR1cm4gdmFsdWUKKworIyBDaGFyYWN0ZXIgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworIyBMaXN0cyBvZiBOYW1lc0xpc3QgaDEgYW5kIGgyIGhlYWRpbmdzLgorIyBFYWNoIGgxIHZhbHVlIGlzIGEgKHN0YXJ0LCBlbmQsIGNvbW1lbnQpIHR1cGxlLgorIyBFYWNoIGgyIHZhbHVlIGlzIGEgKGNwLCBjb21tZW50KSB0dXBsZS4KK19oMSA9IFtdCitfaDIgPSBbXQorCisjIExpc3Qgb2YgVW5pY29kZSBibG9ja3MuCisjIEVhY2ggaXRlbSBpcyBhIHR1cGxlIG9mIHN0YXJ0ICYgZW5kIGNvZGUgcG9pbnQgaW50ZWdlcnMKKyMgYW5kIGEgZGljdGlvbmFyeSBvZiBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcy4KK19ibG9ja3MgPSBbXQorCisjIExpc3Qgb2YgcmFuZ2VzIHdpdGggYWxnb3JpdGhtaWMgbmFtZXMuCisjIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIFtzdGFydCwgZW5kLCB0eXBlLCBwcmVmaXhdCisjIHdoZXJlIHByZWZpeCBpcyBvcHRpb25hbC4KK19hbGdfbmFtZXNfcmFuZ2VzID0gW10KKworIyBMaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVyIHJhbmdlcyBhbmQgdGhlaXIgcHJvcGVydGllcywKKyMgc3RvcmVkIGFzIGFuIGludmVyc2lvbiBtYXAgd2l0aCByYW5nZV9zdGFydCAmIHByb3BzIGRpY3Rpb25hcnkuCisjIFN0YXJ0cyB3aXRoIG9uZSByYW5nZSBmb3IgYWxsIG9mIFVuaWNvZGUgd2l0aG91dCBhbnkgcHJvcGVydGllcy4KKyMgU2V0dGluZyB2YWx1ZXMgc3ViZGl2aWRlcyByYW5nZXMuCitfc3RhcnRzID0gYXJyYXkuYXJyYXkoJ2wnLCBbMCwgMHgxMTAwMDBdKSAgIyBhcnJheSBvZiBpbnQzMl90CitfcHJvcHMgPSBbe30sIHt9XSAgIyBwcm9wcyBmb3IgMCBhbmQgMTEwMDAwCisKK2RlZiBGaW5kUmFuZ2UoeCk6CisgICIiIiBCaW5hcnkgc2VhcmNoIGZvciB4IGluIHRoZSBpbnZlcnNpb24gbWFwLgorICBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpIHdoZXJlIHggPCBfc3RhcnRzW2ldIiIiCisgIHJldHVybiBiaXNlY3QuYmlzZWN0KF9zdGFydHMsIHgpIC0gMQorCisKK2RlZiBHZXRQcm9wcyhjKToKKyAgaSA9IEZpbmRSYW5nZShjKQorICByZXR1cm4gX3Byb3BzW2ldCisKKworZGVmIFVwZGF0ZVByb3BzKHN0YXJ0LCBlbmQsIHVwZGF0ZSk6CisgIGFzc2VydCAwIDw9IHN0YXJ0IDw9IGVuZCA8PSAweDEwZmZmZgorICAobmVlZF90b191cGRhdGUsIGRvX3VwZGF0ZSwgdSkgPSAodXBkYXRlWzBdLCB1cGRhdGVbMV0sIHVwZGF0ZVsyXSkKKyAgIyBGaW5kIHRoZSBpbmRleCBpIG9mIHRoZSByYW5nZSBpbiBfc3RhcnRzIHRoYXQgY29udGFpbnMgc3RhcnQuCisgIGkgPSBGaW5kUmFuZ2Uoc3RhcnQpCisgIGxpbWl0ID0gZW5kICsgMQorICAjIEludGVyc2VjdCBbc3RhcnQsIGxpbWl0WyB3aXRoIHJhbmdlcyBpbiBfc3RhcnRzLgorICBjX3N0YXJ0ID0gX3N0YXJ0c1tpXQorICBjX2xpbWl0ID0gX3N0YXJ0c1tpICsgMV0KKyAgY19wcm9wcyA9IF9wcm9wc1tpXQorICAjIGNfc3RhcnQgPD0gc3RhcnQgPCBjX2xpbWl0CisgIGlmIGNfc3RhcnQgPCBzdGFydDoKKyAgICB1cGRhdGVfbGltaXQgPSBjX2xpbWl0IGlmIGNfbGltaXQgPD0gbGltaXQgZWxzZSBsaW1pdAorICAgIGlmIG5lZWRfdG9fdXBkYXRlKHUsIHN0YXJ0LCB1cGRhdGVfbGltaXQgLSAxLCBjX3Byb3BzKToKKyAgICAgICMgU3BsaXQgb2ZmIFtjX3N0YXJ0LCBzdGFydFsgd2l0aCBhIGNvcHkgb2YgY19wcm9wcy4KKyAgICAgIGkgKz0gMQorICAgICAgY19wcm9wcyA9IGNfcHJvcHMuY29weSgpCisgICAgICBfc3RhcnRzLmluc2VydChpLCBzdGFydCkKKyAgICAgIF9wcm9wcy5pbnNlcnQoaSwgY19wcm9wcykKKyAgICAgIGNfc3RhcnQgPSBzdGFydAorICAjIE1vZGlmeSBhbGwgcmFuZ2VzIHRoYXQgYXJlIGZ1bGx5IGluc2lkZSBbc3RhcnQsIGxpbWl0Wy4KKyAgd2hpbGUgY19saW1pdCA8PSBsaW1pdDoKKyAgICAjIHN0YXJ0IDw9IGNfc3RhcnQgPCBjX2xpbWl0IDw9IGxpbWl0CisgICAgaWYgbmVlZF90b191cGRhdGUodSwgY19zdGFydCwgY19saW1pdCAtIDEsIGNfcHJvcHMpOgorICAgICAgZG9fdXBkYXRlKHUsIGNfc3RhcnQsIGNfbGltaXQgLSAxLCBjX3Byb3BzKQorICAgIGlmIGNfbGltaXQgPT0gMHgxMTAwMDA6IHJldHVybgorICAgIGkgKz0gMQorICAgIGNfc3RhcnQgPSBjX2xpbWl0CisgICAgY19saW1pdCA9IF9zdGFydHNbaSArIDFdCisgICAgY19wcm9wcyA9IF9wcm9wc1tpXQorICBpZiBjX3N0YXJ0IDwgbGltaXQgYW5kIG5lZWRfdG9fdXBkYXRlKHUsIGNfc3RhcnQsIGxpbWl0IC0gMSwgY19wcm9wcyk6CisgICAgIyBTcGxpdCBvZmYgW2xpbWl0LCBjX2xpbWl0WyB3aXRoIGEgY29weSBvZiBjX3Byb3BzLgorICAgIF9zdGFydHMuaW5zZXJ0KGkgKyAxLCBsaW1pdCkKKyAgICBfcHJvcHMuaW5zZXJ0KGkgKyAxLCBjX3Byb3BzLmNvcHkoKSkKKyAgICAjIE1vZGlmeSBbY19zdGFydCwgbGltaXRbIGNfcHJvcHMuCisgICAgZG9fdXBkYXRlKHUsIGNfc3RhcnQsIGxpbWl0IC0gMSwgY19wcm9wcykKKworCitkZWYgTmVlZFRvU2V0UHJvcHMocHJvcHMsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICAiIiJSZXR1cm5zIFRydWUgaWYgcHJvcHMgaXMgbm90IGEgc3ViLWRpY3Qgb2YgY19wcm9wcy4iIiIKKyAgZm9yIChwbmFtZSwgdmFsdWUpIGluIHByb3BzLml0ZXJpdGVtcygpOgorICAgIGlmIHBuYW1lIG5vdCBpbiBjX3Byb3BzIG9yIHZhbHVlICE9IGNfcHJvcHNbcG5hbWVdOiByZXR1cm4gVHJ1ZQorICByZXR1cm4gRmFsc2UKKworCitkZWYgRG9TZXRQcm9wcyhwcm9wcywgc3RhcnQsIGVuZCwgY19wcm9wcyk6CisgIGNfcHJvcHMudXBkYXRlKHByb3BzKQorCisKK2RlZiBTZXRQcm9wcyhzdGFydCwgZW5kLCBwcm9wcyk6CisgIFVwZGF0ZVByb3BzKHN0YXJ0LCBlbmQsIChOZWVkVG9TZXRQcm9wcywgRG9TZXRQcm9wcywgcHJvcHMpKQorCisKK2RlZiBOZWVkVG9TZXRBbHdheXMobnYsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICByZXR1cm4gVHJ1ZQorCisKKyMgRm9yIHJlc3RvcmluZyBib3VuZGFyaWVzIGFmdGVyIG1lcmdpbmcgYWRqYWNlbnQgc2FtZS1wcm9wcyByYW5nZXMuCitkZWYgQWRkQm91bmRhcnkoeCk6CisgICIiIkVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugc3RhcnQvbGltaXQgYXQgeC4iIiIKKyAgYXNzZXJ0IDAgPD0geCA8PSAweDEwZmZmZgorICBpID0gRmluZFJhbmdlKHgpCisgIGlmIF9zdGFydHNbaV0gPT0geDogcmV0dXJuCisgICMgU3BsaXQgdGhlIHJhbmdlIGF0IHguCisgIGNfc3RhcnQgPSBfc3RhcnRzW2ldCisgIGNfbGltaXQgPSBfc3RhcnRzW2kgKyAxXQorICBjX3Byb3BzID0gX3Byb3BzW2ldCisgICMgY19zdGFydCA8IHggPCBjX2xpbWl0CisgIGkgKz0gMQorICBfc3RhcnRzLmluc2VydChpLCB4KQorICBfcHJvcHMuaW5zZXJ0KGksIGNfcHJvcHMuY29weSgpKQorCisKK2RlZiBTZXREZWZhdWx0VmFsdWUocG5hbWUsIHZhbHVlKToKKyAgIiIiU2V0cyB0aGUgcHJvcGVydHkncyBkZWZhdWx0IHZhbHVlLiBJZ25vcmVzIG51bGwgdmFsdWVzLiIiIgorICBwcm9wID0gR2V0UHJvcGVydHkocG5hbWUpCisgIGlmIHByb3AgYW5kIHZhbHVlIG5vdCBpbiBfbnVsbF9uYW1lczoKKyAgICB2YWx1ZSA9IE5vcm1hbGl6ZVByb3BlcnR5VmFsdWUocHJvcCwgdmFsdWUpCisgICAgaWYgdmFsdWUgIT0gX251bGxfdmFsdWVzW3Byb3BbMV1bMF1dOgorICAgICAgX2RlZmF1bHRzW3Byb3BbMV1bMF1dID0gdmFsdWUKKyAgICAgIFNldFByb3BzKDAsIDB4MTBmZmZmLCB7cHJvcFsxXVswXTogdmFsdWV9KQorCisKK2RlZiBTZXRCaW5hcnlQcm9wZXJ0eVRvVHJ1ZShwbmFtZSwgc3RhcnQsIGVuZCk6CisgIHByb3AgPSBHZXRQcm9wZXJ0eShwbmFtZSkKKyAgaWYgcHJvcDoKKyAgICBhc3NlcnQgcHJvcFswXSA9PSAiQmluYXJ5IgorICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHtwcm9wWzFdWzBdOiBUcnVlfSkKKworCitkZWYgU2V0UHJvcFZhbHVlKHByb3AsIHZuYW1lLCBzdGFydCwgZW5kKToKKyAgdmFsdWUgPSBOb3JtYWxpemVQcm9wZXJ0eVZhbHVlKHByb3AsIHZuYW1lKQorICBTZXRQcm9wcyhzdGFydCwgZW5kLCB7cHJvcFsxXVswXTogdmFsdWV9KQorCisKK2RlZiBTZXRQcm9wZXJ0eVZhbHVlKHBuYW1lLCB2bmFtZSwgc3RhcnQsIGVuZCk6CisgIHByb3AgPSBHZXRQcm9wZXJ0eShwbmFtZSkKKyAgaWYgcHJvcDogU2V0UHJvcFZhbHVlKHByb3AsIHZuYW1lLCBzdGFydCwgZW5kKQorCisjIFBhcnNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfc3RyaXBwZWRfY3BfcmUgPSByZS5jb21waWxlKCIoWzAtOWEtZkEtRl0rKSQiKQorX3N0cmlwcGVkX3JhbmdlX3JlID0gcmUuY29tcGlsZSgiKFswLTlhLWZBLUZdKylcLlwuKFswLTlhLWZBLUZdKykkIikKK19taXNzaW5nX3JlID0gcmUuY29tcGlsZSgiIyAqQG1pc3Npbmc6ICowMDAwXC5cLjEwRkZGRiAqOyAqKC4rKSQiKQorCitkZWYgUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfcmFuZ2VzPVRydWUsIHdhbnRfb3RoZXI9RmFsc2UsCisgICAgICAgICAgICAgICAgIHdhbnRfY29tbWVudHM9RmFsc2UsIHdhbnRfbWlzc2luZz1GYWxzZSk6CisgICIiIlBhcnNlcyBsaW5lcyBmcm9tIGEgc2VtaWNvbG9uLWRlbGltaXRlZCBVQ0QgdGV4dCBmaWxlLgorICBTdHJpcHMgY29tbWVudHMsIGlnbm9yZXMgZW1wdHkgYW5kIGFsbC1jb21tZW50IGxpbmVzLgorICBSZXR1cm5zIGEgdHVwbGUgKHR5cGUsIGxpbmUsIC4uLikuCisgICIiIgorICBnbG9iYWwgX2NvcHlyaWdodCwgX3Rlcm1zX29mX3VzZQorICBmb3IgbGluZSBpbiBpbl9maWxlOgorICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKTogICMgd2hvbGUtbGluZSBjb21tZW50CisgICAgICBpZiB3YW50X21pc3Npbmc6CisgICAgICAgIG1hdGNoID0gX21pc3NpbmdfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgZmllbGRzID0gbWF0Y2guZ3JvdXAoMSkuc3BsaXQoIjsiKQorICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZmllbGRzKSk6IGZpZWxkc1tpXSA9IGZpZWxkc1tpXS5zdHJpcCgpCisgICAgICAgICAgeWllbGQgKCJtaXNzaW5nIiwgbGluZSwgZmllbGRzKQorICAgICAgICAgIGNvbnRpbnVlCisgICAgICBpZiB3YW50X2NvbW1lbnRzOiB5aWVsZCAoImNvbW1lbnQiLCBsaW5lKQorICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIENvcHlyaWdodCIpOgorICAgICAgICBpZiBub3QgX2NvcHlyaWdodCBhbmQgX2N1cnJlbnRfeWVhciBpbiBsaW5lOgorICAgICAgICAgIF9jb3B5cmlnaHQgPSBsaW5lCisgICAgICBlbGlmICJ0ZXJtcyBvZiB1c2UiIGluIGxpbmUgYW5kIG5vdCBfdGVybXNfb2ZfdXNlOgorICAgICAgICBfdGVybXNfb2ZfdXNlID0gbGluZQorICAgICAgY29udGludWUKKyAgICBjb21tZW50X3N0YXJ0ID0gbGluZS5maW5kKCIjIikgICMgaW5saW5lIGNvbW1lbnQKKyAgICBpZiBjb21tZW50X3N0YXJ0ID49IDA6CisgICAgICBsaW5lID0gbGluZVs6Y29tbWVudF9zdGFydF0ucnN0cmlwKCkKKyAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgIGZpZWxkcyA9IGxpbmUuc3BsaXQoIjsiKQorICAgIGZvciBpIGluIHhyYW5nZShsZW4oZmllbGRzKSk6IGZpZWxkc1tpXSA9IGZpZWxkc1tpXS5zdHJpcCgpCisgICAgaWYgd2FudF9yYW5nZXM6CisgICAgICBmaXJzdCA9IGZpZWxkc1swXQorICAgICAgbWF0Y2ggPSBfc3RyaXBwZWRfcmFuZ2VfcmUubWF0Y2goZmlyc3QpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgc3RhcnQgPSBpbnQobWF0Y2guZ3JvdXAoMSksIDE2KQorICAgICAgICBlbmQgPSBpbnQobWF0Y2guZ3JvdXAoMiksIDE2KQorICAgICAgICB5aWVsZCAoInJhbmdlIiwgbGluZSwgc3RhcnQsIGVuZCwgZmllbGRzKQorICAgICAgICBjb250aW51ZQorICAgICAgbWF0Y2ggPSBfc3RyaXBwZWRfY3BfcmUubWF0Y2goZmlyc3QpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgYyA9IGludChtYXRjaC5ncm91cCgxKSwgMTYpCisgICAgICAgIHlpZWxkICgicmFuZ2UiLCBsaW5lLCBjLCBjLCBmaWVsZHMpCisgICAgICAgIGNvbnRpbnVlCisgICAgaWYgd2FudF9vdGhlcjoKKyAgICAgIHlpZWxkICgib3RoZXIiLCBsaW5lLCBmaWVsZHMpCisgICAgZWxzZToKKyAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bmFibGUgdG8gcGFyc2UgbGluZVxuICAlc1xuIiAlIGxpbmUpCisKKworZGVmIEFkZEJpbmFyeVByb3BlcnR5KHNob3J0X25hbWUsIGxvbmdfbmFtZSk6CisgIF9udWxsX3ZhbHVlc1tzaG9ydF9uYW1lXSA9IEZhbHNlCisgIGJpbl9wcm9wID0gX3Byb3BlcnRpZXNbIk1hdGgiXQorICBwcm9wID0gKCJCaW5hcnkiLCBbc2hvcnRfbmFtZSwgbG9uZ19uYW1lXSwgYmluX3Byb3BbMl0sIGJpbl9wcm9wWzNdKQorICBfcHJvcGVydGllc1tzaG9ydF9uYW1lXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbbG9uZ19uYW1lXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbTm9ybVByb3BOYW1lKHNob3J0X25hbWUpXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbTm9ybVByb3BOYW1lKGxvbmdfbmFtZSldID0gcHJvcAorCisKK2RlZiBBZGRQT1NJWEJpbmFyeVByb3BlcnR5KG5hbWUpOgorICAjIFdlIG9ubHkgZGVmaW5lIGEgbG9uZyBuYW1lIGZvciBJQ1Utc3BlY2lmaWMgKG5vbi1VQ0QpIFBPU0lYIHByb3BlcnRpZXMuCisgIF9udWxsX3ZhbHVlc1tuYW1lXSA9IEZhbHNlCisgIGJpbl9wcm9wID0gX3Byb3BlcnRpZXNbIk1hdGgiXQorICBwcm9wID0gKCJCaW5hcnkiLCBbIiIsIG5hbWVdLCBiaW5fcHJvcFsyXSwgYmluX3Byb3BbM10pCisgIF9wcm9wZXJ0aWVzW25hbWVdID0gcHJvcAorICBfcHJvcGVydGllc1tOb3JtUHJvcE5hbWUobmFtZSldID0gcHJvcAorICAjIFRoaXMgaXMgdG8gbWF0Y2ggVVByb3BlcnR5IFVDSEFSX1BPU0lYX0FMTlVNIGV0Yy4KKyAgX3Byb3BlcnRpZXNbInBvc2l4IiArIE5vcm1Qcm9wTmFtZShuYW1lKV0gPSBwcm9wCisKKworIyBNYXRjaCBhIGNvbW1lbnQgbGluZSBsaWtlCisjIFByb3BlcnR5QWxpYXNlcy02LjEuMC50eHQKKyMgYW5kIGV4dHJhY3QgdGhlIFVuaWNvZGUgdmVyc2lvbi4KK191Y2RfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoIiMgKlByb3BlcnR5QWxpYXNlcyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLShbMC05XSsoPzpcXC5bMC05XSspKikoPzpkWzAtOV0rKT8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcLnR4dCIpCisKK2RlZiBQYXJzZVByb3BlcnR5QWxpYXNlcyhpbl9maWxlKToKKyAgZ2xvYmFsIF91Y2RfdmVyc2lvbgorICBwcm9wX3R5cGVfbnVsbHMgPSB7CisgICAgIkJpbmFyeSI6IEZhbHNlLAorICAgICJDYXRhbG9nIjogIj8/IiwgICMgTXVzdCBiZSBzcGVjaWZpZWQsIGUuZy4sIGluIEBtaXNzaW5nIGxpbmUuCisgICAgIkVudW1lcmF0ZWQiOiAiPz8iLCAgIyBNdXN0IGJlIHNwZWNpZmllZC4KKyAgICAiTnVtZXJpYyI6ICJOYU4iLAorICAgICJTdHJpbmciOiAiIiwKKyAgICAiTWlzY2VsbGFuZW91cyI6ICIiCisgIH0KKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfcmFuZ2VzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9vdGhlcj1UcnVlLCB3YW50X2NvbW1lbnRzPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gImNvbW1lbnQiOgorICAgICAgbGluZSA9IGRhdGFbMV0KKyAgICAgIG1hdGNoID0gX3VjZF92ZXJzaW9uX3JlLm1hdGNoKGxpbmUpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgX3VjZF92ZXJzaW9uID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgIGVsc2U6CisgICAgICAgIHdvcmRzID0gbGluZVsxOl0ubHN0cmlwKCkuc3BsaXQoKQorICAgICAgICBpZiBsZW4od29yZHMpID09IDIgYW5kIHdvcmRzWzFdID09ICJQcm9wZXJ0aWVzIjoKKyAgICAgICAgICBwcm9wX3R5cGUgPSB3b3Jkc1swXQorICAgICAgICAgIG51bGxfdmFsdWUgPSBwcm9wX3R5cGVfbnVsbHNbcHJvcF90eXBlXQorICAgIGVsc2U6CisgICAgICAjIHR5cGUgPT0gIm90aGVyIgorICAgICAgYWxpYXNlcyA9IGRhdGFbMl0KKyAgICAgIG5hbWUgPSBhbGlhc2VzWzBdCisgICAgICBpZiBuYW1lIGluIF9pZ25vcmVkX3Byb3BlcnRpZXM6CisgICAgICAgIGZvciBhbGlhcyBpbiBhbGlhc2VzOgorICAgICAgICAgIF9pZ25vcmVkX3Byb3BlcnRpZXMuYWRkKGFsaWFzKQorICAgICAgICAgIF9pZ25vcmVkX3Byb3BlcnRpZXMuYWRkKE5vcm1Qcm9wTmFtZShhbGlhcykpCisgICAgICBlbHNlOgorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCJjY2MiKToKKyAgICAgICAgICBfbnVsbF92YWx1ZXNbbmFtZV0gPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgX251bGxfdmFsdWVzW25hbWVdID0gbnVsbF92YWx1ZQorICAgICAgICBwcm9wID0gKHByb3BfdHlwZSwgYWxpYXNlcywgc2V0KCksIHt9KQorICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICBfcHJvcGVydGllc1thbGlhc10gPSBwcm9wCisgICAgICAgICAgX3Byb3BlcnRpZXNbTm9ybVByb3BOYW1lKGFsaWFzKV0gPSBwcm9wCisgICMgQWRkIHByb3Zpc2lvbmFsIGFuZCBJQ1Utc3BlY2lmaWMgcHJvcGVydGllcyB3ZSBuZWVkLgorICAjIFdlIGFkZCBzb21lIGluIHN1cHBvcnQgb2YgcnVudGltZSBBUEksIGV2ZW4gaWYgd2UgZG8gbm90IHdyaXRlCisgICMgZGF0YSBmb3IgdGhlbSB0byBwcHVjZC50eHQgKGUuZy4sIGxjY2MgJiB0Y2NjKS4KKyAgIyBXZSBhZGQgb3RoZXJzIGp1c3QgdG8gcmVwcmVzZW50IFVDRCBkYXRhIHRoYXQgY29udHJpYnV0ZXMgdG8KKyAgIyBzb21lIGZ1bmN0aW9uYWxpdHksIGFsdGhvdWdoIFVuaWNvZGUgaGFzIG5vdCAiYmxlc3NlZCIgdGhlbQorICAjIGFzIHNlcGFyYXRlIHByb3BlcnRpZXMgKGUuZy4sIFR1cmtpY19DYXNlX0ZvbGRpbmcpLgorCisgICMgVHVya2ljX0Nhc2VfRm9sZGluZzogVGhlICdUJyBtYXBwaW5ncyBpbiBDYXNlRm9sZGluZy50eHQuCisgIG5hbWUgPSAiVHVya2ljX0Nhc2VfRm9sZGluZyIKKyAgX251bGxfdmFsdWVzW25hbWVdID0gIiIKKyAgcHJvcCA9ICgiU3RyaW5nIiwgW25hbWUsIG5hbWVdLCBzZXQoKSwge30pCisgIF9wcm9wZXJ0aWVzW25hbWVdID0gcHJvcAorICBfcHJvcGVydGllc1tOb3JtUHJvcE5hbWUobmFtZSldID0gcHJvcAorICAjIENvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3M6IFNwZWNpYWxDYXNpbmcudHh0IGxpbmVzIHdpdGggY29uZGl0aW9ucy4KKyAgbmFtZSA9ICJDb25kaXRpb25hbF9DYXNlX01hcHBpbmdzIgorICBfbnVsbF92YWx1ZXNbbmFtZV0gPSAiIgorICBwcm9wID0gKCJNaXNjZWxsYW5lb3VzIiwgW25hbWUsIG5hbWVdLCBzZXQoKSwge30pCisgIF9wcm9wZXJ0aWVzW25hbWVdID0gcHJvcAorICBfcHJvcGVydGllc1tOb3JtUHJvcE5hbWUobmFtZSldID0gcHJvcAorICAjIGxjY2MgPSBjY2Mgb2YgZmlyc3QgY3AgaW4gY2Fub25pY2FsIGRlY29tcG9zaXRpb24uCisgIF9udWxsX3ZhbHVlc1sibGNjYyJdID0gMAorICBjY2NfcHJvcCA9IGxpc3QoX3Byb3BlcnRpZXNbImNjYyJdKQorICBjY2NfcHJvcFsxXSA9IFsibGNjYyIsICJMZWFkX0Nhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MiXQorICBwcm9wID0gdHVwbGUoY2NjX3Byb3ApCisgIF9wcm9wZXJ0aWVzWyJsY2NjIl0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzWyJMZWFkX0Nhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MiXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbImxlYWRjYW5vbmljYWxjb21iaW5pbmdjbGFzcyJdID0gcHJvcAorICAjIHRjY2MgPSBjY2Mgb2YgbGFzdCBjcCBpbiBjYW5vbmljYWwgZGVjb21wb3NpdGlvbi4KKyAgX251bGxfdmFsdWVzWyJ0Y2NjIl0gPSAwCisgIGNjY19wcm9wWzFdID0gWyJ0Y2NjIiwgIlRyYWlsX0Nhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MiXQorICBwcm9wID0gdHVwbGUoY2NjX3Byb3ApCisgIF9wcm9wZXJ0aWVzWyJ0Y2NjIl0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzWyJUcmFpbF9DYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIl0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzWyJ0cmFpbGNhbm9uaWNhbGNvbWJpbmluZ2NsYXNzIl0gPSBwcm9wCisgICMgU2NyaXB0X0V4dGVuc2lvbnMKKyAgaWYgInNjeCIgbm90IGluIF9wcm9wZXJ0aWVzOgorICAgIF9udWxsX3ZhbHVlc1sic2N4Il0gPSAiIgorICAgIHByb3AgPSAoIk1pc2NlbGxhbmVvdXMiLCBbInNjeCIsICJTY3JpcHRfRXh0ZW5zaW9ucyJdLCBzZXQoKSwge30pCisgICAgX3Byb3BlcnRpZXNbInNjeCJdID0gcHJvcAorICAgIF9wcm9wZXJ0aWVzWyJTY3JpcHRfRXh0ZW5zaW9ucyJdID0gcHJvcAorICAgIF9wcm9wZXJ0aWVzWyJzY3JpcHRleHRlbnNpb25zIl0gPSBwcm9wCisgICMgR2VuZXJhbCBDYXRlZ29yeSBhcyBhIGJpdCBtYXNrLgorICBfbnVsbF92YWx1ZXNbImdjbSJdID0gIj8/IgorICBnY19wcm9wID0gX3Byb3BlcnRpZXNbImdjIl0KKyAgcHJvcCA9ICgiQml0bWFzayIsIFsiZ2NtIiwgIkdlbmVyYWxfQ2F0ZWdvcnlfTWFzayJdLCBnY19wcm9wWzJdLCBnY19wcm9wWzNdKQorICBfcHJvcGVydGllc1siZ2NtIl0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzWyJHZW5lcmFsX0NhdGVnb3J5X01hc2siXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbImdlbmVyYWxjYXRlZ29yeW1hc2siXSA9IHByb3AKKyAgIyBWYXJpb3VzIGJpbmFyeSBwcm9wZXJ0aWVzLgorICBBZGRCaW5hcnlQcm9wZXJ0eSgiU2Vuc2l0aXZlIiwgIkNhc2VfU2Vuc2l0aXZlIikKKyAgQWRkQmluYXJ5UHJvcGVydHkoIm5mZGluZXJ0IiwgIk5GRF9JbmVydCIpCisgIEFkZEJpbmFyeVByb3BlcnR5KCJuZmtkaW5lcnQiLCAiTkZLRF9JbmVydCIpCisgIEFkZEJpbmFyeVByb3BlcnR5KCJuZmNpbmVydCIsICJORkNfSW5lcnQiKQorICBBZGRCaW5hcnlQcm9wZXJ0eSgibmZrY2luZXJ0IiwgIk5GS0NfSW5lcnQiKQorICBBZGRCaW5hcnlQcm9wZXJ0eSgic2Vnc3RhcnQiLCAiU2VnbWVudF9TdGFydGVyIikKKyAgIyBDL1BPU0lYIGNoYXJhY3RlciBjbGFzc2VzIHRoYXQgZG8gbm90IGhhdmUgVW5pY29kZSBwcm9wZXJ0eSBbdmFsdWVdIGFsaWFzZXMuCisgICMgU2VlIHVjaGFyLmguCisgIEFkZFBPU0lYQmluYXJ5UHJvcGVydHkoImFsbnVtIikKKyAgQWRkUE9TSVhCaW5hcnlQcm9wZXJ0eSgiYmxhbmsiKQorICBBZGRQT1NJWEJpbmFyeVByb3BlcnR5KCJncmFwaCIpCisgIEFkZFBPU0lYQmluYXJ5UHJvcGVydHkoInByaW50IikKKyAgQWRkUE9TSVhCaW5hcnlQcm9wZXJ0eSgieGRpZ2l0IikKKworCitkZWYgUGFyc2VQcm9wZXJ0eVZhbHVlQWxpYXNlcyhpbl9maWxlKToKKyAgZ2xvYmFsIF9iaW5hcnlfdmFsdWVzCisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X3Jhbmdlcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRfb3RoZXI9VHJ1ZSwgd2FudF9taXNzaW5nPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gIm1pc3NpbmciOgorICAgICAgU2V0RGVmYXVsdFZhbHVlKGRhdGFbMl1bMF0sIGRhdGFbMl1bMV0pCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAib3RoZXIiCisgICAgICBmaWVsZHMgPSBkYXRhWzJdCisgICAgICBwbmFtZSA9IGZpZWxkc1swXQorICAgICAgcHJvcCA9IEdldFByb3BlcnR5KHBuYW1lKQorICAgICAgaWYgcHJvcDoKKyAgICAgICAgZGVsIGZpZWxkc1swXSAgIyBPbmx5IHRoZSBsaXN0IG9mIGFsaWFzZXMgcmVtYWlucy4KKyAgICAgICAgc2hvcnRfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICBpZiBzaG9ydF9uYW1lID09ICJuL2EiOiAgIyBubyBzaG9ydCBuYW1lCisgICAgICAgICAgZmllbGRzWzBdID0gIiIKKyAgICAgICAgICBzaG9ydF9uYW1lID0gZmllbGRzWzFdCisgICAgICAgIHByb3BbMl0uYWRkKHNob3J0X25hbWUpCisgICAgICAgIHZhbHVlcyA9IHByb3BbM10KKyAgICAgICAgZm9yIGFsaWFzIGluIGZpZWxkczoKKyAgICAgICAgICBpZiBhbGlhczoKKyAgICAgICAgICAgIHZhbHVlc1thbGlhc10gPSBmaWVsZHMKKyAgICAgICAgICAgIHZhbHVlc1tOb3JtUHJvcE5hbWUoYWxpYXMpXSA9IGZpZWxkcworICAgICAgICBpZiBwcm9wWzBdID09ICJCaW5hcnkiIGFuZCBub3QgX2JpbmFyeV92YWx1ZXM6CisgICAgICAgICAgX2JpbmFyeV92YWx1ZXMgPSB2YWx1ZXMKKyAgIyBTb21lIG9mIHRoZSBAbWlzc2luZyBsaW5lcyB3aXRoIG5vbi1udWxsIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzCisgICMgYXJlIGluIGZpbGVzIHRoYXQgd2UgZG8gbm90IHBhcnNlOworICAjIGVpdGhlciBiZWNhdXNlIHRoZSBkYXRhIGZvciB0aGF0IHByb3BlcnR5IGlzIGVhc2lseQorICAjIChpLmUuLCB0aGUgQG1pc3NpbmcgbGluZSB3b3VsZCBiZSB0aGUgb25seSByZWFzb24gdG8gcGFyc2Ugc3VjaCBhIGZpbGUpCisgICMgb3IgYmVjYXVzZSB3ZSBjb21wdXRlIHRoZSBwcm9wZXJ0eSBhdCBydW50aW1lLAorICAjIHN1Y2ggYXMgdGhlIEhhbmd1bF9TeWxsYWJsZV9UeXBlLgorICBpZiAiZHQiIG5vdCBpbiBfZGVmYXVsdHM6ICAjIERlcml2ZWREZWNvbXBvc2l0aW9uVHlwZS50eHQKKyAgICBfZGVmYXVsdHNbImR0Il0gPSAiTm9uZSIKKyAgaWYgIm50IiBub3QgaW4gX2RlZmF1bHRzOiAgIyBEZXJpdmVkTnVtZXJpY1R5cGUudHh0CisgICAgX2RlZmF1bHRzWyJudCJdID0gIk5vbmUiCisgIGlmICJoc3QiIG5vdCBpbiBfZGVmYXVsdHM6ICAjIEhhbmd1bFN5bGxhYmxlVHlwZS50eHQKKyAgICBfZGVmYXVsdHNbImhzdCJdID0gIk5BIgorICBpZiAiZ2MiIG5vdCBpbiBfZGVmYXVsdHM6ICAjIE5vIEBtaXNzaW5nIGxpbmUgaW4gYW55IC50eHQgZmlsZT8KKyAgICBfZGVmYXVsdHNbImdjIl0gPSAiQ24iCisgICMgQ29weSB0aGUgZ2MgZGVmYXVsdCB2YWx1ZSB0byBnY20uCisgIF9kZWZhdWx0c1siZ2NtIl0gPSBfZGVmYXVsdHNbImdjIl0KKyAgIyBBZGQgSVNPIDE1OTI0LW9ubHkgc2NyaXB0IGNvZGVzLgorICAjIE9ubHkgZm9yIHRoZSBJQ1Ugc2NyaXB0IGNvZGUgQVBJLCBub3QgbmVjZXNzYXJ5IGZvciBwYXJzaW5nIHRoZSBVQ0QuCisgIHNjcmlwdF9wcm9wID0gX3Byb3BlcnRpZXNbInNjIl0KKyAgc2hvcnRfc2NyaXB0X25hbWVzID0gc2NyaXB0X3Byb3BbMl0gICMgc2V0CisgIHNjcmlwdF92YWx1ZXMgPSBzY3JpcHRfcHJvcFszXSAgIyBkaWN0CisgIHJlbW92ZV9zY3JpcHRzID0gW10KKyAgZm9yIHNjcmlwdCBpbiBfc2NyaXB0c19vbmx5X2luX2lzbzE1OTI0OgorICAgIGlmIHNjcmlwdCBpbiBzaG9ydF9zY3JpcHRfbmFtZXM6CisgICAgICByZW1vdmVfc2NyaXB0cy5hcHBlbmQoc2NyaXB0KQorICAgIGVsc2U6CisgICAgICBzaG9ydF9zY3JpcHRfbmFtZXMuYWRkKHNjcmlwdCkKKyAgICAgICMgRG8gbm90IGludmVudCBhIFVuaWNvZGUgbG9uZyBzY3JpcHQgbmFtZSBiZWZvcmUgdGhlIFVDRCBhZGRzIHRoZSBzY3JpcHQuCisgICAgICBzY3JpcHRfbGlzdCA9IFtzY3JpcHQsIHNjcmlwdF0gICMgW3Nob3J0LCBsb25nXQorICAgICAgc2NyaXB0X3ZhbHVlc1tzY3JpcHRdID0gc2NyaXB0X2xpc3QKKyAgICAgICMgUHJvYmFibHkgbm90IG5lY2Vzc2FyeSBiZWNhdXNlCisgICAgICAjIHdlIHdpbGwgbm90IHBhcnNlIHRoZXNlIHNjcmlwdHMgZnJvbSB0aGUgVUNEOgorICAgICAgc2NyaXB0X3ZhbHVlc1tOb3JtUHJvcE5hbWUoc2NyaXB0KV0gPSBzY3JpcHRfbGlzdAorICBpZiByZW1vdmVfc2NyaXB0czoKKyAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAicmVtb3ZlICVzIGZyb20gX3NjcmlwdHNfb25seV9pbl9pc28xNTkyNCIgJSByZW1vdmVfc2NyaXB0cykKKworCitkZWYgUGFyc2VCbG9ja3MoaW5fZmlsZSk6CisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgaWYgZGF0YVswXSA9PSAibWlzc2luZyI6CisgICAgICBTZXREZWZhdWx0VmFsdWUoImJsayIsIGRhdGFbMl1bMF0pCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAicmFuZ2UiCisgICAgICAoc3RhcnQsIGVuZCwgbmFtZSkgPSAoZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XVsxXSkKKyAgICAgIF9ibG9ja3MuYXBwZW5kKChzdGFydCwgZW5kLCB7ImJsayI6IG5hbWV9KSkKKyAgICAgIFNldFByb3BlcnR5VmFsdWUoImJsayIsIG5hbWUsIHN0YXJ0LCBlbmQpCisgIF9ibG9ja3Muc29ydCgpCisgICMgQ2hlY2sgZm9yIG92ZXJsYXBwaW5nIGJsb2Nrcy4KKyAgcHJldl9lbmQgPSAtMQorICBmb3IgYiBpbiBfYmxvY2tzOgorICAgIHN0YXJ0ID0gYlswXQorICAgIGVuZCA9IGJbMV0KKyAgICBpZiBwcmV2X2VuZCA+PSBzdGFydDoKKyAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgImJsb2NrICUwNGxYLi4lMDRsWCAlcyBvdmVybGFwcyB3aXRoIGFub3RoZXIgIiArCisgICAgICAgICAgImVuZGluZyBhdCAlMDRsWFxuICAlc1xuIiAlCisgICAgICAgICAgKHN0YXJ0LCBlbmQsIGJbMl1bImJsayJdLCBwcmV2X2VuZCkpCisgICAgcHJldl9lbmQgPSBlbmQKKworCitkZWYgUGFyc2VVbmljb2RlRGF0YShpbl9maWxlKToKKyAgZHRfcHJvcCA9IEdldFByb3BlcnR5KCJkdCIpCisgIHJhbmdlX2ZpcnN0X2xpbmUgPSAiIgorICByYW5nZV9maXJzdCA9IC0xCisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgIyB0eXBlID09ICJyYW5nZSIKKyAgICAobGluZSwgYywgZW5kLCBmaWVsZHMpID0gKGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGRhdGFbNF0pCisgICAgYXNzZXJ0IGMgPT0gZW5kCisgICAgbmFtZSA9IGZpZWxkc1sxXQorICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiPCIpOgorICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLCBGaXJzdD4iKToKKyAgICAgICAgaWYgcmFuZ2VfZmlyc3QgPj0gMDoKKyAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigKKyAgICAgICAgICAgICAgImVycm9yOiB1bnRlcm1pbmF0ZWQgcmFuZ2Ugc3RhcnRlZCBhdFxuICAlc1xuIiAlCisgICAgICAgICAgICAgIHJhbmdlX2ZpcnN0X2xpbmUpCisgICAgICAgIHJhbmdlX2ZpcnN0ID0gYworICAgICAgICByYW5nZV9maXJzdF9saW5lID0gbGluZQorICAgICAgICBjb250aW51ZQorICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCIsIExhc3Q+Iik6CisgICAgICAgIGlmIHJhbmdlX2ZpcnN0IDwgMDoKKyAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigKKyAgICAgICAgICAgICAgImVycm9yOiByYW5nZSBlbmQgd2l0aG91dCBzdGFydCBhdFxuICAlc1xuIiAlCisgICAgICAgICAgICAgIGxpbmUpCisgICAgICAgIGVsaWYgcmFuZ2VfZmlyc3QgPiBjOgorICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAiZXJyb3I6IHJhbmdlIHN0YXJ0L2VuZCBvdXQgb2Ygb3JkZXIgYXRcbiAgJXNcbiAgJXNcbiIgJQorICAgICAgICAgICAgICAocmFuZ2VfZmlyc3RfbGluZSwgbGluZSkpCisgICAgICAgIGZpcnN0X25hbWUgPSByYW5nZV9maXJzdF9saW5lLnNwbGl0KCI7IilbMV1bMTotOF0KKyAgICAgICAgbmFtZSA9IG5hbWVbMTotN10KKyAgICAgICAgaWYgZmlyc3RfbmFtZSAhPSBuYW1lOgorICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAiZXJyb3I6IHJhbmdlIHN0YXJ0L2VuZCBuYW1lIG1pc21hdGNoIGF0XG4gICVzXG4gICVzXG4iICUKKyAgICAgICAgICAgICAgKHJhbmdlX2ZpcnN0X2xpbmUsIGxpbmUpKQorICAgICAgICBlbmQgPSBjCisgICAgICAgIGMgPSByYW5nZV9maXJzdAorICAgICAgICByYW5nZV9maXJzdCA9IC0xCisgICAgICAgICMgUmVtZW1iZXIgYWxnb3JpdGhtaWMgbmFtZSByYW5nZXMuCisgICAgICAgIGlmICJJZGVvZ3JhcGgiIGluIG5hbWU6CisgICAgICAgICAgX2FsZ19uYW1lc19yYW5nZXMuYXBwZW5kKFtjLCBlbmQsICJoYW4iLCAiQ0pLIFVOSUZJRUQgSURFT0dSQVBILSJdKQorICAgICAgICBlbGlmIG5hbWUgPT0gIkhhbmd1bCBTeWxsYWJsZSI6CisgICAgICAgICAgX2FsZ19uYW1lc19yYW5nZXMuYXBwZW5kKFtjLCBlbmQsICJoYW5ndWwiXSkKKyAgICAgICAgbmFtZSA9ICIiCisgICAgICBlbHNlOgorICAgICAgICAjIElnbm9yZSBub24tbmFtZXMgbGlrZSA8Y29udHJvbD4uCisgICAgICAgIG5hbWUgPSAiIgorICAgIHByb3BzID0ge30KKyAgICBpZiBuYW1lOiBwcm9wc1sibmEiXSA9IG5hbWUKKyAgICBwcm9wc1siZ2MiXSA9IGZpZWxkc1syXQorICAgIGNjYyA9IGludChmaWVsZHNbM10pCisgICAgaWYgY2NjOiBwcm9wc1siY2NjIl0gPSBjY2MKKyAgICBwcm9wc1siYmMiXSA9IGZpZWxkc1s0XQorICAgICMgRGVjb21wb3NpdGlvbiB0eXBlICYgbWFwcGluZy4KKyAgICBkbSA9IGZpZWxkc1s1XQorICAgIGlmIGRtOgorICAgICAgaWYgZG0uc3RhcnRzd2l0aCgiPCIpOgorICAgICAgICBkdF9saW1pdCA9IGRtLmluZGV4KCI+IikKKyAgICAgICAgZHQgPSBOb3JtYWxpemVQcm9wZXJ0eVZhbHVlKGR0X3Byb3AsIGRtWzE6ZHRfbGltaXRdKQorICAgICAgICBkbSA9IGRtW2R0X2xpbWl0ICsgMTpdLmxzdHJpcCgpCisgICAgICBlbHNlOgorICAgICAgICBkdCA9ICJDYW4iCisgICAgICBwcm9wc1siZHQiXSA9IGR0CisgICAgICBwcm9wc1siZG0iXSA9IGRtCisgICAgIyBOdW1lcmljIHR5cGUgJiB2YWx1ZS4KKyAgICBkZWNpbWFsID0gZmllbGRzWzZdCisgICAgZGlnaXQgPSBmaWVsZHNbN10KKyAgICBudiA9IGZpZWxkc1s4XQorICAgIGlmIChkZWNpbWFsIGFuZCBkZWNpbWFsICE9IG52KSBvciAoZGlnaXQgYW5kIGRpZ2l0ICE9IG52KToKKyAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJlcnJvcjogbnVtZXJpYyB2YWx1ZXMgZGlmZmVyIGF0XG4gICVzXG4iICUgbGluZSkKKyAgICBpZiBudjoKKyAgICAgICMgTWFwIGltcHJvcGVyIGZyYWN0aW9ucyB0byBwcm9wZXIgb25lcy4KKyAgICAgICMgVSsxMDlGNyBNRVJPSVRJQyBDVVJTSVZFIEZSQUNUSU9OIFRXTyBUV0VMRlRIUworICAgICAgIyAuLiBVKzEwOUZGIE1FUk9JVElDIENVUlNJVkUgRlJBQ1RJT04gVEVOIFRXRUxGVEhTCisgICAgICBpZiBudiA9PSAiMi8xMiI6CisgICAgICAgIG52ID0gIjEvNiIKKyAgICAgIGVsaWYgbnYgPT0gIjMvMTIiOgorICAgICAgICBudiA9ICIxLzQiCisgICAgICBlbGlmIG52ID09ICI0LzEyIjoKKyAgICAgICAgbnYgPSAiMS8zIgorICAgICAgZWxpZiBudiA9PSAiNi8xMiI6CisgICAgICAgIG52ID0gIjEvMiIKKyAgICAgIGVsaWYgbnYgPT0gIjgvMTIiOgorICAgICAgICBudiA9ICIyLzMiCisgICAgICBlbGlmIG52ID09ICI5LzEyIjoKKyAgICAgICAgbnYgPSAiMy80IgorICAgICAgZWxpZiBudiA9PSAiMTAvMTIiOgorICAgICAgICBudiA9ICI1LzYiCisgICAgICBwcm9wc1sibnYiXSA9IG52CisgICAgICBwcm9wc1sibnQiXSA9ICJEZSIgaWYgZGVjaW1hbCBlbHNlICJEaSIgaWYgZGlnaXQgZWxzZSAiTnUiCisgICAgaWYgZmllbGRzWzldID09ICJZIjogcHJvcHNbIkJpZGlfTSJdID0gVHJ1ZQorICAgICMgSUNVIDQ5IGFuZCBhYm92ZSBkb2VzIG5vdCBzdXBwb3J0IFVuaWNvZGVfMV9OYW1lIGFueSBtb3JlLgorICAgICMgU2VlIHRpY2tldCAjOTAxMy4KKyAgICAjIG5hMSA9IGZpZWxkc1sxMF0KKyAgICAjIGlmIG5hMTogcHJvcHNbIm5hMSJdID0gbmExCisgICAgIyBJU09fQ29tbWVudCBpcyBkZXByZWNhdGVkIGFuZCBoYXMgbm8gdmFsdWVzLgorICAgICMgaXNjID0gZmllbGRzWzExXQorICAgICMgaWYgaXNjOiBwcm9wc1siaXNjIl0gPSBpc2MKKyAgICAjIFNpbXBsZSBjYXNlIG1hcHBpbmdzLgorICAgIHN1YyA9IGZpZWxkc1sxMl0KKyAgICBzbGMgPSBmaWVsZHNbMTNdCisgICAgc3RjID0gZmllbGRzWzE0XQorICAgIGlmIHN1YzogcHJvcHNbInN1YyJdID0gc3VjCisgICAgaWYgc2xjOiBwcm9wc1sic2xjIl0gPSBzbGMKKyAgICBpZiBzdGM6IHByb3BzWyJzdGMiXSA9IHN0YworICAgIFNldFByb3BzKGMsIGVuZCwgcHJvcHMpCisgIGlmIHJhbmdlX2ZpcnN0ID49IDA6CisgICAgcmFpc2UgU3ludGF4RXJyb3IoCisgICAgICAgICJlcnJvcjogdW50ZXJtaW5hdGVkIHJhbmdlIHN0YXJ0ZWQgYXRcbiAgJXNcbiIgJQorICAgICAgICByYW5nZV9maXJzdF9saW5lKQorICAjIEhhbmd1bCBzeWxsYWJsZXMgaGF2ZSBjYW5vbmljYWwgZGVjb21wb3NpdGlvbnMgd2hpY2ggYXJlIG5vdCBsaXN0ZWQgaW4gVW5pY29kZURhdGEudHh0LgorICBTZXRQcm9wZXJ0eVZhbHVlKCJkdCIsICJDYW4iLCAweGFjMDAsIDB4ZDdhMykKKyAgX2FsZ19uYW1lc19yYW5nZXMuc29ydCgpCisKKworX25hbWVzX2gxX3JlID0gcmUuY29tcGlsZSgiQEBcdChbMC05YS1mQS1GXSspXHQoLis/KVx0KFswLTlhLWZBLUZdKykkIikKK19uYW1lc19oMl9yZSA9IHJlLmNvbXBpbGUoIkBcdFx0KC4rKSIpCitfbmFtZXNfY2hhcl9yZSA9IHJlLmNvbXBpbGUoIihbMC05YS1mQS1GXSspXHQuKyIpCisKK2RlZiBQYXJzZU5hbWVzTGlzdChpbl9maWxlKToKKyAgcGVuZGluZ19oMiA9ICIiCisgIGZvciBsaW5lIGluIGluX2ZpbGU6CisgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgIG1hdGNoID0gX25hbWVzX2gxX3JlLm1hdGNoKGxpbmUpCisgICAgaWYgbWF0Y2g6CisgICAgICBwZW5kaW5nX2gyID0gIiIgICMgRHJvcCBhIHBlbmRpbmcgaDIgd2hlbiB3ZSBnZXQgdG8gYW4gaDEuCisgICAgICBzdGFydCA9IGludChtYXRjaC5ncm91cCgxKSwgMTYpCisgICAgICBlbmQgPSBpbnQobWF0Y2guZ3JvdXAoMyksIDE2KQorICAgICAgY29tbWVudCA9IG1hdGNoLmdyb3VwKDIpLnJlcGxhY2UodSJceGEwIiwgIiAiKQorICAgICAgX2gxLmFwcGVuZCgoc3RhcnQsIGVuZCwgY29tbWVudCkpCisgICAgICBjb250aW51ZQorICAgIG1hdGNoID0gX25hbWVzX2gyX3JlLm1hdGNoKGxpbmUpCisgICAgaWYgbWF0Y2g6CisgICAgICBwZW5kaW5nX2gyID0gbWF0Y2guZ3JvdXAoMSkucmVwbGFjZSh1Ilx4YTAiLCAiICIpCisgICAgICBjb250aW51ZQorICAgIGlmIHBlbmRpbmdfaDI6CisgICAgICBtYXRjaCA9IF9uYW1lc19jaGFyX3JlLm1hdGNoKGxpbmUpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgYyA9IGludChtYXRjaC5ncm91cCgxKSwgMTYpCisgICAgICAgIF9oMi5hcHBlbmQoKGMsIHBlbmRpbmdfaDIpKQorICAgICAgICBwZW5kaW5nX2gyID0gIiIKKyAgX2gxLnNvcnQoKQorICBfaDIuc29ydCgpCisKKworZGVmIFBhcnNlTmFtZWRQcm9wZXJ0aWVzKGluX2ZpbGUpOgorICAiIiJQYXJzZXMgYSAudHh0IGZpbGUgd2hlcmUgdGhlIGZpcnN0IGNvbHVtbiBpcyBhIGNvZGUgcG9pbnQgcmFuZ2UKKyAgYW5kIHRoZSBzZWNvbmQgY29sdW1uIGlzIGEgcHJvcGVydHkgbmFtZS4KKyAgU2V0cyBiaW5hcnkgcHJvcGVydGllcyB0byBUcnVlLAorICBhbmQgb3RoZXIgcHJvcGVydGllcyB0byB0aGUgdmFsdWVzIGluIHRoZSB0aGlyZCBjb2x1bW4uIiIiCisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgaWYgZGF0YVswXSA9PSAibWlzc2luZyI6CisgICAgICBTZXREZWZhdWx0VmFsdWUoZGF0YVsyXVswXSwgZGF0YVsyXVsxXSkKKyAgICBlbHNlOgorICAgICAgIyB0eXBlID09ICJyYW5nZSIKKyAgICAgIGlmIGxlbihkYXRhWzRdKSA9PSAyOgorICAgICAgICBTZXRCaW5hcnlQcm9wZXJ0eVRvVHJ1ZShkYXRhWzRdWzFdLCBkYXRhWzJdLCBkYXRhWzNdKQorICAgICAgZWxzZToKKyAgICAgICAgU2V0UHJvcGVydHlWYWx1ZShkYXRhWzRdWzFdLCBkYXRhWzRdWzJdLCBkYXRhWzJdLCBkYXRhWzNdKQorCisKK2RlZiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsIHBuYW1lKToKKyAgIiIiUGFyc2VzIGEgLnR4dCBmaWxlIHdoZXJlIHRoZSBmaXJzdCBjb2x1bW4gaXMgYSBjb2RlIHBvaW50IHJhbmdlCisgIGFuZCB0aGUgc2Vjb25kIGNvbHVtbiBpcyB0aGUgdmFsdWUgb2YgYSBrbm93biBwcm9wZXJ0eS4iIiIKKyAgcHJvcCA9IEdldFByb3BlcnR5KHBuYW1lKQorICBmb3IgZGF0YSBpbiBSZWFkVUNETGluZXMoaW5fZmlsZSwgd2FudF9taXNzaW5nPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gIm1pc3NpbmciOgorICAgICAgU2V0RGVmYXVsdFZhbHVlKHBuYW1lLCBkYXRhWzJdWzBdKQorICAgIGVsc2U6CisgICAgICAjIHR5cGUgPT0gInJhbmdlIgorICAgICAgU2V0UHJvcFZhbHVlKHByb3AsIGRhdGFbNF1bMV0sIGRhdGFbMl0sIGRhdGFbM10pCisKKworZGVmIFBhcnNlQmlkaU1pcnJvcmluZyhpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiYm1nIikKK2RlZiBQYXJzZURlcml2ZWRBZ2UoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgImFnZSIpCitkZWYgUGFyc2VEZXJpdmVkQmlkaUNsYXNzKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJiYyIpCitkZWYgUGFyc2VEZXJpdmVkSm9pbmluZ0dyb3VwKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJqZyIpCitkZWYgUGFyc2VEZXJpdmVkSm9pbmluZ1R5cGUoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgImp0IikKK2RlZiBQYXJzZUVhc3RBc2lhbldpZHRoKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJlYSIpCitkZWYgUGFyc2VHcmFwaGVtZUJyZWFrUHJvcGVydHkoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgIkdDQiIpCitkZWYgUGFyc2VJbmRpY1Bvc2l0aW9uYWxDYXRlZ29yeShpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiSW5QQyIpCitkZWYgUGFyc2VJbmRpY1N5bGxhYmljQ2F0ZWdvcnkoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgIkluU0MiKQorZGVmIFBhcnNlTGluZUJyZWFrKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJsYiIpCitkZWYgUGFyc2VTY3JpcHRzKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJzYyIpCitkZWYgUGFyc2VTY3JpcHRFeHRlbnNpb25zKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJzY3giKQorZGVmIFBhcnNlU2VudGVuY2VCcmVhayhpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiU0IiKQorZGVmIFBhcnNlV29yZEJyZWFrKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJXQiIpCisKKworZGVmIERvU2V0TmFtZUFsaWFzKGFsaWFzLCBzdGFydCwgZW5kLCBjX3Byb3BzKToKKyAgaWYgIk5hbWVfQWxpYXMiIGluIGNfcHJvcHM6CisgICAgY19wcm9wc1siTmFtZV9BbGlhcyJdICs9ICcsJyArIGFsaWFzCisgIGVsc2U6CisgICAgY19wcm9wc1siTmFtZV9BbGlhcyJdID0gYWxpYXMKKworCitkZWYgUGFyc2VOYW1lQWxpYXNlcyhpbl9maWxlKToKKyAgIiIiUGFyc2VzIE5hbWVfQWxpYXMgZnJvbSBOYW1lQWxpYXNlcy50eHQuCisgIEEgY2hhcmFjdGVyIGNhbiBoYXZlIG11bHRpcGxlIGFsaWFzZXMuCisKKyAgSW4gVW5pY29kZSA2LjAsIHRoZXJlIGFyZSB0d28gY29sdW1ucywKKyAgd2l0aCBhIG5hbWUgY29ycmVjdGlvbiBpbiB0aGUgc2Vjb25kIGNvbHVtbi4KKworICBJbiBVbmljb2RlIDYuMSwgdGhlcmUgYXJlIHRocmVlIGNvbHVtbnMuCisgIFRoZSBzZWNvbmQgY29udGFpbnMgYW4gYWxpYXMsIHRoZSB0aGlyZCBpdHMgdHlwZS4KKyAgVGhlIGRvY3VtZW50ZWQgdHlwZXMgYXJlOgorICAgIGNvcnJlY3Rpb24sIGNvbnRyb2wsIGFsdGVybmF0ZSwgZmlnbWVudCwgYWJicmV2aWF0aW9uCisKKyAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzb3J0IHRoZSB0eXBlcywgYXNzdW1pbmcgdGhleSBhcHBlYXIgaW4gdGhpcyBvcmRlci4iIiIKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUpOgorICAgIHN0YXJ0ID0gZGF0YVsyXQorICAgIGVuZCA9IGRhdGFbM10KKyAgICBpZiBzdGFydCAhPSBlbmQ6CisgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOYW1lQWxpYXNlcy50eHQgaGFzIGFuIGFsaWFzIGZvciBhIHJhbmdlICUwNGxYLi4lMDRsWCIgJQorICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnQsIGVuZCkpCisgICAgZmllbGRzID0gZGF0YVs0XQorICAgIGlmIGxlbihmaWVsZHMpID09IDI6CisgICAgICBhbGlhcyA9ICJjb3JyZWN0aW9uPSIgKyBmaWVsZHNbMV0KKyAgICBlbHNlOgorICAgICAgYWxpYXMgPSBmaWVsZHNbMl0gKyAnPScgKyBmaWVsZHNbMV0KKyAgICB1cGRhdGUgPSAoTmVlZFRvU2V0QWx3YXlzLCBEb1NldE5hbWVBbGlhcywgYWxpYXMpCisgICAgVXBkYXRlUHJvcHMoc3RhcnQsIGVuZCwgdXBkYXRlKQorCisKK2RlZiBOZWVkVG9TZXROdW1lcmljVmFsdWUobnYsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICBjX252ID0gY19wcm9wcy5nZXQoIm52IikKKyAgaWYgY19udiA9PSBOb25lOgorICAgICMgRGVyaXZlZE51bWVyaWNWYWx1ZXMudHh0IGFkZHMgYSBOdW1lcmljX1ZhbHVlLgorICAgIGFzc2VydCAibnQiIG5vdCBpbiBjX3Byb3BzCisgICAgcmV0dXJuIFRydWUKKyAgaWYgbnYgIT0gY19udjoKKyAgICByYWlzZSBWYWx1ZUVycm9yKCgiVW5pY29kZURhdGEudHh0IGhhcyBudj0lcyBmb3IgJTA0bFguLiUwNGxYICIgKworICAgICAgICAgICAgICAgICAgICAgImJ1dCBEZXJpdmVkTnVtZXJpY1ZhbHVlcy50eHQgaGFzIG52PSVzIikgJQorICAgICAgICAgICAgICAgICAgICAgKGNfbnYsIHN0YXJ0LCBlbmQsIG52KSkKKyAgcmV0dXJuIEZhbHNlCisKKworZGVmIERvU2V0TnVtZXJpY1ZhbHVlKG52LCBzdGFydCwgZW5kLCBjX3Byb3BzKToKKyAgY19wcm9wcy51cGRhdGUoeyJudCI6ICJOdSIsICJudiI6IG52fSkKKworCitkZWYgUGFyc2VEZXJpdmVkTnVtZXJpY1ZhbHVlcyhpbl9maWxlKToKKyAgIiIiUGFyc2VzIERlcml2ZWROdW1lcmljVmFsdWVzLnR4dC4KKyAgRm9yIG1vc3QgY2hhcmFjdGVycywgdGhlIG51bWVyaWMgdHlwZSAmIHZhbHVlIHdlcmUgcGFyc2VkIHByZXZpb3VzbHkKKyAgZnJvbSBVbmljb2RlRGF0YS50eHQgYnV0IHRoYXQgZG9lcyBub3Qgc2hvdyB0aGUgdmFsdWVzIGZvciBIYW4gY2hhcmFjdGVycy4KKyAgSGVyZSB3ZSBjaGVjayB0aGF0IHZhbHVlcyBtYXRjaCB0aG9zZSBmcm9tIFVuaWNvZGVEYXRhLnR4dAorICBhbmQgYWRkIG5ldyBvbmVzLiIiIgorICAjIElnbm9yZSB0aGUgQG1pc3NpbmcgbGluZSB3aGljaCBoYXMgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBmaWVsZHMsCisgICMgYW5kIHRoZSAiTmFOIiBpbiB0aGUgd3JvbmcgZmllbGQgKGF0IGxlYXN0IGluIFVuaWNvZGUgNS4xLi42LjEpLgorICAjIEFsc28sICJOYU4iIGlzIGp1c3QgdGhlIE51bWVyaWMgbnVsbCB2YWx1ZSBhbnl3YXkuCisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlKToKKyAgICAjIENvbmRpdGlvbmFsIHVwZGF0ZSB0byB0aGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgNHRoIGZpZWxkLgorICAgIHVwZGF0ZSA9IChOZWVkVG9TZXROdW1lcmljVmFsdWUsIERvU2V0TnVtZXJpY1ZhbHVlLCBkYXRhWzRdWzNdKQorICAgIFVwZGF0ZVByb3BzKGRhdGFbMl0sIGRhdGFbM10sIHVwZGF0ZSkKKworCitkZWYgUGFyc2VDYXNlRm9sZGluZyhpbl9maWxlKToKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfbWlzc2luZz1UcnVlKToKKyAgICBpZiBkYXRhWzBdID09ICJtaXNzaW5nIjoKKyAgICAgIGFzc2VydCBkYXRhWzJdWzBdID09ICJDIiAgIyBjb21tb24gdG8gc2NmICYgY2YKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgic2NmIiwgZGF0YVsyXVsxXSkKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgiY2YiLCBkYXRhWzJdWzFdKQorICAgIGVsc2U6CisgICAgICAjIHR5cGUgPT0gInJhbmdlIgorICAgICAgc3RhcnQgPSBkYXRhWzJdCisgICAgICBlbmQgPSBkYXRhWzNdCisgICAgICBzdGF0dXMgPSBkYXRhWzRdWzFdCisgICAgICBtYXBwaW5nID0gZGF0YVs0XVsyXQorICAgICAgYXNzZXJ0IHN0YXR1cyBpbiAiQ1NGVCIKKyAgICAgIGlmIHN0YXR1cyA9PSAiQyI6CisgICAgICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHsic2NmIjogbWFwcGluZywgImNmIjogbWFwcGluZ30pCisgICAgICBlbGlmIHN0YXR1cyA9PSAiUyI6CisgICAgICAgIFNldFByb3BlcnR5VmFsdWUoInNjZiIsIG1hcHBpbmcsIHN0YXJ0LCBlbmQpCisgICAgICBlbGlmIHN0YXR1cyA9PSAiRiI6CisgICAgICAgIFNldFByb3BlcnR5VmFsdWUoImNmIiwgbWFwcGluZywgc3RhcnQsIGVuZCkKKyAgICAgIGVsc2U6ICAjIHN0YXR1cyA9PSAiVCIKKyAgICAgICAgU2V0UHJvcGVydHlWYWx1ZSgiVHVya2ljX0Nhc2VfRm9sZGluZyIsIG1hcHBpbmcsIHN0YXJ0LCBlbmQpCisKKworZGVmIERvU2V0Q29uZGl0aW9uYWxDYXNlTWFwcGluZ3MoY2NtLCBzdGFydCwgZW5kLCBjX3Byb3BzKToKKyAgaWYgIkNvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3MiIGluIGNfcHJvcHM6CisgICAgY19wcm9wc1siQ29uZGl0aW9uYWxfQ2FzZV9NYXBwaW5ncyJdICs9ICcsJyArIGNjbQorICBlbHNlOgorICAgIGNfcHJvcHNbIkNvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3MiXSA9IGNjbQorCisKK2RlZiBQYXJzZVNwZWNpYWxDYXNpbmcoaW5fZmlsZSk6CisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgaWYgZGF0YVswXSA9PSAibWlzc2luZyI6CisgICAgICBTZXREZWZhdWx0VmFsdWUoImxjIiwgZGF0YVsyXVswXSkKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgidGMiLCBkYXRhWzJdWzFdKQorICAgICAgU2V0RGVmYXVsdFZhbHVlKCJ1YyIsIGRhdGFbMl1bMl0pCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAicmFuZ2UiCisgICAgICBzdGFydCA9IGRhdGFbMl0KKyAgICAgIGVuZCA9IGRhdGFbM10KKyAgICAgIGZpZWxkcyA9IGRhdGFbNF0KKyAgICAgIGlmIGxlbihmaWVsZHMpIDwgNSBvciBub3QgZmllbGRzWzRdOgorICAgICAgICAjIFVuY29uZGl0aW9uYWwgbWFwcGluZ3MuCisgICAgICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHsibGMiOiBmaWVsZHNbMV0sICJ0YyI6IGZpZWxkc1syXSwgInVjIjogZmllbGRzWzNdfSkKKyAgICAgIGVsc2U6CisgICAgICAgICMgQ29uZGl0aW9uYWxfQ2FzZV9NYXBwaW5ncworICAgICAgICBjY20gPSAoZmllbGRzWzRdICsgIjpsYz0iICsgZmllbGRzWzFdICsKKyAgICAgICAgICAgICAgICImdGM9IiArIGZpZWxkc1syXSArICImdWM9IiArIGZpZWxkc1szXSkKKyAgICAgICAgdXBkYXRlID0gKE5lZWRUb1NldEFsd2F5cywgRG9TZXRDb25kaXRpb25hbENhc2VNYXBwaW5ncywgY2NtKQorICAgICAgICBVcGRhdGVQcm9wcyhzdGFydCwgZW5kLCB1cGRhdGUpCisKKworZGVmIFBhcnNlQmlkaUJyYWNrZXRzKGluX2ZpbGUpOgorICBmb3IgZGF0YSBpbiBSZWFkVUNETGluZXMoaW5fZmlsZSwgd2FudF9taXNzaW5nPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gIm1pc3NpbmciOgorICAgICAgU2V0RGVmYXVsdFZhbHVlKCJicHQiLCBkYXRhWzJdWzFdKQorICAgIGVsc2U6CisgICAgICAjIHR5cGUgPT0gInJhbmdlIgorICAgICAgc3RhcnQgPSBkYXRhWzJdCisgICAgICBlbmQgPSBkYXRhWzNdCisgICAgICBhc3NlcnQgc3RhcnQgPT0gZW5kCisgICAgICBtYXBwaW5nID0gZGF0YVs0XVsxXQorICAgICAgYnJhY2tldF90eXBlID0gZGF0YVs0XVsyXQorICAgICAgU2V0UHJvcHMoc3RhcnQsIGVuZCwgeyJicGIiOiBtYXBwaW5nLCAiYnB0IjogYnJhY2tldF90eXBlfSkKKworIyBQb3N0cHJvY2Vzc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworZGVmIENvbXBhY3RCbG9jayhiLCBpKToKKyAgYXNzZXJ0IGJbMF0gPT0gX3N0YXJ0c1tpXQorICBvcmlnX2kgPSBpCisgICMgQ291bnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBlYWNoIHByb3BlcnR5J3MgdmFsdWUgaW4gdGhpcyBibG9jay4KKyAgIyBUbyBtaW5pbWl6ZSB0aGUgb3V0cHV0LCBjb3VudCB0aGUgbnVtYmVyIG9mIHJhbmdlcywKKyAgIyBub3QgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cy4KKyAgbnVtX3Jhbmdlc19zb19mYXIgPSAwCisgIHByb3BfY291bnRlcnMgPSB7fQorICB3aGlsZSBUcnVlOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIGlmIHN0YXJ0ID4gYlsxXTogYnJlYWsKKyAgICBwcm9wcyA9IF9wcm9wc1tpXQorICAgIGZvciAocG5hbWUsIHZhbHVlKSBpbiBwcm9wcy5pdGVyaXRlbXMoKToKKyAgICAgIGlmIHBuYW1lIGluIHByb3BfY291bnRlcnM6CisgICAgICAgIGNvdW50ZXIgPSBwcm9wX2NvdW50ZXJzW3BuYW1lXQorICAgICAgZWxzZToKKyAgICAgICAgY291bnRlciA9IHtfbnVsbF9vcl9kZWZhdWx0c1twbmFtZV06IG51bV9yYW5nZXNfc29fZmFyfQorICAgICAgICBwcm9wX2NvdW50ZXJzW3BuYW1lXSA9IGNvdW50ZXIKKyAgICAgIGlmIHZhbHVlIGluIGNvdW50ZXI6CisgICAgICAgIGNvdW50ZXJbdmFsdWVdICs9IDEKKyAgICAgIGVsc2U6CisgICAgICAgIGNvdW50ZXJbdmFsdWVdID0gMQorICAgICMgQWxzbyBjb3VudCBkZWZhdWx0IHZhbHVlcyBmb3IgcHJvcGVydGllcyB0aGF0IGRvIG5vdCBvY2N1ciBpbiBhIHJhbmdlLgorICAgIGZvciBwbmFtZSBpbiBwcm9wX2NvdW50ZXJzOgorICAgICAgaWYgcG5hbWUgbm90IGluIHByb3BzOgorICAgICAgICBjb3VudGVyID0gcHJvcF9jb3VudGVyc1twbmFtZV0KKyAgICAgICAgdmFsdWUgPSBfbnVsbF9vcl9kZWZhdWx0c1twbmFtZV0KKyAgICAgICAgY291bnRlclt2YWx1ZV0gKz0gMQorICAgIG51bV9yYW5nZXNfc29fZmFyICs9IDEKKyAgICAjIEludmFyaWFudDogRm9yIGVhY2ggY291bnRlciwgdGhlIHN1bSBvZiBjb3VudHMgbXVzdCBlcXVhbCBudW1fcmFuZ2VzX3NvX2Zhci4KKyAgICBpICs9IDEKKyAgIyBGb3IgZWFjaCBwcm9wZXJ0eSB0aGF0IG9jY3VycyB3aXRoaW4gdGhpcyBibG9jaywKKyAgIyBzZXQgdGhlIG1vc3QgY29tbW9uIHZhbHVlIGFzIGEgYmxvY2sgcHJvcGVydHkgdmFsdWUuCisgIGJfcHJvcHMgPSBiWzJdCisgIGZvciAocG5hbWUsIGNvdW50ZXIpIGluIHByb3BfY291bnRlcnMuaXRlcml0ZW1zKCk6CisgICAgbWF4X3ZhbHVlID0gTm9uZQorICAgIG1heF9jb3VudCA9IDAKKyAgICBudW1fdW5pcXVlID0gMAorICAgIGZvciAodmFsdWUsIGNvdW50KSBpbiBjb3VudGVyLml0ZXJpdGVtcygpOgorICAgICAgaWYgY291bnQgPiBtYXhfY291bnQ6CisgICAgICAgIG1heF92YWx1ZSA9IHZhbHVlCisgICAgICAgIG1heF9jb3VudCA9IGNvdW50CisgICAgICBpZiBjb3VudCA9PSAxOiBudW1fdW5pcXVlICs9IDEKKyAgICBpZiBtYXhfdmFsdWUgIT0gX251bGxfb3JfZGVmYXVsdHNbcG5hbWVdOgorICAgICAgIyBBdm9pZCBwaWNraW5nIHJhbmRvbWx5IGFtb25nIHNldmVyYWwgdW5pcXVlIHZhbHVlcy4KKyAgICAgIGlmIChtYXhfY291bnQgPiAxIG9yIG51bV91bmlxdWUgPT0gMSk6CisgICAgICAgIGJfcHJvcHNbcG5hbWVdID0gbWF4X3ZhbHVlCisgICMgRm9yIGVhY2ggcmFuZ2UgYW5kIHByb3BlcnR5LCByZW1vdmUgdGhlIGRlZmF1bHQrYmxvY2sgdmFsdWUKKyAgIyBidXQgc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoYXQgcHJvcGVydHkgd2FzIG5vdCBzZXQKKyAgIyAoaS5lLiwgaXQgdXNlZCB0byBpbmhlcml0IHRoZSBkZWZhdWx0IHZhbHVlKS4KKyAgYl9kZWZhdWx0cyA9IF9udWxsX29yX2RlZmF1bHRzLmNvcHkoKQorICBiX2RlZmF1bHRzLnVwZGF0ZShiX3Byb3BzKQorICBpID0gb3JpZ19pCisgIHdoaWxlIFRydWU6CisgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgaWYgc3RhcnQgPiBiWzFdOiBicmVhaworICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgZm9yIHBuYW1lIGluIHByb3BfY291bnRlcnM6CisgICAgICBpZiBwbmFtZSBpbiBwcm9wczoKKyAgICAgICAgaWYgcHJvcHNbcG5hbWVdID09IGJfZGVmYXVsdHNbcG5hbWVdOiBkZWwgcHJvcHNbcG5hbWVdCisgICAgICBlbGlmIHBuYW1lIGluIGJfcHJvcHM6CisgICAgICAgICMgYl9wcm9wcyBvbmx5IGhhcyBub24tZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIGl0IHVzZWQgdG8gYmUgaW5oZXJpdGVkLgorICAgICAgICBwcm9wc1twbmFtZV0gPSBfbnVsbF9vcl9kZWZhdWx0c1twbmFtZV0KKyAgICBpICs9IDEKKyAgIyBSZXR1cm4gdGhlIF9zdGFydHMgaW5kZXggb2YgdGhlIGZpcnN0IHJhbmdlIGFmdGVyIHRoaXMgYmxvY2suCisgIHJldHVybiBpCisKKworZGVmIENvbXBhY3ROb25CbG9jayhsaW1pdCwgaSk6CisgICIiIlJlbW92ZSBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBmcm9tIGJldHdlZW4tYmxvY2sgcmFuZ2VzLiIiIgorICB3aGlsZSBUcnVlOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIGlmIHN0YXJ0ID49IGxpbWl0OiBicmVhaworICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgZm9yIHBuYW1lIGluIHByb3BzLmtleXMoKTogICMgLmtleXMoKSBpcyBhIGNvcHkgc28gd2UgY2FuIGRlbCBwcm9wc1twbmFtZV0uCisgICAgICBpZiBwcm9wc1twbmFtZV0gPT0gX251bGxfb3JfZGVmYXVsdHNbcG5hbWVdOiBkZWwgcHJvcHNbcG5hbWVdCisgICAgaSArPSAxCisgICMgUmV0dXJuIHRoZSBfc3RhcnRzIGluZGV4IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGlzIGJsb2NrLgorICByZXR1cm4gaQorCisKK2RlZiBDb21wYWN0QmxvY2tzKCk6CisgICIiIk9wdGltaXplcyBibG9jayBwcm9wZXJ0aWVzLgorICBTZXRzIHByb3BlcnRpZXMgb24gYmxvY2tzIHRvIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgdmFsdWVzLAorICBhbmQgcmVtb3ZlcyBkZWZhdWx0K2Jsb2NrIHZhbHVlcyBmcm9tIGNvZGUgcG9pbnQgcHJvcGVydGllcy4iIiIKKyAgIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBhIGJvdW5kYXJ5IGluIF9zdGFydHMgZm9yIGVhY2ggYmxvY2sKKyAgIyBzbyB0aGF0IHRoZSBzaW1wbGUgbWl4aW5nIG1ldGhvZCBiZWxvdyB3b3Jrcy4KKyAgZm9yIGIgaW4gX2Jsb2NrczogQWRkQm91bmRhcnkoYlswXSkKKyAgIyBXYWxrIHRocm91Z2ggcmFuZ2VzIGFuZCBibG9ja3MgdG9nZXRoZXIuCisgIGkgPSAwCisgIGZvciBiIGluIF9ibG9ja3M6CisgICAgYl9zdGFydCA9IGJbMF0KKyAgICBpZiBfc3RhcnRzW2ldIDwgYl9zdGFydDoKKyAgICAgIGkgPSBDb21wYWN0Tm9uQmxvY2soYl9zdGFydCwgaSkKKyAgICBpID0gQ29tcGFjdEJsb2NrKGIsIGkpCisgIENvbXBhY3ROb25CbG9jaygweDExMDAwMCwgaSkKKworIyBPdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworZGVmIEFwcGVuZFJhbmdlKGZpZWxkcywgc3RhcnQsIGVuZCk6CisgIGlmIHN0YXJ0ID09IGVuZDoKKyAgICBmaWVsZHMuYXBwZW5kKCIlMDRsWCIgJSBzdGFydCkKKyAgZWxzZToKKyAgICBmaWVsZHMuYXBwZW5kKCIlMDRsWC4uJTA0bFgiICUgKHN0YXJ0LCBlbmQpKQorCisKK2RlZiBBcHBlbmRQcm9wcyhmaWVsZHMsIHByb3BzKToKKyAgIyBTb3J0IHByb3BlcnR5IG5hbWVzIChwcm9wcyBrZXlzKSBieSB0aGVpciBub3JtYWxpemVkIGZvcm1zCisgICMgYW5kIG91dHB1dCBwcm9wZXJ0aWVzIGluIHRoYXQgb3JkZXIuCisgIGZvciBwbmFtZSBpbiBzb3J0ZWQocHJvcHMsIGtleT1Ob3JtUHJvcE5hbWUpOgorICAgIHZhbHVlID0gcHJvcHNbcG5hbWVdCisgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisgICAgICBpZiBub3QgdmFsdWU6IHBuYW1lID0gIi0iICsgcG5hbWUKKyAgICAgIGZpZWxkcy5hcHBlbmQocG5hbWUpCisgICAgZWxzZToKKyAgICAgIGZpZWxkcy5hcHBlbmQoIiVzPSVzIiAlIChwbmFtZSwgdmFsdWUpKQorCisKK2RlZiBXcml0ZUZpZWxkc1JhbmdlUHJvcHMoZmllbGRzLCBzdGFydCwgZW5kLCBwcm9wcywgb3V0X2ZpbGUpOgorICBBcHBlbmRSYW5nZShmaWVsZHMsIHN0YXJ0LCBlbmQpCisgIEFwcGVuZFByb3BzKGZpZWxkcywgcHJvcHMpCisgIG91dF9maWxlLndyaXRlKCI7Ii5qb2luKGZpZWxkcykpCisgIG91dF9maWxlLndyaXRlKCJcbiIpCisKKworZGVmIEVzY2FwZU5vbkFTQ0lJKHMpOgorICBpID0gMAorICB3aGlsZSBpIDwgbGVuKHMpOgorICAgIGMgPSBvcmQoc1tpXSkKKyAgICBpZiBjIDw9IDB4N2Y6CisgICAgICBpID0gaSArIDEKKyAgICBlbHNlOgorICAgICAgaWYgYyA8PSAweGZmZmY6CisgICAgICAgIGVzYyA9IHUiXFx1JTA0WCIgJSBjCisgICAgICBlbHNlOgorICAgICAgICBlc2MgPSB1IlxcVSUwOFgiICUgYworICAgICAgcyA9IHNbOmldICsgZXNjICsgc1tpKzE6XQorICAgICAgaSA9IGkgKyBsZW4oZXNjKQorICByZXR1cm4gcworCisKK2RlZiBXcml0ZVByZXBhcnNlZFVDRChvdXRfZmlsZSk6CisgIGdsb2JhbCBfY29weXJpZ2h0LCBfdGVybXNfb2ZfdXNlCisgIG91dF9maWxlLndyaXRlKCIjIFByZXBhcnNlZCBVQ0QgZ2VuZXJhdGVkIGJ5IElDVSBwcmVwYXJzZXVjZC5weVxuIik7CisgIGlmIG5vdCBfY29weXJpZ2h0OgorICAgIF9jb3B5cmlnaHQgPSAiIyBDb3B5cmlnaHQgKGMpIDE5OTEtIiArIF9jdXJyZW50X3llYXIgKyAiIFVuaWNvZGUsIEluYy4iCisgIG91dF9maWxlLndyaXRlKF9jb3B5cmlnaHQgKyAiXG4iKQorICBpZiBfdGVybXNfb2ZfdXNlOiBvdXRfZmlsZS53cml0ZShfdGVybXNfb2ZfdXNlICsgIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoInVjZDslc1xuXG4iICUgX3VjZF92ZXJzaW9uKQorICAjIFNvcnQgcHJvcGVydHkgbmFtZXMgKHByb3BzIGtleXMpIGJ5IHRoZWlyIG5vcm1hbGl6ZWQgZm9ybXMKKyAgIyBhbmQgb3V0cHV0IHByb3BlcnRpZXMgaW4gdGhhdCBvcmRlci4KKyAgcG5hbWVzID0gc29ydGVkKF9udWxsX3ZhbHVlcywga2V5PU5vcm1Qcm9wTmFtZSkKKyAgZm9yIHBuYW1lIGluIHBuYW1lczoKKyAgICBwcm9wID0gX3Byb3BlcnRpZXNbcG5hbWVdCisgICAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJwcm9wZXJ0eSIsIHByb3BbMF1dICsgcHJvcFsxXSkpCisgICAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJiaW5hcnkiXSArIF9iaW5hcnlfdmFsdWVzWyJOIl0pKQorICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICBvdXRfZmlsZS53cml0ZSgiOyIuam9pbihbImJpbmFyeSJdICsgX2JpbmFyeV92YWx1ZXNbIlkiXSkpCisgIG91dF9maWxlLndyaXRlKCJcbiIpCisgIGZvciBwbmFtZSBpbiBwbmFtZXM6CisgICAgcHJvcCA9IF9wcm9wZXJ0aWVzW3BuYW1lXQorICAgIHNob3J0X25hbWVzID0gcHJvcFsyXQorICAgIGlmIHNob3J0X25hbWVzIGFuZCBwcm9wWzBdICE9ICJCaW5hcnkiOgorICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNob3J0X25hbWVzKToKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJ2YWx1ZSIsIHByb3BbMV1bMF1dICsgcHJvcFszXVtuYW1lXSkpCisgICAgICAgIG91dF9maWxlLndyaXRlKCJcbiIpCisgIG91dF9maWxlLndyaXRlKCJcbiIpCisgICMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBib3VuZGFyeSBpbiBfc3RhcnRzIGZvciBlYWNoCisgICMgcmFuZ2Ugb2YgZGF0YSB3ZSBtaXggaW50byB0aGUgb3V0cHV0LAorICAjIHNvIHRoYXQgdGhlIHNpbXBsZSBtaXhpbmcgbWV0aG9kIGJlbG93IHdvcmtzLgorICBmb3IgYiBpbiBfYmxvY2tzOiBBZGRCb3VuZGFyeShiWzBdKQorICBmb3IgciBpbiBfYWxnX25hbWVzX3JhbmdlczogQWRkQm91bmRhcnkoclswXSkKKyAgZm9yIGggaW4gX2gxOiBBZGRCb3VuZGFyeShoWzBdKQorICBmb3IgaCBpbiBfaDI6IEFkZEJvdW5kYXJ5KGhbMF0pCisgICMgV3JpdGUgdGhlIHByZXBhcnNlZCBkYXRhLgorICAjIFRPRE86IGRvYyBzeW50YXgKKyAgIyAtIHBwdWNkLnR4dCA9IHByZXBhcnNlZCBVQ0QKKyAgIyAtIE9ubHkgd2hvbGUtbGluZSBjb21tZW50cyBzdGFydGluZyB3aXRoICMsIG5vIGlubGluZSBjb21tZW50cy4KKyAgIyAtIGRlZmF1bHRzIG11c3QgcHJlY2VkZSBhbnkgYmxvY2sgb3IgY3AgbGluZXMKKyAgIyAtIGJsb2NrO2EuLmIgbXVzdCBwcmVjZWRlIGFueSBjcCBsaW5lcyB3aXRoIGNvZGUgcG9pbnRzIGluIGEuLmIKKyAgIyAtIFNvbWUgY29kZSBtYXkgcmVxdWlyZSB0aGF0IGFsbCBjcCBsaW5lcyB3aXRoIGNvZGUgcG9pbnRzIGluIGEuLmIKKyAgIyAgIGFwcGVhciBiZXR3ZWVuIGJsb2NrO2EuLmIgYW5kIHRoZSBuZXh0IGJsb2NrIGxpbmUuCisgICMgLSBibG9jayBsaW5lcyBhcmUgbm90IHJlcXVpcmVkOyBjcCBsaW5lcyBjYW4gaGF2ZSBkYXRhIGZvcgorICAjICAgcmFuZ2VzIG91dHNpZGUgb2YgYmxvY2tzLgorICBXcml0ZUZpZWxkc1JhbmdlUHJvcHMoWyJkZWZhdWx0cyJdLCAwLCAweDEwZmZmZiwgX2RlZmF1bHRzLCBvdXRfZmlsZSkKKyAgaV9ibG9ja3MgPSAwCisgIGlfYWxnID0gMAorICBpX2gxID0gMAorICBpX2gyID0gMAorICBmb3IgaSBpbiB4cmFuZ2UobGVuKF9zdGFydHMpIC0gMSk6CisgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgZW5kID0gX3N0YXJ0c1tpICsgMV0gLSAxCisgICAgIyBCbG9jayB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy4KKyAgICBpZiBpX2Jsb2NrcyA8IGxlbihfYmxvY2tzKSBhbmQgc3RhcnQgPT0gX2Jsb2Nrc1tpX2Jsb2Nrc11bMF06CisgICAgICBiID0gX2Jsb2Nrc1tpX2Jsb2Nrc10KKyAgICAgIFdyaXRlRmllbGRzUmFuZ2VQcm9wcyhbIlxuYmxvY2siXSwgYlswXSwgYlsxXSwgYlsyXSwgb3V0X2ZpbGUpCisgICAgICBpX2Jsb2NrcyArPSAxCisgICAgIyBOYW1lc0xpc3QgaDEgaGVhZGluZyAoZm9yIFttb3N0IG9mXSBhIGJsb2NrKS4KKyAgICBpZiBpX2gxIDwgbGVuKF9oMSkgYW5kIHN0YXJ0ID09IF9oMVtpX2gxXVswXToKKyAgICAgIGggPSBfaDFbaV9oMV0KKyAgICAgIG91dF9maWxlLndyaXRlKCIjICUwNGxYLi4lMDRsWCAlc1xuIiAlIChoWzBdLCBoWzFdLCBFc2NhcGVOb25BU0NJSShoWzJdKSkpCisgICAgICBpX2gxICs9IDEKKyAgICAjIEFsZ29yaXRobWljLW5hbWVzIHJhbmdlLgorICAgIGlmIGlfYWxnIDwgbGVuKF9hbGdfbmFtZXNfcmFuZ2VzKSBhbmQgc3RhcnQgPT0gX2FsZ19uYW1lc19yYW5nZXNbaV9hbGddWzBdOgorICAgICAgciA9IF9hbGdfbmFtZXNfcmFuZ2VzW2lfYWxnXQorICAgICAgZmllbGRzID0gWyJhbGduYW1lc3JhbmdlIl0KKyAgICAgIEFwcGVuZFJhbmdlKGZpZWxkcywgclswXSwgclsxXSkKKyAgICAgIGZpZWxkcy5leHRlbmQoclsyOl0pCisgICAgICBvdXRfZmlsZS53cml0ZSgiOyIuam9pbihmaWVsZHMpKQorICAgICAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgICAgIGlfYWxnICs9IDEKKyAgICAjIE5hbWVzTGlzdCBoMiBoZWFkaW5nLgorICAgIGlmIGlfaDIgPCBsZW4oX2gyKSBhbmQgc3RhcnQgPT0gX2gyW2lfaDJdWzBdOgorICAgICAgb3V0X2ZpbGUud3JpdGUoIiMgJXNcbiIgJSBFc2NhcGVOb25BU0NJSShfaDJbaV9oMl1bMV0pKQorICAgICAgaV9oMiArPSAxCisgICAgIyBDb2RlIHBvaW50L3JhbmdlIGRhdGEuCisgICAgcHJvcHMgPSBfcHJvcHNbaV0KKyAgICAjIE9taXQgcmFuZ2VzIHdpdGggb25seSBkZWZhdWx0K2Jsb2NrIHByb3BlcnRpZXMuCisgICAgaWYgcHJvcHM6CisgICAgICBXcml0ZUZpZWxkc1JhbmdlUHJvcHMoWyJjcCJdLCBzdGFydCwgZW5kLCBwcm9wcywgb3V0X2ZpbGUpCisKKyMgV3JpdGUgTm9ybWFsaXplcjIgaW5wdXQgZmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisjIFBvcnRlZCBmcm9tIGdlbm5vcm0vc3RvcmUuYy4KKworZGVmIFdyaXRlQWxsQ0Mob3V0X2ZpbGUpOgorICBvdXRfZmlsZS53cml0ZSgiIyBDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIChjY2MpIHZhbHVlc1xuIik7CisgIHByZXZfc3RhcnQgPSAwCisgIHByZXZfY2MgPSAwCisgIGZvciBpIGluIHhyYW5nZShsZW4oX3N0YXJ0cykpOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgY2MgPSBwcm9wcy5nZXQoImNjYyIpCisgICAgaWYgbm90IGNjOiBjYyA9IDAKKyAgICBpZiBwcmV2X2NjICE9IGNjOgorICAgICAgaWYgcHJldl9jYyAhPSAwOgorICAgICAgICBsYXN0X2NvZGVfcG9pbnQgPSBzdGFydCAtIDEKKyAgICAgICAgaWYgcHJldl9zdGFydCA9PSBsYXN0X2NvZGVfcG9pbnQ6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFg6JWRcbiIgJSAobGFzdF9jb2RlX3BvaW50LCBwcmV2X2NjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WDolZFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZfc3RhcnQsIGxhc3RfY29kZV9wb2ludCwgcHJldl9jYykpCisgICAgICBwcmV2X3N0YXJ0ID0gc3RhcnQKKyAgICAgIHByZXZfY2MgPSBjYworCisKK2RlZiBIYXNNYXBwaW5nKGMpOgorICBwcm9wcyA9IEdldFByb3BzKGMpCisgIGR0ID0gcHJvcHMuZ2V0KCJkdCIpCisgIHJldHVybiBkdCBhbmQgZHQgIT0gIk5vbmUiCisKKworZGVmIEhhc09uZVdheU1hcHBpbmcoYyk6CisgIHdoaWxlIFRydWU6CisgICAgcHJvcHMgPSBHZXRQcm9wcyhjKQorICAgIGR0ID0gcHJvcHMuZ2V0KCJkdCIpCisgICAgaWYgbm90IGR0IG9yIGR0ID09ICJOb25lIjoKKyAgICAgIHJldHVybiBGYWxzZSAgIyBubyBtYXBwaW5nCisgICAgZWxpZiBkdCA9PSAiQ2FuIjoKKyAgICAgICMgVGhlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGlzIGEgb25lLXdheSBtYXBwaW5nIGlmCisgICAgICAjIC0gaXQgZG9lcyBub3QgbWFwIHRvIGV4YWN0bHkgdHdvIGNvZGUgcG9pbnRzCisgICAgICAjIC0gYyBoYXMgY2NjIT0wCisgICAgICAjIC0gYyBoYXMgdGhlIENvbXBvc2l0aW9uX0V4Y2x1c2lvbiBwcm9wZXJ0eQorICAgICAgIyAtIGl0cyBzdGFydGVyIGhhcyBhIG9uZS13YXkgbWFwcGluZyAobG9vcCBmb3IgdGhpcykKKyAgICAgICMgLSBpdHMgbm9uLXN0YXJ0ZXIgZGVjb21wb3NlcworICAgICAgbmZkID0gcHJvcHNbImRtIl0uc3BsaXQoKQorICAgICAgaWYgKGxlbihuZmQpICE9IDIgb3IKKyAgICAgICAgICBwcm9wcy5nZXQoImNjYyIpIG9yCisgICAgICAgICAgcHJvcHMuZ2V0KCJDb21wX0V4Iikgb3IKKyAgICAgICAgICBIYXNNYXBwaW5nKGludChuZmRbMV0sIDE2KSkpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgYyA9IGludChuZmRbMF0sIDE2KSAgIyBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAjIGMgaGFzIGEgY29tcGF0aWJpbGl0eSBtYXBwaW5nLgorICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgV3JpdGVOb3JtMk5GQ1RleHRGaWxlKHBhdGgpOgorICBnbG9iYWwgX2N1cnJlbnRfeWVhcgorICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBhdGgsICJuZmMudHh0IiksICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgb3V0X2ZpbGUud3JpdGUoCisgICAgICAgICIiIiMgQ29weXJpZ2h0IChDKSAxOTk5LSIiIiArIF9jdXJyZW50X3llYXIgKworICAgICAgICAiIiIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIGZpbGUgbmFtZTogbmZjLnR4dAorIworIyBtYWNoaW5lLWdlbmVyYXRlZCBieSBJQ1UgcHJlcGFyc2V1Y2QucHkKKyMKKyMgQ29tcGxldGUgZGF0YSBmb3IgVW5pY29kZSBORkMgbm9ybWFsaXphdGlvbi4KKworKiBVbmljb2RlICIiIiArIF91Y2RfdmVyc2lvbiArICIiIgorCisiIiIpCisgICAgV3JpdGVBbGxDQyhvdXRfZmlsZSkKKyAgICBvdXRfZmlsZS53cml0ZSgiXG4jIENhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIG1hcHBpbmdzXG4iKQorICAgIGZvciBpIGluIHhyYW5nZShsZW4oX3N0YXJ0cykgLSAxKToKKyAgICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgICAgZW5kID0gX3N0YXJ0c1tpICsgMV0gLSAxCisgICAgICBwcm9wcyA9IF9wcm9wc1tpXQorICAgICAgZG0gPSBwcm9wcy5nZXQoImRtIikKKyAgICAgIGlmIGRtIGFuZCBkbVswXSAhPSAnPCcgYW5kIHByb3BzWyJkdCJdID09ICJDYW4iOgorICAgICAgICBhc3NlcnQgc3RhcnQgPT0gZW5kCisgICAgICAgICMgVGhlIENvbXBfRXg9RnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb24gcHJvcGVydHkgdGVsbHMgdXMKKyAgICAgICAgIyB3aGV0aGVyIHRoZSBjYW5vbmljYWwgZGVjb21wb3NpdGlvbiByb3VuZC10cmlwcy4KKyAgICAgICAgc2VwYXJhdG9yID0gJz4nIGlmIHByb3BzLmdldCgiQ29tcF9FeCIpIGVsc2UgJz0nCisgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYJXMlc1xuIiAlIChzdGFydCwgc2VwYXJhdG9yLCBkbSkpCisKKworZGVmIFdyaXRlTm9ybTJORktDVGV4dEZpbGUocGF0aCk6CisgIGdsb2JhbCBfY3VycmVudF95ZWFyCisgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgIm5ma2MudHh0IiksICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgb3V0X2ZpbGUud3JpdGUoCisgICAgICAgICIiIiMgQ29weXJpZ2h0IChDKSAxOTk5LSIiIiArIF9jdXJyZW50X3llYXIgKworICAgICAgICAiIiIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIGZpbGUgbmFtZTogbmZrYy50eHQKKyMKKyMgbWFjaGluZS1nZW5lcmF0ZWQgYnkgSUNVIHByZXBhcnNldWNkLnB5CisjCisjIERhdGEgZm9yIFVuaWNvZGUgTkZLQyBub3JtYWxpemF0aW9uLgorIyBUaGlzIGZpbGUgY29udGFpbnMgb25seSBjb21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24gbWFwcGluZ3MsCisjIHBsdXMgdGhvc2UgY2Fub25pY2FsIGRlY29tcG9zaXRpb25zIHRoYXQgY2hhbmdlIGZyb20gTkZDIHJvdW5kLXRyaXAgbWFwcGluZ3MKKyMgdG8gTkZLQyBvbmUtd2F5IG1hcHBpbmdzLgorIyBVc2UgdGhpcyBmaWxlIGFzIHRoZSBzZWNvbmQgZ2Vubm9ybTIgaW5wdXQgZmlsZSBhZnRlciBuZmMudHh0LgorCisqIFVuaWNvZGUgIiIiICsgX3VjZF92ZXJzaW9uICsgIiIiCisKKyIiIikKKyAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKF9zdGFydHMpIC0gMSk6CisgICAgICBzdGFydCA9IF9zdGFydHNbaV0KKyAgICAgIGVuZCA9IF9zdGFydHNbaSArIDFdIC0gMQorICAgICAgcHJvcHMgPSBfcHJvcHNbaV0KKyAgICAgIGRtID0gcHJvcHMuZ2V0KCJkbSIpCisgICAgICBpZiBkbSBhbmQgZG1bMF0gIT0gJzwnOgorICAgICAgICBhc3NlcnQgc3RhcnQgPT0gZW5kCisgICAgICAgIGlmIHByb3BzWyJkdCJdICE9ICJDYW4iOgorICAgICAgICAgICMgQ29tcGF0aWJpbGl0eSBkZWNvbXBvc2l0aW9uLgorICAgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYPiVzXG4iICUgKHN0YXJ0LCBkbSkpCisgICAgICAgIGVsaWYgbm90IHByb3BzLmdldCgiQ29tcF9FeCIpIGFuZCBIYXNPbmVXYXlNYXBwaW5nKHN0YXJ0KToKKyAgICAgICAgICAjIE5GQyByb3VuZC10cmlwIG1hcHBpbmcgdHVybnMgaW50byBORktDIG9uZS13YXkgbWFwcGluZy4KKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WD4lcyAgIyBORkMgcm91bmQtdHJpcCwgTkZLQyBvbmUtd2F5XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnQsIGRtKSkKKworCitkZWYgV3JpdGVOb3JtMk5GS0NfQ0ZUZXh0RmlsZShwYXRoKToKKyAgZ2xvYmFsIF9jdXJyZW50X3llYXIKKyAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwYXRoLCAibmZrY19jZi50eHQiKSwgInciKSBhcyBvdXRfZmlsZToKKyAgICBvdXRfZmlsZS53cml0ZSgKKyAgICAgICAgIiIiIyBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZQorIyBDb3B5cmlnaHQgKGMpIDE5OTEtIiIiICsgX2N1cnJlbnRfeWVhciArICIiIiBVbmljb2RlLCBJbmMuCisjIEZvciB0ZXJtcyBvZiB1c2UsIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3Rlcm1zX29mX3VzZS5odG1sCisjIEZvciBkb2N1bWVudGF0aW9uLCBzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQvCisjCisjIGZpbGUgbmFtZTogbmZrY19jZi50eHQKKyMKKyMgbWFjaGluZS1nZW5lcmF0ZWQgYnkgSUNVIHByZXBhcnNldWNkLnB5CisjCisjIFRoaXMgZmlsZSBjb250YWlucyB0aGUgVW5pY29kZSBORktDX0NGIG1hcHBpbmdzLAorIyBleHRyYWN0ZWQgZnJvbSB0aGUgVUNEIGZpbGUgRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcy50eHQsCisjIGFuZCByZWZvcm1hdHRlZCBpbnRvIHN5bnRheCBmb3IgdGhlIGdlbm5vcm0yIE5vcm1hbGl6ZXIyIGRhdGEgZ2VuZXJhdG9yIHRvb2wuCisjIFVzZSB0aGlzIGZpbGUgYXMgdGhlIHRoaXJkIGdlbm5vcm0yIGlucHV0IGZpbGUgYWZ0ZXIgbmZjLnR4dCBhbmQgbmZrYy50eHQuCisKKyIiIikKKyAgICBvdXRfZmlsZS53cml0ZSgiKiBVbmljb2RlICIgKyBfdWNkX3ZlcnNpb24gKyAiXG5cbiIpCisgICAgcHJldl9zdGFydCA9IDAKKyAgICBwcmV2X2VuZCA9IDAKKyAgICBwcmV2X25ma2NfY2YgPSBOb25lCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgICBlbmQgPSBfc3RhcnRzW2kgKyAxXSAtIDEKKyAgICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgICBuZmtjX2NmID0gcHJvcHMuZ2V0KCJORktDX0NGIikKKyAgICAgICMgTWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgcmFuZ2UgaWYgcG9zc2libGUsCisgICAgICAjIG9yIHJlbWVtYmVyIHRoaXMgcmFuZ2UgZm9yIG1lcmdpbmcuCisgICAgICBpZiBuZmtjX2NmID09IHByZXZfbmZrY19jZiBhbmQgKHByZXZfZW5kICsgMSkgPT0gc3RhcnQ6CisgICAgICAgIHByZXZfZW5kID0gZW5kCisgICAgICBlbHNlOgorICAgICAgICBpZiBwcmV2X25ma2NfY2YgIT0gTm9uZSBhbmQgKG5vdCBwcmV2X25ma2NfY2Ygb3IgcHJldl9uZmtjX2NmWzBdICE9ICc8Jyk6CisgICAgICAgICAgaWYgcHJldl9zdGFydCA9PSBwcmV2X2VuZDoKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYPiVzXG4iICUgKHByZXZfc3RhcnQsIHByZXZfbmZrY19jZikpCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYLi4lMDRYPiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2X3N0YXJ0LCBwcmV2X2VuZCwgcHJldl9uZmtjX2NmKSkKKyAgICAgICAgcHJldl9zdGFydCA9IHN0YXJ0CisgICAgICAgIHByZXZfZW5kID0gZW5kCisgICAgICAgIHByZXZfbmZrY19jZiA9IG5ma2NfY2YKKworCitkZWYgV3JpdGVOb3JtMihwYXRoKToKKyAgV3JpdGVOb3JtMk5GQ1RleHRGaWxlKHBhdGgpCisgIFdyaXRlTm9ybTJORktDVGV4dEZpbGUocGF0aCkKKyAgV3JpdGVOb3JtMk5GS0NfQ0ZUZXh0RmlsZShwYXRoKQorCisjIFVUUyAjNDYgTm9ybWFsaXplcjIgaW5wdXQgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfaWRuYV9yZXBsYWNlbWVudHMgPSBbCisgICMgU2V2ZXJhbCB2ZXJzaW9ucyBvZiBhdm9pZGluZyBjaXJjdWxhciBGRkZEPkZGRkQgbWFwcGluZ3MsCisgICMgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnB1dCBmaWxlLgorICAocmUuY29tcGlsZShyIkZGRkQgICAgICAgICAgOyBkaXNhbGxvd2VkIiksICIjIEZGRkQgKGF2b2lkIGNpcmN1bGFyIG1hcHBpbmcpIiksCisgIChyZS5jb21waWxlKHIiXC5cLkZGRkQiKSwgIi4uRkZGQyIpLAorICAocmUuY29tcGlsZShyIihGRkZbXkVdKVwuXC5GRkZGIiksICJcMS4uRkZGQyIpLAorICAjIFNpbmNlIHdlIHN3aXRjaCBiZXR3ZWVuIGNoZWNraW5nIGFuZCBub3QgY2hlY2tpbmcgZm9yIFNURDMgY2hhcmFjdGVyCisgICMgcmVzdHJpY3Rpb25zIGF0IHJ1bnRpbWUsIGNoZWNraW5nIHRoZSBub24tTERIIEFTQ0lJIGNoYXJhY3RlcnMgaW4gY29kZSwKKyAgIyB3ZSB0cmVhdCB0aGVzZSB2YWx1ZXMgaGVyZSBsaWtlIHRoZWlyIHJlZ3VsYXIgc2libGluZ3MuCisgIChyZS5jb21waWxlKHIiXihbXjtdKykgIDsgZGlzYWxsb3dlZF9TVEQzX3ZhbGlkIiksIHIiIyBcMWRpc2FsbG93ZWRfU1REM192YWxpZCIpLAorICAocmUuY29tcGlsZShyIjsgZGlzYWxsb3dlZF9TVEQzX21hcHBlZCArOyAiKSwgIj4iKSwKKyAgIyBGb3IgVVRTICM0Niwgd2UgZG8gbm90IGNhcmUgYWJvdXQgIm5vdCB2YWxpZCBpbiBJRE5BMjAwOCIuCisgIChyZS5jb21waWxlKHIiOyAqOyBOVjggKyIpLCAiIiksCisgICMgTm9ybWFsIHRyYW5zZm9ybWF0aW9ucy4KKyAgKHJlLmNvbXBpbGUociI7IGRpc2FsbG93ZWQiKSwgIj5GRkZEIiksCisgIChyZS5jb21waWxlKHIiOyBpZ25vcmVkIiksICI+IiksCisgIChyZS5jb21waWxlKHIiXihbXjtdKykgIDsgdmFsaWQiKSwgciIjIFwxdmFsaWQiKSwKKyAgKHJlLmNvbXBpbGUociI7IG1hcHBlZCArOyAiKSwgIj4iKSwKKyAgKHJlLmNvbXBpbGUociJeKFteO10rKSAgOyBkZXZpYXRpb24gKzsgIiksIHIiIyBcMWRldmlhdGlvbiA+IikKK10KKworZGVmIElkbmFUb1VUUzQ2VGV4dEZpbGUocywgdCk6CisgICIiIlR1cm4gVW5pY29kZSBJZG5hTWFwcGluZ1RhYmxlLnR4dCBpbnRvIElDVSBnZW5ub3JtMiBzb3VyY2UgZmlsZSBmb3JtYXQuIiIiCisgICMgRGlmZmVyZW50IGlucHV0L291dHB1dCBmaWxlIG5hbWVzLgorICBkZXN0X3BhdGggPSBvcy5wYXRoLmRpcm5hbWUodCkKKyAgdCA9IG9zLnBhdGguam9pbihkZXN0X3BhdGgsICJ1dHM0Ni50eHQiKQorICAjIFRPRE86IFdpdGggUHl0aG9uIDIuNyssIGNvbWJpbmUgdGhlIHR3byB3aXRoIHN0YXRlbWVudHMgaW50byBvbmUuCisgIHdpdGggb3BlbihzLCAiciIpIGFzIGluX2ZpbGU6CisgICAgd2l0aCBvcGVuKHQsICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgICBvdXRfZmlsZS53cml0ZSgiIyBPcmlnaW5hbCBmaWxlOlxuIikKKyAgICAgIGZvciBsaW5lIGluIGluX2ZpbGU6CisgICAgICAgIG9yaWdfbGluZSA9IGxpbmUKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIEZvciBkb2N1bWVudGF0aW9uLCBzZWUiKToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZShsaW5lKQorICAgICAgICAgIG91dF9maWxlLndyaXRlKHIiIiIKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRoaXMgZmlsZSBoYXMgYmVlbiByZWZvcm1hdHRlZCBpbnRvIHN5bnRheCBmb3IgdGhlCisjIGdlbm5vcm0yIE5vcm1hbGl6ZXIyIGRhdGEgZ2VuZXJhdG9yIHRvb2wuCisjCisjICJ2YWxpZCIsICJkaXNhbGxvd2VkX1NURDNfdmFsaWQiIGFuZCAiZGV2aWF0aW9uIiBsaW5lcyBhcmUgY29tbWVudGVkIG91dC4KKyMgIm1hcHBlZCIgYW5kICJkaXNhbGxvd2VkX1NURDNfbWFwcGVkIiBhcmUgY2hhbmdlZCB0byB1c2UgdGhlICI+IiBtYXBwaW5nIHN5bnRheC4KKyMgImRpc2FsbG93ZWQiIGxpbmVzIG1hcCB0byBVK0ZGRkQuCisjICJpZ25vcmVkIiBsaW5lcyBtYXAgdG8gYW4gZW1wdHkgc3RyaW5nLgorIworIyBDaGFyYWN0ZXJzIGRpc2FsbG93ZWQgdW5kZXIgU1REMyBydWxlcyBhcmUgdHJlYXRlZCBhcyB2YWxpZCBvciBtYXBwZWQ7CisjIHRoZXkgYXJlIGhhbmRsZWQgaW4gY29kZS4KKyMgRGV2aWF0aW9uIGNoYXJhY3RlcnMgYXJlIGFsc28gaGFuZGxlZCBpbiBjb2RlLgorIworIyBVc2UgdGhpcyBmaWxlIGFzIHRoZSBzZWNvbmQgZ2Vubm9ybTIgaW5wdXQgZmlsZSBhZnRlciBuZmMudHh0LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyIiIikKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBsaW5lWzBdIGluICIjXHJcbiI6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcmVwIGluIF9pZG5hX3JlcGxhY2VtZW50czogbGluZSA9IHJlcFswXS5zdWIocmVwWzFdLCBsaW5lKQorICAgICAgICAjIEFsaWduIGlubGluZSBjb21tZW50cyBhdCBjb2x1bW4gNDAuCisgICAgICAgIGNvbW1lbnRfcG9zID0gbGluZS5maW5kKCIjIiwgMSkKKyAgICAgICAgaWYgY29tbWVudF9wb3MgPCA0MDoKKyAgICAgICAgICBsaW5lID0gKGxpbmVbOmNvbW1lbnRfcG9zXSArICgoNDAgLSBjb21tZW50X3BvcykgKiAnICcpICsKKyAgICAgICAgICAgICAgICAgIGxpbmVbY29tbWVudF9wb3M6XSkKKyAgICAgICAgZWxpZiBjb21tZW50X3BvcyA+IDQwOgorICAgICAgICAgIHNwYWNlX3BvcyA9IGNvbW1lbnRfcG9zCisgICAgICAgICAgd2hpbGUgc3BhY2VfcG9zID4gMCBhbmQgbGluZVtzcGFjZV9wb3MgLSAxXSA9PSAnICc6CisgICAgICAgICAgICBzcGFjZV9wb3MgPSBzcGFjZV9wb3MgLSAxCisgICAgICAgICAgaWYgc3BhY2VfcG9zIDwgNDA6CisgICAgICAgICAgICAjIEZld2VyIHRoYW4gNDAgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGNvbW1lbnQ6CisgICAgICAgICAgICAjIEFsaWduIGNvbW1lbnRzIGF0IGNvbHVtbiA0MC4KKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzo0MF0gKyBsaW5lW2NvbW1lbnRfcG9zOl0KKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyA0MCBvciBtb3JlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjb21tZW50OgorICAgICAgICAgICAgIyBLZWVwIG9uZSBzcGFjZSBiZXR3ZWVuIGNvbnRlbnRzIGFuZCBjb21tZW50LgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOnNwYWNlX3Bvc10gKyAiICIgKyBsaW5lW2NvbW1lbnRfcG9zOl0KKyAgICAgICAgIyBXcml0ZSB0aGUgbW9kaWZpZWQgbGluZS4KKyAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgaWYgIi4uRkZGRiIgaW4gb3JpZ19saW5lIGFuZCAiLi5GRkZDIiBpbiBsaW5lOgorICAgICAgICAgIG91dF9maWxlLndyaXRlKCJGRkZFLi5GRkZGICAgID5GRkZEXG4iKTsKKyAgcmV0dXJuIHQKKworIyBQcmVwcm9jZXNzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworX3N0cmlwX3JlID0gcmUuY29tcGlsZSgiKFswLTlhLWZBLUZdKy4rPykgKiMuKiIpCitfY29kZV9wb2ludF9yZSA9IHJlLmNvbXBpbGUoIlxzKihbMC05YS1mQS1GXSspXHMqOyIpCisKK2RlZiBDb3B5QW5kU3RyaXBXaXRoT3B0aW9uYWxNZXJnZShzLCB0LCBkb19tZXJnZSk6CisgICMgVE9ETzogV2UgZG8gbm90IHNlZW0gdG8gbmVlZCB0aGUgZG9fbWVyZ2UgYXJndW1lbnQgYW5kIGxvZ2ljIGFueSBtb3JlLgorICAjIFRPRE86IFdpdGggUHl0aG9uIDIuNyssIGNvbWJpbmUgdGhlIHR3byB3aXRoIHN0YXRlbWVudHMgaW50byBvbmUuCisgIHdpdGggb3BlbihzLCAiciIpIGFzIGluX2ZpbGU6CisgICAgd2l0aCBvcGVuKHQsICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgICBmaXJzdCA9IC0xICAjIEZpcnN0IGNvZGUgcG9pbnQgd2l0aCBmaXJzdF9kYXRhLgorICAgICAgbGFzdCA9IC0xICAjIExhc3QgY29kZSBwb2ludCB3aXRoIGZpcnN0X2RhdGEuCisgICAgICBmaXJzdF9kYXRhID0gIiIgICMgQ29tbW9uIGRhdGEgZm9yIGNvZGUgcG9pbnRzIFtmaXJzdC4ubGFzdF0uCisgICAgICBmb3IgbGluZSBpbiBpbl9maWxlOgorICAgICAgICBtYXRjaCA9IF9zdHJpcF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICBsaW5lID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICBpZiBkb19tZXJnZToKKyAgICAgICAgICBtYXRjaCA9IF9jb2RlX3BvaW50X3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBjID0gaW50KG1hdGNoLmdyb3VwKDEpLCAxNikKKyAgICAgICAgICAgIGRhdGEgPSBsaW5lW21hdGNoLmVuZCgpIC0gMTpdCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGMgPSAtMQorICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgaWYgbGFzdCA+PSAwIGFuZCAoYyAhPSAobGFzdCArIDEpIG9yIGRhdGEgIT0gZmlyc3RfZGF0YSk6CisgICAgICAgICAgICAjIG91dHB1dCB0aGUgY3VycmVudCByYW5nZQorICAgICAgICAgICAgaWYgZmlyc3QgPT0gbGFzdDoKKyAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFglc1xuIiAlIChmaXJzdCwgZmlyc3RfZGF0YSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WCVzXG4iICUgKGZpcnN0LCBsYXN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgICAgIGZpcnN0ID0gLTEKKyAgICAgICAgICAgIGxhc3QgPSAtMQorICAgICAgICAgICAgZmlyc3RfZGF0YSA9ICIiCisgICAgICAgICAgaWYgYyA8IDA6CisgICAgICAgICAgICAjIG5vIGRhdGEgb24gdGhpcyBsaW5lLCBvdXRwdXQgYXMgaXMKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGxpbmUpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGRhdGEgb24gdGhpcyBsaW5lLCBzdG9yZSBmb3IgcG9zc2libGUgcmFuZ2UgY29tcGFjdGlvbgorICAgICAgICAgICAgaWYgbGFzdCA8IDA6CisgICAgICAgICAgICAgICMgc2V0IGFzIHRoZSBmaXJzdCBsaW5lIGluIGEgcG9zc2libGUgcmFuZ2UKKyAgICAgICAgICAgICAgZmlyc3QgPSBjCisgICAgICAgICAgICAgIGxhc3QgPSBjCisgICAgICAgICAgICAgIGZpcnN0X2RhdGEgPSBkYXRhCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAjIG11c3QgYmUgYyA9PSAobGFzdCArIDEpIGFuZCBkYXRhID09IGZpcnN0X2RhdGEKKyAgICAgICAgICAgICAgIyBiZWNhdXNlIG9mIHByZXZpb3VzIGNvbmRpdGlvbnMKKyAgICAgICAgICAgICAgIyBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgICAgICAgIGxhc3QgPSBjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIyBPbmx5IHN0cmlwLCBkb24ndCBtZXJnZToganVzdCBvdXRwdXQgdGhlIHN0cmlwcGVkIGxpbmUuCisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgaWYgZG9fbWVyZ2UgYW5kIGxhc3QgPj0gMDoKKyAgICAgICAgIyBvdXRwdXQgdGhlIGxhc3QgcmFuZ2UgaW4gdGhlIGZpbGUKKyAgICAgICAgaWYgZmlyc3QgPT0gbGFzdDoKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WCVzXG4iICUgKGZpcnN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WCVzXG4iICUgKGZpcnN0LCBsYXN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZmlyc3QgPSAtMQorICAgICAgICBsYXN0ID0gLTEKKyAgICAgICAgZmlyc3RfZGF0YSA9ICIiCisgICAgICBvdXRfZmlsZS5mbHVzaCgpCisgIHJldHVybiB0CisKKworZGVmIENvcHlBbmRTdHJpcChzLCB0KToKKyAgIiIiQ29waWVzIGEgZmlsZSBhbmQgcmVtb3ZlcyBjb21tZW50cyBiZWhpbmQgZGF0YSBsaW5lcyBidXQgbm90IGluIG90aGVycy4iIiIKKyAgcmV0dXJuIENvcHlBbmRTdHJpcFdpdGhPcHRpb25hbE1lcmdlKHMsIHQsIEZhbHNlKQorCisKK2RlZiBDb3B5QW5kU3RyaXBBbmRNZXJnZShzLCB0KToKKyAgIiIiQ29waWVzIGFuZCBzdHJpcHMgYSBmaWxlIGFuZCBtZXJnZXMgbGluZXMuCisKKyAgQ29waWVzIGEgZmlsZSwgcmVtb3ZlcyBjb21tZW50cywgYW5kCisgIG1lcmdlcyBsaW5lcyB3aXRoIGFkamFjZW50IGNvZGUgcG9pbnQgcmFuZ2VzIGFuZCBpZGVudGljYWwgcGVyLWNvZGUgcG9pbnQKKyAgZGF0YSBsaW5lcyBpbnRvIG9uZSBsaW5lIHdpdGggcmFuZ2Ugc3ludGF4LgorICAiIiIKKyAgcmV0dXJuIENvcHlBbmRTdHJpcFdpdGhPcHRpb25hbE1lcmdlKHMsIHQsIFRydWUpCisKKworZGVmIFByZXBlbmRCT00ocywgdCk6CisgICMgVE9ETzogV2l0aCBQeXRob24gMi43KywgY29tYmluZSB0aGUgdHdvIHdpdGggc3RhdGVtZW50cyBpbnRvIG9uZS4KKyAgd2l0aCBvcGVuKHMsICJyIikgYXMgaW5fZmlsZToKKyAgICB3aXRoIG9wZW4odCwgInciKSBhcyBvdXRfZmlsZToKKyAgICAgIG91dF9maWxlLndyaXRlKCJceGVmXHhiYlx4YmYiKSAgIyBVVEYtOCBCT00gZm9yIElDVSBzdm4KKyAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihpbl9maWxlLCBvdXRfZmlsZSkKKyAgcmV0dXJuIHQKKworCitkZWYgQ29weU9ubHkocywgdCk6CisgIHNodXRpbC5jb3B5KHMsIHQpCisgIHJldHVybiB0CisKKworZGVmIERvbnRDb3B5KHMsIHQpOgorICByZXR1cm4gcworCisKKyMgRWFjaCBfZmlsZXMgdmFsdWUgaXMgYQorIyAocHJlcHJvY2Vzc29yLCBkZXN0X2ZvbGRlciwgcGFyc2VyLCBvcmRlcikgdHVwbGUKKyMgd2hlcmUgYWxsIGZpZWxkcyBleGNlcHQgdGhlIHByZXByb2Nlc3NvciBhcmUgb3B0aW9uYWwuCisjIEFmdGVyIHRoZSBpbml0aWFsIHByZXByb2Nlc3NpbmcgKGNvcHkvc3RyaXAvbWVyZ2UpLAorIyBpZiBhIHBhcnNlciBpcyBzcGVjaWZpZWQsIHRoZW4gYSB0dXBsZSBpcyBhZGRlZCB0byBfZmlsZXNfdG9fcGFyc2UKKyMgYXQgaW5kZXggIm9yZGVyIiAoZGVmYXVsdCBvcmRlciA5KS4KKyMgQW4gZXhwbGljaXQgb3JkZXIgbnVtYmVyIGlzIHNldCBvbmx5IGZvciBmaWxlcyB0aGF0IG11c3QgYmUgcGFyc2VkCisjIGJlZm9yZSBvdGhlcnMuCitfZmlsZXMgPSB7CisgICJCaWRpQnJhY2tldHMudHh0IjogKERvbnRDb3B5LCBQYXJzZUJpZGlCcmFja2V0cyksCisgICJCaWRpTWlycm9yaW5nLnR4dCI6IChEb250Q29weSwgUGFyc2VCaWRpTWlycm9yaW5nKSwKKyAgIkJpZGlUZXN0LnR4dCI6IChDb3B5T25seSwgInRlc3RkYXRhIiksCisgICJCbG9ja3MudHh0IjogKERvbnRDb3B5LCBQYXJzZUJsb2NrcyksCisgICJDYXNlRm9sZGluZy50eHQiOiAoQ29weU9ubHksIFBhcnNlQ2FzZUZvbGRpbmcpLAorICAiRGVyaXZlZEFnZS50eHQiOiAoRG9udENvcHksIFBhcnNlRGVyaXZlZEFnZSksCisgICJEZXJpdmVkQmlkaUNsYXNzLnR4dCI6IChEb250Q29weSwgUGFyc2VEZXJpdmVkQmlkaUNsYXNzKSwKKyAgIkRlcml2ZWRDb3JlUHJvcGVydGllcy50eHQiOiAoQ29weUFuZFN0cmlwLCBQYXJzZU5hbWVkUHJvcGVydGllcyksCisgICJEZXJpdmVkSm9pbmluZ0dyb3VwLnR4dCI6IChEb250Q29weSwgUGFyc2VEZXJpdmVkSm9pbmluZ0dyb3VwKSwKKyAgIkRlcml2ZWRKb2luaW5nVHlwZS50eHQiOiAoRG9udENvcHksIFBhcnNlRGVyaXZlZEpvaW5pbmdUeXBlKSwKKyAgIkRlcml2ZWROb3JtYWxpemF0aW9uUHJvcHMudHh0IjogKENvcHlBbmRTdHJpcCwgUGFyc2VOYW1lZFByb3BlcnRpZXMpLAorICAiRGVyaXZlZE51bWVyaWNWYWx1ZXMudHh0IjogKERvbnRDb3B5LCBQYXJzZURlcml2ZWROdW1lcmljVmFsdWVzKSwKKyAgIkVhc3RBc2lhbldpZHRoLnR4dCI6IChEb250Q29weSwgUGFyc2VFYXN0QXNpYW5XaWR0aCksCisgICJHcmFwaGVtZUJyZWFrUHJvcGVydHkudHh0IjogKERvbnRDb3B5LCBQYXJzZUdyYXBoZW1lQnJlYWtQcm9wZXJ0eSksCisgICJHcmFwaGVtZUJyZWFrVGVzdC50eHQiOiAoUHJlcGVuZEJPTSwgInRlc3RkYXRhIiksCisgICJJbmRpY1Bvc2l0aW9uYWxDYXRlZ29yeS50eHQiOiAoRG9udENvcHksIFBhcnNlSW5kaWNQb3NpdGlvbmFsQ2F0ZWdvcnkpLAorICAiSW5kaWNTeWxsYWJpY0NhdGVnb3J5LnR4dCI6IChEb250Q29weSwgUGFyc2VJbmRpY1N5bGxhYmljQ2F0ZWdvcnkpLAorICAiTGluZUJyZWFrLnR4dCI6IChEb250Q29weSwgUGFyc2VMaW5lQnJlYWspLAorICAiTGluZUJyZWFrVGVzdC50eHQiOiAoUHJlcGVuZEJPTSwgInRlc3RkYXRhIiksCisgICJOYW1lQWxpYXNlcy50eHQiOiAoRG9udENvcHksIFBhcnNlTmFtZUFsaWFzZXMpLAorICAiTmFtZXNMaXN0LnR4dCI6IChEb250Q29weSwgUGFyc2VOYW1lc0xpc3QpLAorICAiTm9ybWFsaXphdGlvbkNvcnJlY3Rpb25zLnR4dCI6IChDb3B5T25seSwpLCAgIyBPbmx5IHVzZWQgaW4gZ2Vuc3ByZXAuCisgICJOb3JtYWxpemF0aW9uVGVzdC50eHQiOiAoQ29weUFuZFN0cmlwLCksCisgICJQcm9wZXJ0eUFsaWFzZXMudHh0IjogKERvbnRDb3B5LCBQYXJzZVByb3BlcnR5QWxpYXNlcywgMCksCisgICJQcm9wZXJ0eVZhbHVlQWxpYXNlcy50eHQiOiAoRG9udENvcHksIFBhcnNlUHJvcGVydHlWYWx1ZUFsaWFzZXMsIDEpLAorICAiUHJvcExpc3QudHh0IjogKERvbnRDb3B5LCBQYXJzZU5hbWVkUHJvcGVydGllcyksCisgICJTZW50ZW5jZUJyZWFrUHJvcGVydHkudHh0IjogKERvbnRDb3B5LCBQYXJzZVNlbnRlbmNlQnJlYWspLAorICAiU2VudGVuY2VCcmVha1Rlc3QudHh0IjogKFByZXBlbmRCT00sICJ0ZXN0ZGF0YSIpLAorICAiU2NyaXB0cy50eHQiOiAoRG9udENvcHksIFBhcnNlU2NyaXB0cyksCisgICJTY3JpcHRFeHRlbnNpb25zLnR4dCI6IChEb250Q29weSwgUGFyc2VTY3JpcHRFeHRlbnNpb25zKSwKKyAgIlNwZWNpYWxDYXNpbmcudHh0IjogKENvcHlPbmx5LCBQYXJzZVNwZWNpYWxDYXNpbmcpLAorICAiVW5pY29kZURhdGEudHh0IjogKENvcHlPbmx5LCBQYXJzZVVuaWNvZGVEYXRhLCAyKSwKKyAgIldvcmRCcmVha1Byb3BlcnR5LnR4dCI6IChEb250Q29weSwgUGFyc2VXb3JkQnJlYWspLAorICAiV29yZEJyZWFrVGVzdC50eHQiOiAoUHJlcGVuZEJPTSwgInRlc3RkYXRhIiksCisgICMgRnJvbSB3d3cudW5pY29kZS5vcmcvUHVibGljL2lkbmEvPHZlcnNpb24+LworICAiSWRuYU1hcHBpbmdUYWJsZS50eHQiOiAoSWRuYVRvVVRTNDZUZXh0RmlsZSwgIm5vcm0yIikKK30KKworIyBMaXN0IG9mIGxpc3RzIG9mIGZpbGVzIHRvIGJlIHBhcnNlZCBpbiBvcmRlci4KKyMgSW5uZXIgbGlzdHMgY29udGFpbiAoYmFzZW5hbWUsIHBhdGgsIHBhcnNlcikgdHVwbGVzLgorX2ZpbGVzX3RvX3BhcnNlID0gW1tdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdXQorCisjIEdldCB0aGUgc3RhbmRhcmQgYmFzZW5hbWUgZnJvbSBhIHZlcnNpb25lZCBmaWxlbmFtZS4KKyMgRm9yIGV4YW1wbGUsIG1hdGNoICJVbmljb2RlRGF0YS02LjEuMGQ4LnR4dCIKKyMgc28gd2UgY2FuIHR1cm4gaXQgaW50byAiVW5pY29kZURhdGEudHh0Ii4KK19maWxlX3ZlcnNpb25fcmUgPSByZS5jb21waWxlKCIoW2EtekEtWjAtOV0rKSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1bMC05XSsoPzpcXC5bMC05XSspKig/OmRbMC05XSspPyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihcXC5bYS16XSspJCIpCisKK2RlZiBQcmVwcm9jZXNzRmlsZXMoc291cmNlX2ZpbGVzLCBpY3Vfc3JjX3Jvb3QpOgorICB1bmlkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3NyY19yb290LCAic291cmNlIiwgImRhdGEiLCAidW5pZGF0YSIpCisgIG5vcm0yX3BhdGggPSBvcy5wYXRoLmpvaW4odW5pZGF0YV9wYXRoLCAibm9ybTIiKQorICB0ZXN0ZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKGljdV9zcmNfcm9vdCwgInNvdXJjZSIsICJ0ZXN0IiwgInRlc3RkYXRhIikKKyAgZm9sZGVyX3RvX3BhdGggPSB7CisgICAgInVuaWRhdGEiOiB1bmlkYXRhX3BhdGgsCisgICAgIm5vcm0yIjogbm9ybTJfcGF0aCwKKyAgICAidGVzdGRhdGEiOiB0ZXN0ZGF0YV9wYXRoCisgIH0KKyAgZmlsZXNfcHJvY2Vzc2VkID0gc2V0KCkKKyAgZm9yIHNvdXJjZV9maWxlIGluIHNvdXJjZV9maWxlczoKKyAgICAoZm9sZGVyLCBiYXNlbmFtZSkgPSBvcy5wYXRoLnNwbGl0KHNvdXJjZV9maWxlKQorICAgIG1hdGNoID0gX2ZpbGVfdmVyc2lvbl9yZS5tYXRjaChiYXNlbmFtZSkKKyAgICBpZiBtYXRjaDoKKyAgICAgIG5ld19iYXNlbmFtZSA9IG1hdGNoLmdyb3VwKDEpICsgbWF0Y2guZ3JvdXAoMikKKyAgICAgIGlmIG5ld19iYXNlbmFtZSAhPSBiYXNlbmFtZToKKyAgICAgICAgcHJpbnQgIlJlbW92aW5nIHZlcnNpb24gc3VmZml4IGZyb20gIiArIHNvdXJjZV9maWxlCisgICAgICAgICMgLi4uIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBjb21wYXJlIFVDRCBmaWxlcy4KKyAgICAgICAgbmV3X3NvdXJjZV9maWxlID0gb3MucGF0aC5qb2luKGZvbGRlciwgbmV3X2Jhc2VuYW1lKQorICAgICAgICBzaHV0aWwubW92ZShzb3VyY2VfZmlsZSwgbmV3X3NvdXJjZV9maWxlKQorICAgICAgICBiYXNlbmFtZSA9IG5ld19iYXNlbmFtZQorICAgICAgICBzb3VyY2VfZmlsZSA9IG5ld19zb3VyY2VfZmlsZQorICAgIGlmIGJhc2VuYW1lIGluIF9maWxlczoKKyAgICAgIHByaW50ICJQcmVwcm9jZXNzaW5nICVzIiAlIGJhc2VuYW1lCisgICAgICBpZiBiYXNlbmFtZSBpbiBmaWxlc19wcm9jZXNzZWQ6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZHVwbGljYXRlIGZpbGUgYmFzZW5hbWUgJXMhIiAlIGJhc2VuYW1lKQorICAgICAgZmlsZXNfcHJvY2Vzc2VkLmFkZChiYXNlbmFtZSkKKyAgICAgIHZhbHVlID0gX2ZpbGVzW2Jhc2VuYW1lXQorICAgICAgcHJlcHJvY2Vzc29yID0gdmFsdWVbMF0KKyAgICAgIGlmIGxlbih2YWx1ZSkgPj0gMiBhbmQgaXNpbnN0YW5jZSh2YWx1ZVsxXSwgKHN0ciwgdW5pY29kZSkpOgorICAgICAgICAjIFRoZSB2YWx1ZSB3YXMgW3ByZXByb2Nlc3NvciwgZGVzdF9mb2xkZXIsIC4uLl0sIGxlYXZlIFsuLi5dLgorICAgICAgICBkZXN0X2ZvbGRlciA9IHZhbHVlWzFdCisgICAgICAgIHZhbHVlID0gdmFsdWVbMjpdCisgICAgICBlbHNlOgorICAgICAgICAjIFRoZSB2YWx1ZSB3YXMgW3ByZXByb2Nlc3NvciwgLi4uXSwgbGVhdmUgWy4uLl0uCisgICAgICAgIGRlc3RfZm9sZGVyID0gInVuaWRhdGEiCisgICAgICAgIHZhbHVlID0gdmFsdWVbMTpdCisgICAgICBkZXN0X3BhdGggPSBmb2xkZXJfdG9fcGF0aFtkZXN0X2ZvbGRlcl0KKyAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X3BhdGgpOiBvcy5tYWtlZGlycyhkZXN0X3BhdGgpCisgICAgICBkZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXRoLCBiYXNlbmFtZSkKKyAgICAgIHBhcnNlX2ZpbGUgPSBwcmVwcm9jZXNzb3Ioc291cmNlX2ZpbGUsIGRlc3RfZmlsZSkKKyAgICAgIGlmIHZhbHVlOgorICAgICAgICBvcmRlciA9IDkgaWYgbGVuKHZhbHVlKSA8IDIgZWxzZSB2YWx1ZVsxXQorICAgICAgICBfZmlsZXNfdG9fcGFyc2Vbb3JkZXJdLmFwcGVuZCgoYmFzZW5hbWUsIHBhcnNlX2ZpbGUsIHZhbHVlWzBdKSkKKworIyBDaGFyYWN0ZXIgbmFtZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworIyBUT0RPOiBUdXJuIHRoaXMgc2NyaXB0IGludG8gYSBtb2R1bGUgdGhhdAorIyBhKSBnaXZlcyBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhCisjIGIpIGhhcyBhIFByZXBhcnNlVUNEKHVjZF9yb290LCBpY3Vfc3JjX3Jvb3QpIGZ1bmN0aW9uCisjIGMpIGhhcyBhIFBhcnNlUHJlcGFyc2VkVUNEKGZpbGVuYW1lKSBmdW5jdGlvbgorIyBkKSBoYXMgYSBXcml0ZVByZXBhcnNlZFVDRChmaWxlbmFtZSkgZnVuY3Rpb24KKyMgYW5kIHRoZW4gdXNlIGl0IGZyb20gYSBuZXcgc2NyaXB0IGZvciBuYW1lcy4KKyMgU29tZSBtb3JlIEFQSToKKyMgLSBnZW5lcmF0b3IgR2V0UmFuZ2VzQW5kUHJvcHMoKSAtPiAoc3RhcnQsIGVuZCwgcHJvcHMpKgorCitkZWYgSW5jQ291bnRlcihjb3VudGVycywga2V5LCBpbmM9MSk6CisgIGlmIGtleSBpbiBjb3VudGVyczoKKyAgICBjb3VudGVyc1trZXldICs9IGluYworICBlbHNlOgorICAgIGNvdW50ZXJzW2tleV0gPSBpbmMKKworCitlbmRpbmdzID0gKAorICAjIExpc3QgUEhBU0UtIGJlZm9yZSBMRVRURVIgZm9yIEJBTVVNIExFVFRFUiBQSEFTRS14eXouCisgICJQSEFTRS0iLAorICAiTEVUVEVSICIsICJMSUdBVFVSRSAiLCAiQ0hBUkFDVEVSICIsICJTWUxMQUJMRSAiLAorICAiQ0hPU0VPTkcgIiwgIkpVTkdTRU9ORyAiLCAiSk9OR1NFT05HICIsCisgICJTWUxMQUJJQ1MgIiwgIklERU9HUkFQSCAiLCAiSURFT0dSQVBILSIsICJJREVPR1JBTSAiLCAiTU9OT0dSQU0gIiwKKyAgIkFDUk9QSE9OSUMgIiwgIkhJRVJPR0xZUEggIiwKKyAgIkRJR0lUICIsICJOVU1CRVIgIiwgIk5VTUVSQUwgIiwgIkZSQUNUSU9OICIsCisgICJQVU5DVFVBVElPTiAiLCAiU0lHTiAiLCAiU1lNQk9MICIsCisgICJUSUxFICIsICJDQVJEICIsICJGQUNFICIsCisgICJBQ0NFTlQgIiwgIlBPSU5UICIsCisgICMgTGlzdCBTSUdOIGJlZm9yZSBWT1dFTCB0byBjYXRjaCAidm93ZWwgc2lnbiIuCisgICJWT1dFTCAiLCAiVE9ORSAiLCAiUkFESUNBTCAiLAorICAjIEZvciBuYW1lcyBvZiBtYXRoIHN5bWJvbHMsCisgICMgZS5nLiwgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQQorICAiU0NSSVBUICIsICJGUkFLVFVSICIsICJNT05PU1BBQ0UgIiwKKyAgIklUQUxJQyAiLCAiQk9MRCAiLCAiRE9VQkxFLVNUUlVDSyAiLCAiU0FOUy1TRVJJRiAiLAorICAiSU5JVElBTCAiLCAiVEFJTEVEICIsICJTVFJFVENIRUQgIiwgIkxPT1BFRCAiLAorICAjIEJSQUlMTEUgUEFUVEVSTiBET1RTLXh5egorICAiRE9UUy0iLAorICAiU0VMRUNUT1IgIiwgIlNFTEVDVE9SLSIKKykKKworZGVmIFNwbGl0TmFtZShuYW1lLCB0b2tlbnMpOgorICBzdGFydCA9IDAKKyAgZm9yIGUgaW4gZW5kaW5nczoKKyAgICBpID0gbmFtZS5maW5kKGUpCisgICAgaWYgaSA+PSAwOgorICAgICAgc3RhcnQgPSBpICsgbGVuKGUpCisgICAgICB0b2tlbiA9IG5hbWVbOnN0YXJ0XQorICAgICAgSW5jQ291bnRlcih0b2tlbnMsIHRva2VuKQorICAgICAgYnJlYWsKKyAgZm9yIGkgaW4geHJhbmdlKHN0YXJ0LCBsZW4obmFtZSkpOgorICAgIGMgPSBuYW1lW2ldCisgICAgaWYgYyA9PSAnICcgb3IgYyA9PSAnLSc6CisgICAgICB0b2tlbiA9IG5hbWVbc3RhcnQ6aSArIDFdCisgICAgICBJbmNDb3VudGVyKHRva2VucywgdG9rZW4pCisgICAgICBzdGFydCA9IGkgKyAxCisgIEluY0NvdW50ZXIodG9rZW5zLCBuYW1lW3N0YXJ0Ol0pCisKKworZGVmIFByaW50TmFtZVN0YXRzKCk6CisgICMgVE9ETzogVGhpcyBuYW1lIGFuYWx5c2lzIGNvZGUgaXMgb3V0IG9mIGRhdGUuCisgICMgSXQgbmVlZHMgdG8gY29uc2lkZXIgdGhlIG11bHRpLXR5cGUgTmFtZV9BbGlhcyB2YWx1ZXMuCisgIG5hbWVfcG5hbWVzID0gKCJuYSIsICJuYTEiLCAiTmFtZV9BbGlhcyIpCisgIGNvdW50cyA9IHt9CisgIGZvciBwbmFtZSBpbiBuYW1lX3BuYW1lczoKKyAgICBjb3VudHNbcG5hbWVdID0gMAorICB0b3RhbF9sZW5ndGhzID0gY291bnRzLmNvcHkoKQorICBtYXhfbGVuZ3RoID0gMAorICBtYXhfcGVyX2NwID0gMAorICBuYW1lX2NoYXJzID0gc2V0KCkKKyAgbnVtX2RpZ2l0cyA9IDAKKyAgdG9rZW5fY291bnRlcnMgPSB7fQorICBjaGFyX2NvdW50ZXJzID0ge30KKyAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgICMgZW5kID0gX3N0YXJ0c1tpICsgMV0gLSAxCisgICAgcHJvcHMgPSBfcHJvcHNbaV0KKyAgICBwZXJfY3AgPSAwCisgICAgZm9yIHBuYW1lIGluIG5hbWVfcG5hbWVzOgorICAgICAgaWYgcG5hbWUgaW4gcHJvcHM6CisgICAgICAgIGNvdW50c1twbmFtZV0gKz0gMQorICAgICAgICBuYW1lID0gcHJvcHNbcG5hbWVdCisgICAgICAgIHRvdGFsX2xlbmd0aHNbcG5hbWVdICs9IGxlbihuYW1lKQorICAgICAgICBuYW1lX2NoYXJzIHw9IHNldChuYW1lKQorICAgICAgICBpZiBsZW4obmFtZSkgPiBtYXhfbGVuZ3RoOiBtYXhfbGVuZ3RoID0gbGVuKG5hbWUpCisgICAgICAgIHBlcl9jcCArPSBsZW4obmFtZSkgKyAxCisgICAgICAgIGlmIHBlcl9jcCA+IG1heF9wZXJfY3A6IG1heF9wZXJfY3AgPSBwZXJfY3AKKyAgICAgICAgdG9rZW5zID0gU3BsaXROYW1lKG5hbWUsIHRva2VuX2NvdW50ZXJzKQorICAgICAgICBmb3IgYyBpbiBuYW1lOgorICAgICAgICAgIGlmIGMgaW4gIjAxMjM0NTY3ODkiOiBudW1fZGlnaXRzICs9IDEKKyAgICAgICAgICBJbmNDb3VudGVyKGNoYXJfY291bnRlcnMsIGMpCisgIHByaW50CisgIGZvciBwbmFtZSBpbiBuYW1lX3BuYW1lczoKKyAgICBwcmludCAoIiclcycgY2hhcmFjdGVyIG5hbWVzOiAlZCAvICVkIGJ5dGVzIiAlCisgICAgICAgICAgIChwbmFtZSwgY291bnRzW3BuYW1lXSwgdG90YWxfbGVuZ3Roc1twbmFtZV0pKQorICBwcmludCAiJWQgdG90YWwgYnl0ZXMgaW4gY2hhcmFjdGVyIG5hbWVzIiAlIHN1bSh0b3RhbF9sZW5ndGhzLml0ZXJ2YWx1ZXMoKSkKKyAgcHJpbnQgKCIlZCBuYW1lLWNoYXJhY3RlcnM6ICVzIiAlCisgICAgICAgICAobGVuKG5hbWVfY2hhcnMpLCAiIi5qb2luKHNvcnRlZChuYW1lX2NoYXJzKSkpKQorICBwcmludCAiJWQgZGlnaXRzIDAtOSIgJSBudW1fZGlnaXRzCisgIGNvdW50X2NoYXJzID0gWyhjb3VudCwgYykgZm9yIChjLCBjb3VudCkgaW4gY2hhcl9jb3VudGVycy5pdGVyaXRlbXMoKV0KKyAgY291bnRfY2hhcnMuc29ydChyZXZlcnNlPVRydWUpCisgIGZvciBjYyBpbiBjb3VudF9jaGFyczoKKyAgICBwcmludCAibmFtZS1jaGFyczogJTZkICogJyVzJyIgJSBjYworICBwcmludCAibWF4LiBuYW1lIGxlbmd0aDogJWQiICUgbWF4X2xlbmd0aAorICBwcmludCAibWF4LiBsZW5ndGggb2YgYWxsIChuYW1lcytOVUwpIHBlciBjcDogJWQiICUgbWF4X3Blcl9jcAorCisgIHRva2VuX2xlbmd0aHMgPSBzdW0oW2xlbih0KSArIDEgZm9yIHQgaW4gdG9rZW5fY291bnRlcnNdKQorICBwcmludCAoIiVkIHRvdGFsIHRva2VucywgJWQgYnl0ZXMgd2l0aCBOVUwiICUKKyAgICAgICAgIChsZW4odG9rZW5fY291bnRlcnMpLCB0b2tlbl9sZW5ndGhzKSkKKworICBjb3VudHNfdG9rZW5zID0gW10KKyAgZm9yICh0b2tlbiwgY291bnQpIGluIHRva2VuX2NvdW50ZXJzLml0ZXJpdGVtcygpOgorICAgICMgSWYgd2UgZW5jb2RlIGEgdG9rZW4gd2l0aCBhIDEtYnl0ZSBjb2RlLCB0aGVuIHdlIHNhdmUgbGVuKHQpLTEgYnl0ZXMgZWFjaCB0aW1lCisgICAgIyBidXQgaGF2ZSB0byBzdG9yZSB0aGUgdG9rZW4gc3RyaW5nIGl0c2VsZiB3aXRoIGEgbGVuZ3RoIG9yIHRlcm1pbmF0b3IgYnl0ZSwKKyAgICAjIHBsdXMgYSAyLWJ5dGUgZW50cnkgaW4gYW4gdG9rZW4gaW5kZXggdGFibGUuCisgICAgc2F2aW5ncyA9IGNvdW50ICogKGxlbih0b2tlbikgLSAxKSAtIChsZW4odG9rZW4pICsgMSArIDIpCisgICAgaWYgc2F2aW5ncyA+IDA6CisgICAgICBjb3VudHNfdG9rZW5zLmFwcGVuZCgoc2F2aW5ncywgY291bnQsIHRva2VuKSkKKyAgY291bnRzX3Rva2Vucy5zb3J0KHJldmVyc2U9VHJ1ZSkKKyAgcHJpbnQgIiVkIHRva2VucyBtaWdodCBzYXZlIHNwYWNlIHdpdGggMS1ieXRlIGNvZGVzIiAlIGxlbihjb3VudHNfdG9rZW5zKQorCisgICMgQ29kZXM9Ynl0ZXMsIDQwIGJ5dGUgdmFsdWVzIGZvciBuYW1lX2NoYXJzLgorICAjIFRoYXQgbGVhdmVzIDIxNiB1bml0cyBmb3IgMS1ieXRlIHRva2VucyBvciBsZWFkIGJ5dGVzIG9mIDItYnl0ZSB0b2tlbnMuCisgICMgTWFrZSBlYWNoIDItYnl0ZSB0b2tlbiB0aGUgdG9rZW4gc3RyaW5nIGluZGV4IGl0c2VsZiwgcmF0aGVyIHRoYW4KKyAgIyBhbmQgaW5kZXggaW50byBhIHN0cmluZyBpbmRleCB0YWJsZS4KKyAgIyBNb3JlIGxlYWQgYnl0ZXMgYnV0IGFsc28gbW9yZSBzYXZpbmdzLgorICBudW1fdW5pdHMgPSAyNTYKKyAgbWF4X2xlYWQgPSAodG9rZW5fbGVuZ3RocyArIDI1NSkgLyAyNTYKKyAgbWF4X3Rva2VuX3VuaXRzID0gbnVtX3VuaXRzIC0gbGVuKG5hbWVfY2hhcnMpCisgIHJlc3VsdHMgPSBbXQorICBmb3IgbnVtX2xlYWQgaW4geHJhbmdlKG1pbihtYXhfbGVhZCwgbWF4X3Rva2VuX3VuaXRzKSArIDEpOgorICAgIG1heDEgPSBtYXhfdG9rZW5fdW5pdHMgLSBudW1fbGVhZAorICAgIGN0ID0gY291bnRzX3Rva2Vuc1s6bWF4MV0KKyAgICB0b2tlbnMxID0gc2V0KFt0IGZvciAocywgYywgdCkgaW4gY3RdKQorICAgIGZvciAodG9rZW4sIGNvdW50KSBpbiB0b2tlbl9jb3VudGVycy5pdGVyaXRlbXMoKToKKyAgICAgIGlmIHRva2VuIGluIHRva2VuczE6IGNvbnRpbnVlCisgICAgICAjIElmIHdlIGVuY29kZSBhIHRva2VuIHdpdGggYSAyLWJ5dGUgY29kZSwgdGhlbiB3ZSBzYXZlIGxlbih0KS0yIGJ5dGVzIGVhY2ggdGltZQorICAgICAgIyBidXQgaGF2ZSB0byBzdG9yZSB0aGUgdG9rZW4gc3RyaW5nIGl0c2VsZiB3aXRoIGEgbGVuZ3RoIG9yIHRlcm1pbmF0b3IgYnl0ZS4KKyAgICAgIHNhdmluZ3MgPSBjb3VudCAqIChsZW4odG9rZW4pIC0gMikgLSAobGVuKHRva2VuKSArIDEpCisgICAgICBpZiBzYXZpbmdzID4gMDoKKyAgICAgICAgY3QuYXBwZW5kKChzYXZpbmdzLCBjb3VudCwgdG9rZW4pKQorICAgIGN0LnNvcnQocmV2ZXJzZT1UcnVlKQorICAgICMgQSAyLWJ5dGUtY29kZS10b2tlbiBpbmRleCBjYW5ub3QgYmUgbGltaXRfdF9sZW5ndGhzIG9yIGhpZ2hlci4KKyAgICBsaW1pdF90X2xlbmd0aHMgPSBudW1fbGVhZCAqIDI1NgorICAgIHRva2VuMl9pbmRleCA9IDAKKyAgICBmb3IgaSBpbiB4cmFuZ2UobWF4MSwgbGVuKGN0KSk6CisgICAgICBpZiB0b2tlbjJfaW5kZXggPj0gbGltaXRfdF9sZW5ndGhzOgorICAgICAgICBkZWwgY3RbaTpdCisgICAgICAgIGJyZWFrCisgICAgICB0b2tlbjJfaW5kZXggKz0gbGVuKGN0W2ldWzJdKSArIDEKKyAgICBjdW11bF9zYXZpbmdzID0gc3VtKFtzIGZvciAocywgYywgdCkgaW4gY3RdKQorICAgICMgcHJpbnQgKCIlMmQgMS1ieXRlIGNvZGVzOiAlNGQgdG9rZW5zIG1pZ2h0IHNhdmUgJTZkIGJ5dGVzIiAlCisgICAgIyAgICAgICAgKG1heDEsIGxlbihjdCksIGN1bXVsX3NhdmluZ3MpKQorICAgIHJlc3VsdHMuYXBwZW5kKChjdW11bF9zYXZpbmdzLCBtYXgxLCBjdCkpCisgIGJlc3QgPSBtYXgocmVzdWx0cykgICMgKGN1bXVsX3NhdmluZ3MsIG1heDEsIGN0KQorCisgIG1heDEgPSBiZXN0WzFdCisgIHByaW50ICgibWF4aW11bSBzYXZpbmdzOiAlZCBieXRlcyB3aXRoICVkIDEtYnl0ZSBjb2RlcyAmICVkIGxlYWQgYnl0ZXMiICUKKyAgICAgICAgIChiZXN0WzBdLCBtYXgxLCBtYXhfdG9rZW5fdW5pdHMgLSBtYXgxKSkKKyAgY291bnRzX3Rva2VucyA9IGJlc3RbMl0KKyAgY3VtdWxfc2F2aW5ncyA9IDAKKyAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHNfdG9rZW5zKSk6CisgICAgbiA9IDEgaWYgaSA8IG1heDEgZWxzZSAyCisgICAgaTEgPSBpICsgMQorICAgIHQgPSBjb3VudHNfdG9rZW5zW2ldCisgICAgY3VtdWxfc2F2aW5ncyArPSB0WzBdCisgICAgaWYgaTEgPD0gMjUwIG9yIChpMSAlIDEwMCkgPT0gMCBvciBpMSA9PSBsZW4oY291bnRzX3Rva2Vucyk6CisgICAgICBwcmludCAoKCIlMDRkLiBjdW11bC4gJTZkIGJ5dGVzIHNhdmUgJTZkIGJ5dGVzIGZyb20gIiArCisgICAgICAgICAgICAgICIlNWQgKiAlZC1ieXRlIHRva2VuIGZvciAlMmQ9JyVzJyIpICUKKyAgICAgICAgICAoaTEsIGN1bXVsX3NhdmluZ3MsIHRbMF0sIHRbMV0sIG4sIGxlbih0WzJdKSwgdFsyXSkpCisKKyMgSUNVIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIFVDSEFSX1VOSUZJRURfSURFT0dSQVBIPTI5LAorX3VjaGFyX3JlID0gcmUuY29tcGlsZSgKKyAgICAiICooVUNIQVJfWzAtOUEtWl9dKykgKj0gKig/OlswLTldK3wweFswLTlhLWZBLUZdKyksIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgLyoqIFpzIEBzdGFibGUgSUNVIDIuMCAqLworX2djX2NvbW1lbnRfcmUgPSByZS5jb21waWxlKCIgKi9cKlwqICooW0EtWl1bYS16XSkgIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgVV9TUEFDRV9TRVBBUkFUT1IgICAgICAgICA9IDEyLAorX2djX3JlID0gcmUuY29tcGlsZSgiICooVV9bQS1aX10rKSAqPSAqWzAtOV0rLCIpCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIC8qKiBMIEBzdGFibGUgSUNVIDIuMCAqLworX2JjX2NvbW1lbnRfcmUgPSByZS5jb21waWxlKCIgKi9cKlwqICooW0EtWl17MSwzfSkgIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgVV9MRUZUX1RPX1JJR0hUICAgICAgICAgICAgICAgPSAwLAorX2JjX3JlID0gcmUuY29tcGlsZSgiICooVV9bQS1aX10rKSAqPSAqWzAtOV0rLCIpCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIFVCTE9DS19DWVJJTExJQyA9OSwKK191YmxvY2tfcmUgPSByZS5jb21waWxlKCIgKihVQkxPQ0tfWzAtOUEtWl9dKykgKj0gKlswLTldKywiKQorCisjIFNhbXBsZSBsaW5lIHRvIG1hdGNoOgorIyAgICBVX0VBX0FNQklHVU9VUywKK19wcm9wX2FuZF92YWx1ZV9yZSA9IHJlLmNvbXBpbGUoCisgICAgIiAqKFVfKEJQVHxEVHxFQXxHQ0J8SFNUfExCfEpHfEpUfE5UfFNCfFdCKV8oWzAtOUEtWl9dKykpIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaCBpZiBpdCBoYXMgbWF0Y2hlZCBfcHJvcF9hbmRfdmFsdWVfcmUKKyMgKHdlIHdhbnQgdG8gZXhjbHVkZSBhbGlhc2VzKToKKyMgICAgVV9KR19IQU1aQV9PTl9IRUhfR09BTD1VX0pHX1RFSF9NQVJCVVRBX0dPQUwsCitfcHJvcF9hbmRfYWxpYXNfcmUgPSByZS5jb21waWxlKCIgKlVfWzAtOUEtWl9dKyAqPSAqVSIpCisKK2RlZiBQYXJzZVVDaGFySGVhZGVyKGljdV9zcmNfcm9vdCk6CisgIHVjaGFyX3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3NyY19yb290LCAic291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbW9uIiwgInVuaWNvZGUiLCAidWNoYXIuaCIpCisgIHdpdGggb3Blbih1Y2hhcl9wYXRoLCAiciIpIGFzIHVjaGFyX2ZpbGU6CisgICAgbW9kZSA9ICIiICAjIE1vZGUgc3RyaW5nICg9cG5hbWUpIGR1cmluZyBjb250ZXh0LXNlbnNpdGl2ZSBwYXJzaW5nLgorICAgIGNvbW1lbnRfdmFsdWUgPSAiIiAgIyBQcm9wZXJ0eSB2YWx1ZSBmcm9tIGEgY29tbWVudCBwcmVjZWRpbmcgYW4gZW51bS4KKyAgICAjIE5vdGU6IFRoZSBlbnVtIFVQcm9wZXJ0eSBpcyBmaXJzdCBpbiB1Y2hhci5oLCBiZWZvcmUgdGhlIGVudW1zIGZvciB2YWx1ZXMuCisgICAgZm9yIGxpbmUgaW4gdWNoYXJfZmlsZToKKyAgICAgICMgUGFyc2Ugc29tZSBlbnVtcyB2aWEgY29udGV4dC1zZW5zaXRpdmUgIm1vZGVzIi4KKyAgICAgICMgTmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGVudW0gY29uc3RhbnQgbmFtZXMgZG8gbm90IGNvbnRhaW4KKyAgICAgICMgZW5vdWdoIGluZm9ybWF0aW9uLgorICAgICAgaWYgImVudW0gVUNoYXJDYXRlZ29yeSIgaW4gbGluZToKKyAgICAgICAgbW9kZSA9ICJnYyIKKyAgICAgICAgY29tbWVudF92YWx1ZSA9ICIiCisgICAgICAgIGNvbnRpbnVlCisgICAgICBpZiBtb2RlID09ICJnYyI6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgifSIpOgorICAgICAgICAgIG1vZGUgPSAiIgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1hdGNoID0gX2djX2NvbW1lbnRfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgY29tbWVudF92YWx1ZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF0Y2ggPSBfZ2NfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2ggYW5kIGNvbW1lbnRfdmFsdWU6CisgICAgICAgICAgZ2NfZW51bSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgcHJvcCA9IF9wcm9wZXJ0aWVzWyJnYyJdCisgICAgICAgICAgdm5hbWUgPSBHZXRTaG9ydFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIGNvbW1lbnRfdmFsdWUpCisgICAgICAgICAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiZ2MiXVsyXQorICAgICAgICAgIGljdV92YWx1ZXMuYXBwZW5kKChnY19lbnVtLCB2bmFtZSkpCisgICAgICAgIGNvbW1lbnRfdmFsdWUgPSAiIgorICAgICAgICBjb250aW51ZQorICAgICAgaWYgImVudW0gVUNoYXJEaXJlY3Rpb24geyIgaW4gbGluZToKKyAgICAgICAgbW9kZSA9ICJiYyIKKyAgICAgICAgY29tbWVudF92YWx1ZSA9ICIiCisgICAgICAgIGNvbnRpbnVlCisgICAgICBpZiBtb2RlID09ICJiYyI6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgifSIpOgorICAgICAgICAgIG1vZGUgPSAiIgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1hdGNoID0gX2JjX2NvbW1lbnRfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgY29tbWVudF92YWx1ZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF0Y2ggPSBfYmNfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2ggYW5kIGNvbW1lbnRfdmFsdWU6CisgICAgICAgICAgYmNfZW51bSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgcHJvcCA9IF9wcm9wZXJ0aWVzWyJiYyJdCisgICAgICAgICAgdm5hbWUgPSBHZXRTaG9ydFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIGNvbW1lbnRfdmFsdWUpCisgICAgICAgICAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiYmMiXVsyXQorICAgICAgICAgIGljdV92YWx1ZXMuYXBwZW5kKChiY19lbnVtLCB2bmFtZSkpCisgICAgICAgIGNvbW1lbnRfdmFsdWUgPSAiIgorICAgICAgICBjb250aW51ZQorICAgICAgIyBObyBtb2RlLCBwYXJzZSBlbnVtIGNvbnN0YW50cyB3aG9zZSBuYW1lcyBjb250YWluCisgICAgICAjIGVub3VnaCBpbmZvcm1hdGlvbiB0byBwYXJzZSB3aXRob3V0IHJlcXVpcmluZyBjb250ZXh0LgorICAgICAgbWF0Y2ggPSBfdWNoYXJfcmUubWF0Y2gobGluZSkKKyAgICAgIGlmIG1hdGNoOgorICAgICAgICBwcm9wX2VudW0gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBwcm9wX2VudW0uZW5kc3dpdGgoIl9MSU1JVCIpOgorICAgICAgICAgICMgSWdub3JlICJVQ0hBUl9CSU5BUllfTElNSVQ9NTcsIiBldGMuCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgcG5hbWUgPSBHZXRTaG9ydFByb3BlcnR5TmFtZShwcm9wX2VudW1bNjpdKQorICAgICAgICBpY3VfcHJvcCA9IChwcm9wX2VudW0sIHBuYW1lLCBbXSkKKyAgICAgICAgX2ljdV9wcm9wZXJ0aWVzLmFwcGVuZChpY3VfcHJvcCkKKyAgICAgICAgX3BuYW1lX3RvX2ljdV9wcm9wW3BuYW1lXSA9IGljdV9wcm9wCisgICAgICAgIGNvbnRpbnVlCisgICAgICBtYXRjaCA9IF91YmxvY2tfcmUubWF0Y2gobGluZSkKKyAgICAgIGlmIG1hdGNoOgorICAgICAgICBwcm9wX2VudW0gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBwcm9wX2VudW0gPT0gIlVCTE9DS19DT1VOVCI6CisgICAgICAgICAgY29udGludWUKKyAgICAgICAgcHJvcCA9IF9wcm9wZXJ0aWVzWyJibGsiXQorICAgICAgICB2bmFtZSA9IEdldFNob3J0UHJvcGVydHlWYWx1ZU5hbWUocHJvcCwgcHJvcF9lbnVtWzc6XSkKKyAgICAgICAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiYmxrIl1bMl0KKyAgICAgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKHByb3BfZW51bSwgdm5hbWUpKQorICAgICAgICBjb250aW51ZQorICAgICAgbWF0Y2ggPSBfcHJvcF9hbmRfdmFsdWVfcmUubWF0Y2gobGluZSkKKyAgICAgIGlmIG1hdGNoOgorICAgICAgICAocHJvcF9lbnVtLCB2bmFtZSkgPSBtYXRjaC5ncm91cCgxLCAzKQorICAgICAgICBpZiB2bmFtZSA9PSAiQ09VTlQiIG9yIF9wcm9wX2FuZF9hbGlhc19yZS5tYXRjaChsaW5lKToKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBwbmFtZSA9IEdldFNob3J0UHJvcGVydHlOYW1lKG1hdGNoLmdyb3VwKDIpKQorICAgICAgICBwcm9wID0gX3Byb3BlcnRpZXNbcG5hbWVdCisgICAgICAgIHZuYW1lID0gR2V0U2hvcnRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCB2bmFtZSkKKyAgICAgICAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFtwbmFtZV1bMl0KKyAgICAgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKHByb3BfZW51bSwgdm5hbWUpKQorICAjIGNjYywgbGNjYywgdGNjYyB1c2UgdGhlaXIgbnVtZXJpYyB2YWx1ZXMgYXMgImVudW0iIHZhbHVlcy4KKyAgIyBJbiB0aGUgVUNEIGRhdGEsIHRoZXNlIG51bWVyaWMgdmFsdWVzIGFyZSB0aGUgZmlyc3QgdmFsdWUgbmFtZXMsCisgICMgZm9sbG93ZWQgYnkgdGhlIHNob3J0ICYgbG9uZyB2YWx1ZSBuYW1lcy4KKyAgIyBMaXN0IHRoZSBjY2MgdmFsdWVzIGluIG51bWVyaWMgb3JkZXIuCisgIHByb3AgPSBfcHJvcGVydGllc1siY2NjIl0KKyAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiY2NjIl1bMl0KKyAgZm9yIGNjYyBpbiBzb3J0ZWQoW2ludChuYW1lKSBmb3IgbmFtZSBpbiBwcm9wWzJdXSk6CisgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKGNjYywgc3RyKGNjYykpKQorICBfcG5hbWVfdG9faWN1X3Byb3BbImxjY2MiXVsyXS5leHRlbmQoaWN1X3ZhbHVlcykgICMgQ29weSBjY2MgLT4gbGNjYy4KKyAgX3BuYW1lX3RvX2ljdV9wcm9wWyJ0Y2NjIl1bMl0uZXh0ZW5kKGljdV92YWx1ZXMpICAjIENvcHkgY2NjIC0+IHRjY2MuCisKKyAgIyBObyBuZWVkIHRvIHBhcnNlIHByZWRpY3RhYmxlIEdlbmVyYWxfQ2F0ZWdvcnlfTWFzayBlbnVtIGNvbnN0YW50cy4KKyAgIyBKdXN0IGRlZmluZSB0aGVtIGluIEFTQ0lJIG9yZGVyLgorICBwcm9wID0gX3Byb3BlcnRpZXNbImdjbSJdCisgIGljdV92YWx1ZXMgPSBfcG5hbWVfdG9faWN1X3Byb3BbImdjbSJdWzJdCisgIGZvciB2bmFtZSBpbiBzb3J0ZWQocHJvcFsyXSk6CisgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKCJVX0dDXyIgKyB2bmFtZS51cHBlcigpICsgIl9NQVNLIiwgdm5hbWUpKQorICAjIEhhcmRjb2RlIGtub3duIHZhbHVlcyBmb3IgdGhlIG5vcm1hbGl6YXRpb24gcXVpY2sgY2hlY2sgcHJvcGVydGllcywKKyAgIyBzZWUgdW5vcm0yLmggZm9yIHRoZSBVTm9ybWFsaXphdGlvbkNoZWNrUmVzdWx0IGVudW0uCisgIGljdV92YWx1ZXMgPSBfcG5hbWVfdG9faWN1X3Byb3BbIk5GQ19RQyJdWzJdCisgIGljdV92YWx1ZXMuYXBwZW5kKCgiVU5PUk1fTk8iLCAiTiIpKQorICBpY3VfdmFsdWVzLmFwcGVuZCgoIlVOT1JNX1lFUyIsICJZIikpCisgIGljdV92YWx1ZXMuYXBwZW5kKCgiVU5PUk1fTUFZQkUiLCAiTSIpKQorICBfcG5hbWVfdG9faWN1X3Byb3BbIk5GS0NfUUMiXVsyXS5leHRlbmQoaWN1X3ZhbHVlcykgICMgQ29weSBORkMgLT4gTkZLQy4KKyAgIyBObyAibWF5YmUiIHZhbHVlcyBmb3IgTkZbS11ELgorICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJORkRfUUMiXVsyXQorICBpY3VfdmFsdWVzLmFwcGVuZCgoIlVOT1JNX05PIiwgIk4iKSkKKyAgaWN1X3ZhbHVlcy5hcHBlbmQoKCJVTk9STV9ZRVMiLCAiWSIpKQorICBfcG5hbWVfdG9faWN1X3Byb3BbIk5GS0RfUUMiXVsyXS5leHRlbmQoaWN1X3ZhbHVlcykgICMgQ29weSBORkQgLT4gTkZLRC4KKworCisjIFNhbXBsZSBsaW5lIHRvIG1hdGNoOgorIyAgICBVU0NSSVBUX0xPTUEgICA9IDEzOSwvKiBMb21hICovCitfdXNjcmlwdF9yZSA9IHJlLmNvbXBpbGUoCisgICAgIiAqKFVTQ1JJUFRfW0EtWl9dKykgKj0gKlswLTldKyAqLCAqL1wqICooW0EtWl1bYS16XXszfSkgKlwqLyIpCisKK2RlZiBQYXJzZVVTY3JpcHRIZWFkZXIoaWN1X3NyY19yb290KToKKyAgdXNjcmlwdF9wYXRoID0gb3MucGF0aC5qb2luKGljdV9zcmNfcm9vdCwgInNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbW9uIiwgInVuaWNvZGUiLCAidXNjcmlwdC5oIikKKyAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsic2MiXVsyXQorICB3aXRoIG9wZW4odXNjcmlwdF9wYXRoLCAiciIpIGFzIHVzY3JpcHRfZmlsZToKKyAgICBmb3IgbGluZSBpbiB1c2NyaXB0X2ZpbGU6CisgICAgICBtYXRjaCA9IF91c2NyaXB0X3JlLm1hdGNoKGxpbmUpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgKHNjcmlwdF9lbnVtLCBzY3JpcHRfY29kZSkgPSBtYXRjaC5ncm91cCgxLCAyKQorICAgICAgICBpY3VfdmFsdWVzLmFwcGVuZCgoc2NyaXB0X2VudW0sIHNjcmlwdF9jb2RlKSkKKworCitkZWYgQ2hlY2tQTmFtZXNEYXRhKCk6CisgICIiIkNoZWNrcyB0aGF0IGV2ZXJ5IElDVSBwcm9wZXJ0eSBoYXMgYSBmdWxsIHNldCBvZiB2YWx1ZSBlbnVtIGNvbnN0YW50cywKKyAgYW5kIHRoYXQgdGhlIF9pY3VfcHJvcGVydGllcyB2YWx1ZSBuYW1lcyBtYXAgYmFjayB0byB0aGUgVUNELiIiIgorICBtaXNzaW5nX2VudW1zID0gW10KKyAgZm9yIChwX2VudW0sIHBuYW1lLCB2YWx1ZXMpIGluIF9pY3VfcHJvcGVydGllczoKKyAgICBwcm9wID0gX3Byb3BlcnRpZXNbcG5hbWVdCisgICAgdm5hbWVzID0gc2V0KHByb3BbMl0pICAjIE1vZGlmaWFibGUgY29weSBvZiB0aGUgc2V0IG9mIHNob3J0IHZhbHVlIG5hbWVzLgorICAgIGZvciAodl9lbnVtLCB2bmFtZSkgaW4gdmFsdWVzOgorICAgICAgaWYgdm5hbWUgbm90IGluIHZuYW1lczoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgPSAlcyAodWNoYXIuaCAlcykgbm90IGluIHRoZSBVQ0RcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChwbmFtZSwgdm5hbWUsIHZfZW51bSkpCisgICAgICB2bmFtZXMucmVtb3ZlKHZuYW1lKQorICAgICMgRXhjZXB0aW9ucyB0byB0aGUgYWxsLXZhbHVlcyBjaGVjazoKKyAgICAjIC0gSUNVIGRvZXMgbm90IGhhdmUgc3BlY2lmaWMgZW51bSB2YWx1ZXMgZm9yIGJpbmFyeSBOby9ZZXMuCisgICAgIyAtIElDVSByZXByZXNlbnRzIEFnZSB2YWx1ZXMgdmlhIFVWZXJzaW9uSW5mbyByYXRoZXIgdGhhbiBlbnVtIGNvbnN0YW50cy4KKyAgICAjIC0gZ2M6IElDVSBlbnVtIFVDaGFyQ2F0ZWdvcnkgb25seSBoYXMgdGhlIHNpbmdsZS1jYXRlZ29yeSB2YWx1ZXMuCisgICAgIyAgICAgICAoSUNVJ3MgZ2NtIHByb3BlcnR5IGhhcyBhbGwgb2YgdGhlIFVDRCBnYyBwcm9wZXJ0eSB2YWx1ZXMuKQorICAgIGlmIHZuYW1lcyBhbmQgbm90IChwcm9wWzBdID09ICJCaW5hcnkiIG9yIHBuYW1lIGluICgiYWdlIiwgImdjIikpOgorICAgICAgbWlzc2luZ19lbnVtcy5hcHBlbmQoKHBuYW1lLCB2bmFtZXMpKQorICBpZiBtaXNzaW5nX2VudW1zOgorICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICJtaXNzaW5nIHVjaGFyLmggZW51bSBjb25zdGFudHMgZm9yIHNvbWUgcHJvcGVydHkgdmFsdWVzOiAlcyIgJQorICAgICAgICBtaXNzaW5nX2VudW1zKQorCisKK2RlZiBXcml0ZVBOYW1lc0RhdGFIZWFkZXIob3V0X3BhdGgpOgorICBnbG9iYWwgX2N1cnJlbnRfeWVhcgorICB3aXRoIG9wZW4ob3V0X3BhdGgsICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgb3V0X2ZpbGUud3JpdGUoIiIiLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItIiIiICsgX2N1cnJlbnRfeWVhciArCisiIiIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogbWFjaGluZS1nZW5lcmF0ZWQgYnk6IGljdS90b29scy91bmljb2RlL3B5L3ByZXBhcnNldWNkLnB5CisgKi8KKworIiIiKQorCisgICAgIyBOb3RlOiBUaGUgdWNoYXIuaCAmIHVzY3JpcHQuaCBwYXJzZXJzIHN0b3JlIHRoZSBJQ1UgVW5pY29kZSBwcm9wZXJ0aWVzCisgICAgIyBhbmQgdmFsdWVzIGluIHRoZSBvcmRlciBvZiB0aGVpciBkZWZpbml0aW9uLAorICAgICMgYW5kIHRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZW0gaW4gdGhhdCBvcmRlci4KKyAgICAjIFNpbmNlIHRoZSBJQ1UgQVBJIGNvbnN0YW50cyBhcmUgc3RhYmxlIGFuZCBuZXcgdmFsdWVzIGFyZSBvbmx5CisgICAgIyBhcHBlbmRlZCBhdCB0aGUgZW5kCisgICAgIyAobmV3IHByb3BlcnRpZXMgYXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBiaW5hcnkvZW51bS8uLi4gcmFuZ2UpLAorICAgICMgdGhlIG91dHB1dCBpcyBzdGFibGUgYXMgd2VsbC4KKyAgICAjIFdoZW4gYSBwcm9wZXJ0eSBvciB2YWx1ZSBjb25zdGFudCBpcyByZW5hbWVkLAorICAgICMgaXQgb25seSBjaGFuZ2VzIHRoZSBuYW1lIGl0c2VsZiBpbiB0aGUgb3V0cHV0OworICAgICMgaXQgZG9lcyBub3QgbW92ZSBpbiB0aGUgb3V0cHV0IHNpbmNlIHRoZXJlIGlzIG5vIHNvcnRpbmcuCisgICAgIyBUaGlzIG1pbmltaXplcyBkaWZmcyBhbmQgYXNzaXN0cyB3aXRoIHJldmlld2luZyBhbmQgZXZhbHVhdGluZyB1cGRhdGVzLgorCisgICAgdmVyc2lvbiA9IF91Y2RfdmVyc2lvbi5zcGxpdCgnLicpCisgICAgd2hpbGUgbGVuKHZlcnNpb24pIDwgNDogdmVyc2lvbi5hcHBlbmQoIjAiKQorICAgIG91dF9maWxlLndyaXRlKCIjZGVmaW5lIFVOSUNPREVfVkVSU0lPTiB7ICVzIH1cblxuIiAlICIsICIuam9pbih2ZXJzaW9uKSkKKworICAgICMgQ291bnQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsaWFzZXMgZm9yIGFueSBwcm9wZXJ0eSBvciB2YWx1ZS4KKyAgICAjIFdlIHdyaXRlIHRoZSBmaW5hbCB2YWx1ZSBhdCB0aGUgZW5kLgorICAgIG1heF9hbGlhc2VzID0gbWF4KGxlbihfYmluYXJ5X3ZhbHVlc1siTiJdKSwgbGVuKF9iaW5hcnlfdmFsdWVzWyJZIl0pKQorCisgICAgIyBXcml0ZSBhbiBhcnJheSBvZiAiYmlucHJvcCIgVmFsdWUgb2JqZWN0IGluaXRpYWxpemVycworICAgICMgd2l0aCB0aGUgdmFsdWUgYWxpYXNlcyBzaGFyZWQgYW1vbmcgYWxsIGJpbmFyeSBwcm9wZXJ0aWVzLgorICAgIG91dF9maWxlLndyaXRlKCJzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2JpbnByb3BbMl0gPSB7XG4iKQorICAgIG91dF9maWxlLndyaXRlKCcgICAgVmFsdWUoMCwgIiVzIiksXG4nICUgIiAiLmpvaW4oX2JpbmFyeV92YWx1ZXNbIk4iXSkpCisgICAgb3V0X2ZpbGUud3JpdGUoJyAgICBWYWx1ZSgxLCAiJXMiKSxcbicgJSAiICIuam9pbihfYmluYXJ5X3ZhbHVlc1siWSJdKSkKKyAgICBvdXRfZmlsZS53cml0ZSgifTtcblxuIikKKworICAgICMgRm9yIGVhY2ggcHJvcGVydHkgd2l0aCBuYW1lZCB2YWx1ZXMsIHdyaXRlIGFuIGFycmF5IG9mCisgICAgIyBWYWx1ZSBvYmplY3QgaW5pdGlhbGl6ZXJzIHdpdGggdGhlIHZhbHVlIGVudW0gYW5kIHRoZSBhbGlhc2VzLgorICAgIGZvciAocF9lbnVtLCBwbmFtZSwgdmFsdWVzKSBpbiBfaWN1X3Byb3BlcnRpZXM6CisgICAgICBwcm9wID0gX3Byb3BlcnRpZXNbcG5hbWVdCisgICAgICBhbGlhc2VzID0gcHJvcFsxXQorICAgICAgaWYgbGVuKGFsaWFzZXMpID4gbWF4X2FsaWFzZXM6IG1heF9hbGlhc2VzID0gbGVuKGFsaWFzZXMpCisgICAgICBpZiBub3QgdmFsdWVzOiBjb250aW51ZQorICAgICAgb3V0X2ZpbGUud3JpdGUoInN0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfJXNbJWRdID0ge1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAocG5hbWUsIGxlbih2YWx1ZXMpKSkKKyAgICAgIGZvciAodl9lbnVtLCB2bmFtZSkgaW4gdmFsdWVzOgorICAgICAgICBhbGlhc2VzID0gX3Byb3BlcnRpZXNbcG5hbWVdWzNdW3ZuYW1lXQorICAgICAgICAjIGNjYywgbGNjYywgdGNjYzogT21pdCB0aGUgbnVtZXJpYyBzdHJpbmdzIGZyb20gdGhlIGFsaWFzZXMuCisgICAgICAgICMgKFNlZSB0aGUgY29tbWVudCBhYm91dCBjY2MgaW4gdGhlIFByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dCBoZWFkZXIuKQorICAgICAgICBpZiBwbmFtZS5lbmRzd2l0aCgiY2NjIik6IGFsaWFzZXMgPSBhbGlhc2VzWzE6XQorICAgICAgICBpZiBsZW4oYWxpYXNlcykgPiBtYXhfYWxpYXNlczogbWF4X2FsaWFzZXMgPSBsZW4oYWxpYXNlcykKKyAgICAgICAgY2FzdCA9ICIoaW50MzJfdCkiIGlmIHBuYW1lID09ICJnY20iIGVsc2UgIiIKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoJyAgICBWYWx1ZSglcyVzLCAiJXMiKSxcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAoY2FzdCwgdl9lbnVtLCAiICIuam9pbihhbGlhc2VzKSkpCisgICAgICBvdXRfZmlsZS53cml0ZSgifTtcblxuIikKKworICAgICMgRm9yIGVhY2ggcHJvcGVydHksIHdyaXRlIGEgUHJvcGVydHkgb2JqZWN0IGluaXRpYWxpemVyCisgICAgIyB3aXRoIHRoZSBwcm9wZXJ0eSBlbnVtLCBpdHMgYWxpYXNlcywgYW5kIGEgcmVmZXJlbmNlIHRvIGl0cyB2YWx1ZXMuCisgICAgb3V0X2ZpbGUud3JpdGUoInN0YXRpYyBjb25zdCBQcm9wZXJ0eSBQUk9QRVJUSUVTWyVkXSA9IHtcbiIgJQorICAgICAgICAgICAgICAgICAgIGxlbihfaWN1X3Byb3BlcnRpZXMpKQorICAgIGZvciAoZW51bSwgcG5hbWUsIHZhbHVlcykgaW4gX2ljdV9wcm9wZXJ0aWVzOgorICAgICAgcHJvcCA9IF9wcm9wZXJ0aWVzW3BuYW1lXQorICAgICAgYWxpYXNlcyA9ICIgIi5qb2luKHByb3BbMV0pCisgICAgICBpZiBwcm9wWzBdID09ICJCaW5hcnkiOgorICAgICAgICBvdXRfZmlsZS53cml0ZSgnICAgIFByb3BlcnR5KCVzLCAiJXMiKSxcbicgJSAoZW51bSwgYWxpYXNlcykpCisgICAgICBlbGlmIHZhbHVlczogICMgUHJvcGVydHkgd2l0aCBuYW1lZCB2YWx1ZXMuCisgICAgICAgIG91dF9maWxlLndyaXRlKCcgICAgUHJvcGVydHkoJXMsICIlcyIsIFZBTFVFU18lcywgJWQpLFxuJyAlCisgICAgICAgICAgICAgICAgICAgICAgIChlbnVtLCBhbGlhc2VzLCBwbmFtZSwgbGVuKHZhbHVlcykpKQorICAgICAgZWxzZToKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoJyAgICBQcm9wZXJ0eSglcywgIiVzIiksXG4nICUgKGVudW0sIGFsaWFzZXMpKQorICAgIG91dF9maWxlLndyaXRlKCJ9O1xuXG4iKQorCisgICAgb3V0X2ZpbGUud3JpdGUoImNvbnN0IGludDMyX3QgTUFYX0FMSUFTRVMgPSAlZDtcbiIgJSBtYXhfYWxpYXNlcykKKworIyBtYWluKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworZGVmIG1haW4oKToKKyAgZ2xvYmFsIF9udWxsX29yX2RlZmF1bHRzCisgIGlmIGxlbihzeXMuYXJndikgPCA0OgorICAgIHByaW50ICgiVXNhZ2U6ICVzICBwYXRoL3RvL1VDRC9yb290ICBwYXRoL3RvL0lDVS9zcmMvcm9vdCAgIgorICAgICAgICAgICAicGF0aC90by9JQ1UvdG9vbHMvcm9vdCIgJSBzeXMuYXJndlswXSkKKyAgICByZXR1cm4KKyAgKHVjZF9yb290LCBpY3Vfc3JjX3Jvb3QsIGljdV90b29sc19yb290KSA9IHN5cy5hcmd2WzE6NF0KKyAgc291cmNlX2ZpbGVzID0gW10KKyAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodWNkX3Jvb3QpOgorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgc291cmNlX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkpCisgIFByZXByb2Nlc3NGaWxlcyhzb3VyY2VfZmlsZXMsIGljdV9zcmNfcm9vdCkKKyAgIyBQYXJzZSB0aGUgcHJvY2Vzc2VkIGZpbGVzIGluIGEgcGFydGljdWxhciBvcmRlci4KKyAgZm9yIGZpbGVzIGluIF9maWxlc190b19wYXJzZToKKyAgICBmb3IgKGJhc2VuYW1lLCBwYXRoLCBwYXJzZXIpIGluIGZpbGVzOgorICAgICAgcHJpbnQgIlBhcnNpbmcgJXMiICUgYmFzZW5hbWUKKyAgICAgIHZhbHVlID0gX2ZpbGVzW2Jhc2VuYW1lXQorICAgICAgIyBVbmljb2RlIGRhdGEgZmlsZXMgYXJlIGluIFVURi04LgorICAgICAgY2hhcnNldCA9ICJVVEYtOCIKKyAgICAgIGlmIGJhc2VuYW1lID09ICJOYW1lc0xpc3QudHh0IjoKKyAgICAgICAgIyBUaGUgTmFtZXNMaXN0IHVzZWQgdG8gYmUgaW4gTGF0aW4tMSBiZWZvcmUgVW5pY29kZSA2LjIuCisgICAgICAgIG51bWVyaWNfdWNkX3ZlcnNpb24gPSBbaW50KGZpZWxkKSBmb3IgZmllbGQgaW4gX3VjZF92ZXJzaW9uLnNwbGl0KCcuJyldCisgICAgICAgIGlmIG51bWVyaWNfdWNkX3ZlcnNpb24gPCBbNiwgMl06IGNoYXJzZXQgPSAiSVNPLTg4NTktMSIKKyAgICAgIGluX2ZpbGUgPSBjb2RlY3Mub3BlbihwYXRoLCAiciIsIGNoYXJzZXQpCisgICAgICB3aXRoIGluX2ZpbGU6CisgICAgICAgIHBhcnNlcihpbl9maWxlKQorICBfbnVsbF9vcl9kZWZhdWx0cyA9IF9udWxsX3ZhbHVlcy5jb3B5KCkKKyAgX251bGxfb3JfZGVmYXVsdHMudXBkYXRlKF9kZWZhdWx0cykKKyAgIyBFdmVyeSBDYXRhbG9nIGFuZCBFbnVtZXJhdGVkIHByb3BlcnR5IG11c3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUsCisgICMgZnJvbSBhIEBtaXNzaW5nIGxpbmUuICJudiIgPSAibnVsbCB2YWx1ZSIuCisgIHBudiA9IFtwbmFtZSBmb3IgKHBuYW1lLCBudikgaW4gX251bGxfb3JfZGVmYXVsdHMuaXRlcml0ZW1zKCkgaWYgbnYgPT0gIj8/Il0KKyAgaWYgcG52OgorICAgIHJhaXNlIEV4Y2VwdGlvbigibm8gZGVmYXVsdCB2YWx1ZXMgKEBtaXNzaW5nIGxpbmVzKSBmb3IgIiArCisgICAgICAgICAgICAgICAgICAgICJzb21lIENhdGFsb2cgb3IgRW51bWVyYXRlZCBwcm9wZXJ0aWVzOiAlcyAiICUgcG52KQorICAjIFdyaXRlIE5vcm1hbGl6ZXIyIGlucHV0IHRleHQgZmlsZXMuCisgICMgRG8gdGhpcyBiZWZvcmUgY29tcGFjdGluZyB0aGUgZGF0YSBzbyB0aGF0IHdlIG5lZWQgbm90IGhhbmRsZSBmYWxsYmFja3MuCisgIHVuaWRhdGFfcGF0aCA9IG9zLnBhdGguam9pbihpY3Vfc3JjX3Jvb3QsICJzb3VyY2UiLCAiZGF0YSIsICJ1bmlkYXRhIikKKyAgbm9ybTJfcGF0aCA9IG9zLnBhdGguam9pbih1bmlkYXRhX3BhdGgsICJub3JtMiIpCisgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhub3JtMl9wYXRoKTogb3MubWFrZWRpcnMobm9ybTJfcGF0aCkKKyAgV3JpdGVOb3JtMihub3JtMl9wYXRoKQorICAjIE9wdGltaXplIGJsb2NrIHZzLiBjcCBwcm9wZXJ0aWVzLgorICBDb21wYWN0QmxvY2tzKCkKKyAgIyBXcml0ZSB0aGUgcHB1Y2QudHh0IG91dHB1dCBmaWxlLgorICAjIFVzZSBVUy1BU0NJSSBzbyB0aGF0IElDVSB0ZXN0cyBjYW4gcGFyc2UgaXQgaW4gdGhlIHBsYXRmb3JtIGNoYXJzZXQsCisgICMgd2hpY2ggbWF5IGJlIEVCQ0RJQy4KKyAgIyBGaXggdXAgbm9uLUFTQ0lJIGRhdGEgKE5hbWVzTGlzdC50eHQgaGVhZGluZ3MpIHRvIGZpdC4KKyAgb3V0X3BhdGggPSBvcy5wYXRoLmpvaW4odW5pZGF0YV9wYXRoLCAicHB1Y2QudHh0IikKKyAgd2l0aCBjb2RlY3Mub3BlbihvdXRfcGF0aCwgInciLCAiVVMtQVNDSUkiKSBhcyBvdXRfZmlsZToKKyAgICBXcml0ZVByZXBhcnNlZFVDRChvdXRfZmlsZSkKKyAgICBvdXRfZmlsZS5mbHVzaCgpCisKKyAgIyBUT0RPOiBQcmludE5hbWVTdGF0cygpCisKKyAgIyBJQ1UgZGF0YSBmb3IgcHJvcGVydHkgJiB2YWx1ZSBuYW1lcyBBUEkKKyAgUGFyc2VVQ2hhckhlYWRlcihpY3Vfc3JjX3Jvb3QpCisgIFBhcnNlVVNjcmlwdEhlYWRlcihpY3Vfc3JjX3Jvb3QpCisgIENoZWNrUE5hbWVzRGF0YSgpCisgIGdlbnByb3BzX3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3Rvb2xzX3Jvb3QsICJ1bmljb2RlIiwgImMiLCAiZ2VucHJvcHMiKQorICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ2VucHJvcHNfcGF0aCk6IG9zLm1ha2VkaXJzKGdlbnByb3BzX3BhdGgpCisgIG91dF9wYXRoID0gb3MucGF0aC5qb2luKGdlbnByb3BzX3BhdGgsICJwbmFtZXNfZGF0YS5oIikKKyAgV3JpdGVQTmFtZXNEYXRhSGVhZGVyKG91dF9wYXRoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZS5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMWVlY2QKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vQnVuZGxlLmphdmEKQEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworLyoqCisgKiBBIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIEJ1bmRsZSBvZiBSZXNvdXJjZXMgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudC4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgQnVuZGxlIHsKKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgZm9sbG93aW5nIHB1YmxpYyBjbGFzcyB2YXJpYWJsZXMgcmVmbGVjdCB0aGUgdmFyaW91cyBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGFzCisgICAgICogbWV0YS1kYXRhIGluIGEgcmVzb3VyY2UgYnVuZGxlIGZvcm1hdHRlZCBieSBSQk1hbmFnZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIG5hbWU7CisgICAgLyoqCisgICAgICogVGhlIGVuY29kaW5nIG9mIHRoZSBidW5kbGUgKGUuZy4gJ2VuJywgJ2VuX1VTJywgJ2RlJywgZXRjLikKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGVuY29kaW5nOworICAgIC8qKgorICAgICAqIEEgZGVzY3JpcHRvciBvZiB0aGUgbGFuZ3VhZ2UgaW4gdGhlIGVuY29kaW5nIChlLmcuIEVuZ2xpc2gsIEdlcm1hbiwgZXRjLikKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGxhbmd1YWdlOworICAgIC8qKgorICAgICAqIEEgZGVzY3JpcHRvciBvZiB0aGUgY291bnRyeSBpbiB0aGUgZW5jb2RpbmcgKGUuZy4gVVMsIENhbmFkYSwgR3JlYXQgQnJpdGFpbikKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGNvdW50cnk7CisgICAgLyoqCisgICAgICogVGhlIGRlc2NyaXB0b3Igb2YgdGhlIHZhcmlhbnQgaW4gdGhlIGVuY29kaW5nIChlLmcuIEV1cm8sIElyaXNoLCBldGMuKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdmFyaWFudDsKKyAgICAvKioKKyAgICAgKiBBIGNvbW1lbnQgY29uY2VybmluZyB0aGUgYnVuZGxlCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBjb21tZW50OworICAgIC8qKgorICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSBtYW5hZ2VybWVudCBvZiB0aGlzIGJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgbWFuYWdlcjsKKyAgICAKKyAgICBwcml2YXRlIFRyZWVTZXQgZ3JvdXBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmVjdG9yIG9mIGdyb3VwcyBvZiBOTFMgaXRlbXMsIHRoZSBrZXkgaXMgdGhlIGdyb3VwIG5hbWUKKyAgICAKKyAgICAvKioKKyAgICAgKiBBIGhhc2h0YWJsZSBvZiBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBidW5kbGUsIGhhc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIKKyAgICAgKiBOTFMga2V5LgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBIYXNodGFibGUgYWxsSXRlbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBoYXNodGFibGUgb2YgYWxsIGl0ZW1zIGluIHRoZSBmaWxlLCB0aGUga2V5IGlzIHRoZSBOTFMga2V5CisgICAgCisgICAgcHJpdmF0ZSBUcmVlU2V0IHVudHJhbnNsYXRlZEl0ZW1zOyAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZlY3RvciBvZiBhbGwgaXRlbXMgd2hpY2ggYXJlIHVudHJhbnNsYXRlZAorICAgIAorICAgIC8qKgorICAgICAqIEEgdmVjdG9yIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBpdGVtcyB3aGljaCBhcmUgZHVwbGljYXRlcyAoYmFzZWQgb24gdGhlIE5MUyBrZXlzKQorICAgICAqIG9mIGl0ZW1zIHByZXZpb3VzbHkgZGVjbGFyZWQgaW4gdGhlIGJ1bmRsZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgVmVjdG9yIGR1cGxpY2F0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmVjdG9yIG9mIGl0ZW1zIHdoaWNoIGFyZSBkdXBsaWNhdGVzIChOTFMgS2V5cykgb2YgcHJldmlvdXMgaXRlbXMKKwkJCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGJ1bmRsZSB3aXRoIGEgZ2l2ZW4gZW5jb2RpbmcKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgQnVuZGxlKFN0cmluZyBlbmNvZGluZykgeworICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7CisgICAgICAgIGxhbmd1YWdlID0gbnVsbDsKKyAgICAgICAgY291bnRyeSAgPSBudWxsOworICAgICAgICB2YXJpYW50ICA9IG51bGw7CisgICAgICAgIGNvbW1lbnQgID0gbnVsbDsKKyAgICAgICAgbWFuYWdlciAgPSBudWxsOworICAgICAgICBncm91cHMgPSBuZXcgVHJlZVNldChuZXcgQ29tcGFyYXRvcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CisgICAgICAgICAgICAgICAgaWYgKCEobzEgaW5zdGFuY2VvZiBCdW5kbGVHcm91cCkgfHwgIShvMiBpbnN0YW5jZW9mIEJ1bmRsZUdyb3VwKSkKKyAgICAgICAgICAgICAgICAJcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZzEgPSAoQnVuZGxlR3JvdXApbzE7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZzIgPSAoQnVuZGxlR3JvdXApbzI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGcxLmdldE5hbWUoKS5jb21wYXJlVG8oZzIuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgdW50cmFuc2xhdGVkSXRlbXMgPSBuZXcgVHJlZVNldChuZXcgQ29tcGFyYXRvcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CisgICAgICAgICAgICAgICAgaWYgKCEobzEgaW5zdGFuY2VvZiBCdW5kbGVJdGVtKSB8fCAhKG8yIGluc3RhbmNlb2YgQnVuZGxlSXRlbSkpIHJldHVybiAwOworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaTEgPSAoQnVuZGxlSXRlbSlvMTsKKyAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGkyID0gKEJ1bmRsZUl0ZW0pbzI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkxLmdldEtleSgpLmNvbXBhcmVUbyhpMi5nZXRLZXkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZHVwbGljYXRlcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgYWxsSXRlbXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBFbmNvZGluZ3MgYXJlIG9mIHRoZSBmb3JtIC0+IGxhbmd1YWdlX2NvdW50cnlfdmFyaWFudCA8LSAoZm9yIGV4YW1wbGU6ICJlbl91c19zb3V0aGVybiIpLgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxhbmd1YWdlIGVuY29kaW5nIHN0cmluZywgb3IgbnVsbCBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkCisgICAgICovCisJCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2VFbmNvZGluZygpIHsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKGVuY29kaW5nLmluZGV4T2YoIl8iKSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kaW5nLnN1YnN0cmluZygwLGVuY29kaW5nLmluZGV4T2YoIl8iKSk7CisgICAgICAgIHJldHVybiBlbmNvZGluZy50cmltKCk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBFbmNvZGluZ3MgYXJlIG9mIHRoZSBmb3JtIC0+IGxhbmd1YWdlX2NvdW50cnlfdmFyaWFudCA8LSAoZm9yIGV4YW1wbGU6ICJlbl91c19zb3V0aGVybiIpLgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvdW50cnkgZW5jb2Rpbmcgc3RyaW5nLCBvciBudWxsIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgKi8KKwkJCisgICAgcHVibGljIFN0cmluZyBnZXRDb3VudHJ5RW5jb2RpbmcoKSB7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsIHx8IGVuY29kaW5nLmluZGV4T2YoIl8iKSA8IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgLy8gU3RyaXAgb2ZmIHRoZSBsYW5ndWFnZQorICAgICAgICBTdHJpbmcgd29ya1N0ciA9IGVuY29kaW5nLnN1YnN0cmluZyhlbmNvZGluZy5pbmRleE9mKCJfIikrMSxlbmNvZGluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmICh3b3JrU3RyLmluZGV4T2YoIl8iKSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHdvcmtTdHIuc3Vic3RyaW5nKDAsZW5jb2RpbmcuaW5kZXhPZigiXyIpKTsKKyAgICAgICAgcmV0dXJuIHdvcmtTdHIudHJpbSgpOworICAgIH0KKwkJCisgICAgLyoqCisgICAgICogRW5jb2RpbmdzIGFyZSBvZiB0aGUgZm9ybSAtPiBsYW5ndWFnZV9jb3VudHJ5X3ZhcmlhbnQgPC0gKGZvciBleGFtcGxlOiAiZW5fdXNfc291dGhlcm4iKS4KKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB2YXJpYW50IGVuY29kaW5nIHN0cmluZywgb3IgbnVsbCBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkCisgICAgICovCisJCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFyaWFudEVuY29kaW5nKCkgeworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCB8fCBlbmNvZGluZy5pbmRleE9mKCJfIikgPCAwKQorICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIC8vIFN0cmlwIG9mZiB0aGUgbGFuZ3VhZ2UKKyAgICAgICAgU3RyaW5nIHdvcmtTdHIgPSBlbmNvZGluZy5zdWJzdHJpbmcoZW5jb2RpbmcuaW5kZXhPZigiXyIpKzEsZW5jb2RpbmcubGVuZ3RoKCkpOworICAgICAgICBpZiAod29ya1N0ciA9PSBudWxsIHx8IHdvcmtTdHIubGVuZ3RoKCkgPCAxIHx8IHdvcmtTdHIuaW5kZXhPZigiXyIpIDwgMCkKKyAgICAgICAgCXJldHVybiBudWxsOworICAgICAgICAvLyBTdHJpcCBvZmYgdGhlIGNvdW50cnkKKyAgICAgICAgd29ya1N0ciA9IHdvcmtTdHIuc3Vic3RyaW5nKGVuY29kaW5nLmluZGV4T2YoIl8iKSsxLCB3b3JrU3RyLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHdvcmtTdHIudHJpbSgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBVbnRyYW5zbGF0ZWRJdGVtcyBhcyBhIHZlY3Rvci4gSSBzaG91bGQgZmluZCB3aGVyZSB0aGlzIGhhcHBlbnMgYW5kIHN0b3AgaXQuCisgICAgICovCisJCQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0VW50cmFuc2xhdGVkSXRlbXNBc1ZlY3RvcigpIHsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHVudHJhbnNsYXRlZEl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCisgICAgICAgIAl2LmFkZEVsZW1lbnQoaXRlci5uZXh0KCkpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIENoZWNrcyBhbGwgaXRlbXMgaW4gdGhlIHVudHJhbnNsYXRlZCBpdGVtcyBzZXQuIElmIHRoZXkgYmVsb25nIHRvIGEgZ3JvdXAgd2hvc2UgbmFtZQorICAgICAqIG1hdGNoZXMgdGhlIHBhc3NlZCBpbiBuYW1lLCB0aGVuIHRoZXkgYXJlIHJlbW92ZWQuCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVVudHJhbnNsYXRlZEl0ZW1zQnlHcm91cChTdHJpbmcgZ3JvdXBOYW1lKSB7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSB1bnRyYW5zbGF0ZWRJdGVtcy5pdGVyYXRvcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSBudWxsOworICAgICAgICAgICAgICAgIGl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVW50cmFuc2xhdGVkSXRlbShpdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGFuIGl0ZW0gb2YgdGhlIGdpdmVuIGtleSBuYW1lIGV4aXN0cyBpbiB0aGUgc2V0IG9mIHVudHJhbnNsYXRlZCBpdGVtcy4gSWYKKyAgICAgKiBpdCBkb2VzIGV4aXN0LCB0aGVuIGl0IGlzIHJlbW92ZWQuCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVVudHJhbnNsYXRlZEl0ZW0oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHVudHJhbnNsYXRlZEl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoaXRlbS5nZXRLZXkoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB1bnRyYW5zbGF0ZWRJdGVtcy5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGJvb2xlYW4gb2Ygd2V0aGVyIGEgZ3JvdXAgb2YgYSBnaXZlbiBuYW1lIGV4aXN0cyBpbiB0aGUgYnVuZGxlCisgICAgICovCisJCQorICAgIHB1YmxpYyBib29sZWFuIGhhc0dyb3VwKFN0cmluZyBncm91cE5hbWUpIHsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGdyb3Vwcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKGdyb3VwLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkKKyAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBncm91cCBvZiB0aGUgZ2l2ZW4gbmFtZSBhbmQgb3B0aW9uYWxseSBhc3NvY2lhdGVzIGEgY29tbWVudCB3aXRoCisgICAgICogdGhhdCBncm91cC4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBhZGRCdW5kbGVHcm91cChTdHJpbmcgZ3JvdXBOYW1lLCBTdHJpbmcgZ3JvdXBDb21tZW50KSB7CisgICAgICAgIEJ1bmRsZUdyb3VwIGJnID0gbmV3IEJ1bmRsZUdyb3VwKHRoaXMsIGdyb3VwTmFtZSk7CisgICAgICAgIGJnLnNldENvbW1lbnQoZ3JvdXBDb21tZW50KTsKKyAgICAgICAgYWRkQnVuZGxlR3JvdXAoYmcpOworICAgIH0KKwkJCisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgb2YgdGhlIGdpdmVuIG5hbWUgaWYgaXQgZXhpc3RzIGluIHRoZSBidW5kbGUKKyAgICAgKi8KKwkJCisgICAgcHVibGljIHZvaWQgcmVtb3ZlR3JvdXAoU3RyaW5nIGdyb3VwTmFtZSkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQnVuZGxlR3JvdXAgdGVtcEdyb3VwID0gKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRlbXBHcm91cC5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBncm91cHMucmVtb3ZlKHRlbXBHcm91cCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtcyBmcm9tIHRoZSB1bnRhbnNsYXRlZCBpdGVtcworICAgICAgICByZW1vdmVVbnRyYW5zbGF0ZWRJdGVtc0J5R3JvdXAoZ3JvdXBOYW1lKTsKKwkJCQorICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIEl0ZW1zCisgICAgICAgIEVudW1lcmF0aW9uIGVsZW1zID0gYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUoZWxlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWVsZW1zLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkgeworICAgICAgICAgICAgICAgIGFsbEl0ZW1zLnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkJCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHNpbmdsZSByZXNvdXJjZSBpdGVtIGZyb20gdGhlIGJ1bmRsZQorICAgICAqLworCQkKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVJdGVtKFN0cmluZyBrZXkpIHsKKyAgICAgICAgT2JqZWN0IG8gPSBhbGxJdGVtcy5nZXQoa2V5KTsKKyAgICAgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pbzsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGFsbEl0ZW1zIEhhc2h0YWJsZQorICAgICAgICAgICAgYWxsSXRlbXMucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBpdGVtJ3MgZ3JvdXAKKyAgICAgICAgICAgIGlmIChpdGVtLmdldFBhcmVudEdyb3VwKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gaXRlbS5nZXRQYXJlbnRHcm91cCgpOworICAgICAgICAgICAgICAgIGdyb3VwLnJlbW92ZUJ1bmRsZUl0ZW0oa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHVudHJhbnNsYXRlZEl0ZW1zIEhhc2h0YWJsZQorICAgICAgICAgICAgcmVtb3ZlVW50cmFuc2xhdGVkSXRlbShrZXkpOworICAgICAgICB9CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBhZGQgYSBCdW5kbGVJdGVtIHRvIHRoZSB1bnRyYW5zbGF0ZWRJdGVtcy4gVGhlIGFkZGl0aW9uIHdpbGwgZmFpbCBpbiB0d28gY2FzZXM6IE9uZSwgaWYKKyAgICAgKiB0aGUgaXRlbSBkb2VzIG5vdCBhbGwgcmVhZHkgYmVsb25nIHRvIHRoaXMgQnVuZGxlLCBhbmQgVHdvLCBpZiB0aGUgaXRlbSBpcyBhbGwgcmVhZHkgaW4gdGhlIHNldCBvZgorICAgICAqIHVudHJhbnNsYXRlZCBpdGVtcy4KKyAgICAgKi8KKwkJCisgICAgcHVibGljIHZvaWQgYWRkVW50cmFuc2xhdGVkSXRlbShCdW5kbGVJdGVtIGl0ZW0pIHsKKyAgICAgICAgaWYgKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKSAhPSB0aGlzKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAvLyBSZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorICAgICAgICBpZiAodW50cmFuc2xhdGVkSXRlbXMuY29udGFpbnMoaXRlbSkpIHsKKyAgICAgICAgCXVudHJhbnNsYXRlZEl0ZW1zLnJlbW92ZShpdGVtKTsKKyAgICAgICAgfQorICAgIAl1bnRyYW5zbGF0ZWRJdGVtcy5hZGQoaXRlbSk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IG1hcmtlZCBhcyB1bnRyYW5zbGF0ZWQKKyAgICAgKi8KKwkJCisgICAgcHVibGljIGludCBnZXRVbnRyYW5zbGF0ZWRJdGVtc1NpemUoKSB7CisgICAgICAgIHJldHVybiB1bnRyYW5zbGF0ZWRJdGVtcy5zaXplKCk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleHRoIHVudHJhbnNsYXRlZCBpdGVtCisgICAgICovCisJCQorICAgIHB1YmxpYyBCdW5kbGVJdGVtIGdldFVudHJhbnNsYXRlZEl0ZW0oaW50IGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA+PSB1bnRyYW5zbGF0ZWRJdGVtcy5zaXplKCkpCisgICAgICAgIAlyZXR1cm4gbnVsbDsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHVudHJhbnNsYXRlZEl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGluZGV4OyBpKyspCisgICAgICAgIAlpdGVyLm5leHQoKTsKKyAgICAgICAgcmV0dXJuIChCdW5kbGVJdGVtKWl0ZXIubmV4dCgpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHZhcmlvdXMgcmVzb3VyY2UgYnVuZGxlIGdyb3VwcyBzdG9yZWQgaW4gYSBWZWN0b3IgY29sbGVjdGlvbi4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgVmVjdG9yIGdldEdyb3Vwc0FzVmVjdG9yKCkgeworICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGdyb3Vwcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgdi5hZGRFbGVtZW50KGdyb3VwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGdyb3VwcyBpbiB0aGUgYnVuZGxlLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBDb3VudCgpIHsKKyAgICAgICAgcmV0dXJuIGdyb3Vwcy5zaXplKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBidW5kbGUgZ3JvdXAgZ2l2ZW4gYSBjZXJ0YWluIGluZGV4LgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBCdW5kbGVHcm91cCBnZXRCdW5kbGVHcm91cChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdldEdyb3VwQ291bnQoKSkKKyAgICAgICAgCXJldHVybiBudWxsOworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGluZGV4OyBpKyspCisgICAgICAgIAlpdGVyLm5leHQoKTsKKyAgICAgICAgcmV0dXJuIChCdW5kbGVHcm91cClpdGVyLm5leHQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb29rcyBmb3IgYSBidW5kbGUgZ3JvdXAgb2YgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGJ1bmRsZSBhbmQKKyAgICAgKiByZXR1cm5zIGl0IGlmIGZvdW5kLgorICAgICAqLworCQkKKyAgICBwdWJsaWMgQnVuZGxlR3JvdXAgZ2V0QnVuZGxlR3JvdXAoU3RyaW5nIGdyb3VwTmFtZSkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBCdW5kbGVHcm91cCBncm91cCA9IChCdW5kbGVHcm91cClpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChncm91cC5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpCisgICAgICAgICAgICAJcmV0dXJuIGdyb3VwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBMb29rcyB1cCBhbmQgcmV0dXJucyBhIGJ1bmRsZSBpdGVtIHN0b3JlZCBpbiB0aGUgYnVuZGxlIGJhc2VkIG9uIGl0cworICAgICAqIE5MUyBsb29rdXAga2V5LgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBCdW5kbGVJdGVtIGdldEJ1bmRsZUl0ZW0oU3RyaW5nIGtleSkgeworICAgICAgICByZXR1cm4gKEJ1bmRsZUl0ZW0pYWxsSXRlbXMuZ2V0KGtleSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBPbmUgZ3JvdXAgaXMgY3JlYXRlZCBmb3IgYWxsIGJ1bmRsZXMgY2FsbGVkICdVbmdyb3VwZWQgSXRlbXMnLiBUaGlzIGlzIHRoZSBidW5kbGUKKyAgICAgKiBncm91cCBpbiB3aGljaCBidW5kbGUgaXRlbXMgYXJlIHBsYWNlZCB0aGF0IGFyZSBub3Qgc3BlY2lmaWNhbGx5IGdyb3VwZWQgaW4gdGhlCisgICAgICogcmVzb3VyY2UgYnVuZGxlIGZpbGUuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhhdCBidW5kbGUgZ3JvdXAuCisgICAgICovCisgICAgCisgICAgcHVibGljIEJ1bmRsZUdyb3VwIGdldFVuZ3JvdXBlZEdyb3VwKCkgeworICAgICAgICByZXR1cm4gZ2V0QnVuZGxlR3JvdXAoIlVuZ3JvdXBlZCBJdGVtcyIpOworICAgIH0KKwkJCisgICAgLyoqCisgICAgICogQWRkIGEgYnVuZGxlIGdyb3VwIHRvIHRoZSBidW5kbGUKKyAgICAgKi8KKyAgICAgCisgICAgcHVibGljIHZvaWQgYWRkQnVuZGxlR3JvdXAoQnVuZGxlR3JvdXAgYmcpIHsKKyAgICAgICAgZ3JvdXBzLmFkZChiZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIGEgYnVuZGxlIGl0ZW0gdG8gdGhlIGJ1bmRsZS4gVGhpcyBidW5kbGUgaXRlbSBzaG91bGQgYWxsIHJlYWR5IGhhdmUgaXRzCisgICAgICogYnVuZGxlIGdyb3VwIGFzc2lnbmVkLgorICAgICAqLworCQkKKyAgICBwdWJsaWMgdm9pZCBhZGRCdW5kbGVJdGVtKEJ1bmRsZUl0ZW0gaXRlbSkgeworICAgICAgICBpZiAoYWxsSXRlbXMuY29udGFpbnNLZXkoaXRlbS5nZXRLZXkoKSkpIHsKKyAgICAgICAgICAgIGR1cGxpY2F0ZXMuYWRkRWxlbWVudChpdGVtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghKGdyb3Vwcy5jb250YWlucyhpdGVtLmdldFBhcmVudEdyb3VwKCkpKSkKKyAgICAgICAgICAgIAlhZGRCdW5kbGVHcm91cChpdGVtLmdldFBhcmVudEdyb3VwKCkpOworICAgICAgICAgICAgaXRlbS5nZXRQYXJlbnRHcm91cCgpLmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgICAgICBhbGxJdGVtcy5wdXQoaXRlbS5nZXRLZXkoKSwgaXRlbSk7CisgICAgICAgICAgICByZW1vdmVVbnRyYW5zbGF0ZWRJdGVtKGl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgaWYgKCFpdGVtLmlzVHJhbnNsYXRlZCgpKQorICAgICAgICAgICAgCWFkZFVudHJhbnNsYXRlZEl0ZW0oaXRlbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQSBtZXRob2QgdXNlZnVsIGluIGRlYnVnZ2luZy4gVGhlIHN0cmluZyByZXR1cm5lZCBkaXNwbGF5cyB0aGUgZW5jb2RpbmcKKyAgICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVuZGxlIGFuZCB3ZXRoZXIgb3Igbm90IGl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mCisgICAgICogYSByZXNvdXJjZSBidW5kbGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nIHJldFN0ciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwgJiYgIWxhbmd1YWdlLmVxdWFscygiIikpIHJldFN0ciA9IGxhbmd1YWdlOworICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsICYmICFjb3VudHJ5LmVxdWFscygiIikpIHJldFN0ciArPSAiLCAiICsgY291bnRyeTsKKyAgICAgICAgaWYgKHZhcmlhbnQgIT0gbnVsbCAmJiAhdmFyaWFudC5lcXVhbHMoIiIpKSByZXRTdHIgKz0gIiwgIiArIHZhcmlhbnQ7CisJCQkKKyAgICAgICAgcmV0U3RyICs9ICIgKCIgKyAoZW5jb2RpbmcgPT0gbnVsbCB8fCBlbmNvZGluZy5lcXVhbHMoIiIpID8gIkJhc2UgQ2xhc3MiIDogZW5jb2RpbmcpICsgIikiOworICAgICAgICByZXR1cm4gcmV0U3RyOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIFN0cmluZyB3aGljaCBpcyBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uIGluIGEgLnByb3BlcnRpZXMKKyAgICAgKiBzdHlsZSByZXNvdXJjZSBidW5kbGUuIEl0IGF0dGFjaGVzIChpbiBjb21tZW50cykgdGhlIG1ldGEgZGF0YSB0aGF0IFJCTWFuYWdlcgorICAgICAqIHJlYWRzIHRvIG1hbmFnZSB0aGUgcmVzb3VyY2UgYnVuZGxlIGZpbGUuIFRoaXMgcG9ydGlvbiBvZiB0aGUgb3V0cHV0IHNob3VsZAorICAgICAqIGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlc291cmNlIGJ1bmRsZSBmaWxlLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgdG9PdXRwdXRTdHJpbmcoKSB7CisgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICByZXRTdHIgID0gIiMgQGZpbGUgICAgICAgICAgIiArIG5hbWUgICAgICsgIlxuIjsKKyAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHJldFN0ciArPSAiIyBAZmlsZUVuY29kaW5nICAiICsgZW5jb2RpbmcgKyAiXG4iOworICAgICAgICBpZiAobGFuZ3VhZ2UgIT0gbnVsbCkgcmV0U3RyICs9ICIjIEBmaWxlTGFuZ3VhZ2UgICIgKyBsYW5ndWFnZSArICJcbiI7CisgICAgICAgIGlmIChjb3VudHJ5ICAhPSBudWxsKSByZXRTdHIgKz0gIiMgQGZpbGVDb3VudHJ5ICAgIiArIGNvdW50cnkgICsgIlxuIjsKKyAgICAgICAgaWYgKHZhcmlhbnQgICE9IG51bGwpIHJldFN0ciArPSAiIyBAZmlsZVZhcmlhbnQgICAiICsgdmFyaWFudCAgKyAiXG4iOworICAgICAgICBpZiAobWFuYWdlciAgIT0gbnVsbCkgcmV0U3RyICs9ICIjIEBmaWxlTWFuYWdlciAgICIgKyBtYW5hZ2VyICArICJcbiI7CisgICAgICAgIGlmIChjb21tZW50ICAhPSBudWxsKSByZXRTdHIgKz0gIiMgQGZpbGVDb21tZW50ICAgIiArIGNvbW1lbnQgICsgIlxuIjsKKyAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGhlbHBpbmcgbWV0aG9kIGZvciBvdXRwdXR0aW5nIHRoZSBmb3JtYXR0ZWQgY29udGVudHMgb2YgdGhlIGJ1bmRsZSB0byBhCisgICAgICogcHJpbnQgc3RyZWFtLiBUaGUgbWV0aG9kIGZpcnN0IG91dHB1dHMgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBhbmQgdGhlbiBvdXRwdXRzCisgICAgICogZWFjaCBidW5kbGUgZ3JvdXAncyBmb3JtYXR0ZWQgZGF0YSB3aGljaCBpbmNsdWRlcyBlYWNoIGJ1bmRsZSBpdGVtLgorICAgICAqLworCQkKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUNvbnRlbnRzKFByaW50U3RyZWFtIHBzKSB7CisgICAgICAgIHBzLnByaW50bG4odGhpcy50b091dHB1dFN0cmluZygpKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGdyb3Vwcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICgoQnVuZGxlR3JvdXApaXRlci5uZXh0KCkpLndyaXRlQ29udGVudHMocHMpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBoZWxwaW5nIG1ldGhvZCBmb3Igb3V0cHV0dGluZyB0aGUgZm9ybWF0dGVkIGNvbnRlbnRzIG9mIHRoZSBidW5kbGUgdG8gYQorICAgICAqIG91cHV0IFdyaXRlciAoc3VjaCBhcyBhIEZpbGVXcml0ZXIpLiBUaGUgbWV0aG9kIGZpcnN0IG91dHB1dHMgdGhlIGhlYWRlcgorICAgICAqIGluZm9ybWF0aW9uIGFuZCB0aGVuIG91dHB1dHMgZWFjaCBidW5kbGUgZ3JvdXAncyBmb3JtYXR0ZWQgZGF0YSB3aGljaCBpbmNsdWRlcworICAgICAqIGVhY2ggYnVuZGxlIGl0ZW0uCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHcud3JpdGUodGhpcy50b091dHB1dFN0cmluZygpICsgIlxuIik7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBncm91cHMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAoKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpKS53cml0ZUNvbnRlbnRzKHcpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9CdW5kbGVHcm91cC5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUdyb3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjY2VkYgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9CdW5kbGVHcm91cC5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogQSBjbGFzcyByZXByZXNlbnRpbmcgYSBncm91cCBvZiBCdW5kbGVJdGVtcyBhbmQgdGhlIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhhdCBncm91cAorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBCdW5kbGVHcm91cCB7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAKKyAgICBwcml2YXRlIFN0cmluZyBjb21tZW50OyAgICAgICAgICAgICAgICAgICAgIC8vIEEgY29tbWVudCBkZXNjcmliaW5nIHRoaXMgZ3JvdXAKKyAgICBwcml2YXRlIFRyZWVTZXQgaXRlbXM7ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBOTFMgaXRlbXMgY29udGFpbmVkIGluIHRoaXMgZ3JvdXAKKyAgICBwcml2YXRlIEJ1bmRsZSBidW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwYXJlbnQgQnVuZGxlIG9iamVjdCBvZiB0aGlzIGdyb3VwCisJCQorICAgIC8qKgorICAgICAqIEJhc2ljIGRhdGEgY29uc3RydWN0b3IuCisgICAgICogQ3JlYXRlcyBhIEJ1bmRsZUdyb3VwIHdpdGggYSBwYXJlbnQgYnVuZGxlIGFuZCBhIGdpdmVuIG5hbWUuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZUdyb3VwKEJ1bmRsZSBwYXJlbnQsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIGJ1bmRsZSA9IHBhcmVudDsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgY29tbWVudCA9IG51bGw7CisgICAgICAgIGl0ZW1zID0gbmV3IFRyZWVTZXQobmV3IENvbXBhcmF0b3IoKXsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgeworICAgICAgICAgICAgICAgIGlmICghKG8xIGluc3RhbmNlb2YgQnVuZGxlSXRlbSkgfHwgIShvMiBpbnN0YW5jZW9mIEJ1bmRsZUl0ZW0pKQorICAgICAgICAgICAgICAgIAlyZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGkxID0gKEJ1bmRsZUl0ZW0pbzE7CisgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpMiA9IChCdW5kbGVJdGVtKW8yOworICAgICAgICAgICAgICAgIHJldHVybiBpMS5nZXRLZXkoKS5jb21wYXJlVG8oaTIuZ2V0S2V5KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUd28gYnVuZGxlIGdyb3VwcyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZmYgdGhlaXIgbmFtZXMgYXJlIHRoZSBzYW1lLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICByZXR1cm4gKG8gaW5zdGFuY2VvZiBCdW5kbGVHcm91cCAmJiAoKEJ1bmRsZUdyb3VwKW8pLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpOworICAgIH0KKwkKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGFueXdoZXJlIGl0IGlzIHVzZWQKKwkKKyAgICBwdWJsaWMgVmVjdG9yIGdldEl0ZW1zQXNWZWN0b3IoKSB7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICBJdGVyYXRvciBpdGVyID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICB2LmFkZEVsZW1lbnQoaXRlci5uZXh0KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2OworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgQnVuZGxlSXRlbSB0byB0aGUgZ3JvdXAgYXMgbG9uZyBhcyB0aGF0IGl0ZW0gaXMgbm90IGN1cnJlbnRseSBpbiB0aGUgZ3JvdXAuCisgICAgICogSWYgdGhlIGl0ZW0uZ3JvdXAgaXMgbm90IGVxdWFsIHRvIHRoaXMgZ3JvdXAsIHRoZW4gaXQgaXMgY2hhbmdlZCB0byBiZSB0aGlzIGdyb3VwLgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCwgaW4gbW9zdCBjYXNlcywgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgQnVuZGxlIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEJ1bmRsZUl0ZW0oQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgCWlmIChpdGVtcy5jb250YWlucyhpdGVtKSkgeworICAgIAkJaXRlbXMucmVtb3ZlKGl0ZW0pOworICAgIAl9CisgICAgICAgIGl0ZW0uc2V0UGFyZW50R3JvdXAodGhpcyk7CisgICAgICAgIGl0ZW1zLmFkZChpdGVtKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFuIGl0ZW0gb2YgdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgZ3JvdXAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVCdW5kbGVJdGVtKFN0cmluZyBpdGVtTmFtZSkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0S2V5KCkuZXF1YWxzKGl0ZW1OYW1lKSkgeworICAgICAgICAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluIHRoZSBncm91cAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeworICAgICAgICByZXR1cm4gaXRlbXMuc2l6ZSgpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgQnVuZGxlSXRlbSBmcm9tIHRoZSBzZXQgb2YgaXRlbXMgYXQgYSBwYXJ0aWN1bGFyIGluZGV4IHBvaW50LgorICAgICAqIElmIHRoZSBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2V0LAorICAgICAqIG51bGwgaXMgcmV0dXJuZWQuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZUl0ZW0gZ2V0QnVuZGxlSXRlbShpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGl0ZW1zLnNpemUoKSkKKyAgICAgICAgCXJldHVybiBudWxsOworICAgICAgICBJdGVyYXRvciBpdGVyID0gaXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaW5kZXg7IGkrKykKKyAgICAgICAgCWl0ZXIubmV4dCgpOworICAgICAgICByZXR1cm4gKEJ1bmRsZUl0ZW0paXRlci5uZXh0KCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGJ1bmRsZSB0byB3aGljaCB0aGlzIGdyb3VwIGJlbG9uZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlIGdldFBhcmVudEJ1bmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIGJ1bmRsZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY29tbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBidW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldENvbW1lbnQoKSB7CisgICAgICAgIHJldHVybiBjb21tZW50OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBidW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRQYXJlbnRCdW5kbGUoQnVuZGxlIGJ1bmRsZSkgeworICAgICAgICB0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKKyAgICB9CisJCisgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudChTdHJpbmcgY29tbWVudCkgeworICAgICAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OworICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFRoZSB0cmFuc2xhdGlvbiB0byBhIHN0cmluZyByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBvdXRwdXQgZm9yIGEgZ3JvdXAgaGVhZGluZy4KKyAgICAgKiBUaGlzIHdpbGwgYmUgZm91bmQgaW4gY29tbWVudCBsaW5lcyBhYm92ZSB0aGUgZ3JvdXAgaXRlbXMKKyAgICAgKi8KKwlwdWJsaWMgU3RyaW5nIHRvT3V0cHV0U3RyaW5nKCkgeworICAgICAgICBTdHJpbmcgcmV0U3RyID0gIlxuI1xuIyBAZ3JvdXAgIiArIG5hbWUgKyAiXG4jXG4iOworICAgICAgICBpZiAoY29tbWVudCAhPSBudWxsKQorICAgICAgICAJcmV0U3RyICs9ICIjIEBncm91cENvbW1lbnQgIiArIGNvbW1lbnQgKyAiXG4iOworICAgICAgICByZXR1cm4gcmV0U3RyOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhlIG91dHB1dCBjb250ZW50cyB0byBhIHBhcnRpY3VsYXIgUHJpbnRTdHJlYW0uCisgICAgICogVGhlIG91dHB1dCB3aWxsIGJlIHN1aXRhYmxlIGZvciBhIHByb3Blcmx5IGZvcm1hdHRlZCAucHJvcGVydGllcyBmaWxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoUHJpbnRTdHJlYW0gcHMpIHsKKyAgICAgICAgaWYgKCFuYW1lLmVxdWFscygiVW5ncm91cGVkIEl0ZW1zIikpCisgICAgICAgIAlwcy5wcmludGxuKHRoaXMudG9PdXRwdXRTdHJpbmcoKSk7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICgoQnVuZGxlSXRlbSkgaXRlci5uZXh0KCkpLndyaXRlQ29udGVudHMocHMpOwkKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhlIG91dHB1dCBjb250ZW50cyB0byBhIHBhcnRpY3VsYXIgV3JpdGVyLgorICAgICAqIFRoZSBvdXRwdXQgd2lsbCBiZSBzdWl0YWJsZSBmb3IgYSBwcm9wZXJseSBmb3JtYXR0ZWQgLnByb3BlcnRpZXMgZmlsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB3cml0ZUNvbnRlbnRzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKCJVbmdyb3VwZWQgSXRlbXMiKSkKKyAgICAgICAgCXcud3JpdGUodGhpcy50b091dHB1dFN0cmluZygpICsgIlxuIik7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICgoQnVuZGxlSXRlbSkgaXRlci5uZXh0KCkpLndyaXRlQ29udGVudHModyk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUl0ZW0uamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9CdW5kbGVJdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMDM2MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9CdW5kbGVJdGVtLmphdmEKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIGNsYXNzIHJlcHJlc2VudGluZyBhIHNpbmdsZSB0cmFuc2xhdGlvbiBpdGVtIGFuZCBhbGwgb2YgdGhlIG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhhdCB0cmFuc2xhdGlvbgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24gLSBFbWFpbDogPGEgaHJlZj0ibWFpbHRvOmpqYXJlZEBhbG1hZGVuLmlibS5jb20iPmpqYXJlZEBhbG1hZGVuLmlibS5jb208L2E+CisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgQnVuZGxlSXRlbSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBOTFMgaXRlbSBrZXkKKyAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBrZXkgaXRlbQorICAgIHByaXZhdGUgU3RyaW5nIGNvbW1lbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGNvbW1lbnQgYWJvdXQgdGhpcyBpdGVtCisgICAgcHJpdmF0ZSBib29sZWFuIHRyYW5zbGF0ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhcyB0aGlzIGl0ZW0gYmVlbiB0cmFuc2xhdGVkPworICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGF0ZSBvZiBjcmVhdGlvbiBvZiB0aGUgaXRlbQorICAgIHByaXZhdGUgRGF0ZSBtb2RpZmllZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaXRlbQorICAgIHByaXZhdGUgU3RyaW5nIGNyZWF0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHdobyBjcmVhdGVkIHRoZSBpdGVtCisgICAgcHJpdmF0ZSBTdHJpbmcgbW9kaWZpZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gd2hvIGxhc3QgbW9kaWZpZWQgdGhlIGl0ZW0KKyAgICBwcml2YXRlIEhhc2h0YWJsZSBsb29rdXBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBoYXN0YWJsZSBvZiBsb29rdXBzIGZvciB0aGUgaXRlbSAoaS5lLiAoeyN9LCBNZWFuaW5nKSBwYWlycykKKyAgICBwcml2YXRlIEJ1bmRsZUdyb3VwIGdyb3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBhcmVudCBncm91cCBvZiB0aGUgaXRlbQorCQkKKyAgICAvKioKKyAgICAgKiBCYXNpYyBkYXRhIGNvbnN0cnVjdG9yIGZvciBhIHJlc291cmNlIGJ1bmRsZSBpdGVtLgorICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIEJ1bmRsZUdyb3VwIHRvIHdoaWNoIHRoZSBpdGVtIGJlbG9uZ3MuIFRoaXMgZ3JvdXAgd2lsbCBoYXZlIGl0cyBvd24gQnVuZGxlIHBhcmVudC4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgTkxTIGxvb2t1cCBrZXkgY29tbW9uIGFjcm9zcyBhbGwgYnVuZGxlIGZpbGVzIGluIHRoZSByZXNvdXJjZSBidW5kbGUKKyAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgdGhlIGl0ZW0gYXBwcm9wcmlhdGUgZm9yIHRoZSBlbmNvZGluZyBvZiB0aGUgYnVuZGxlIGZpbGUgdG8gd2hpY2ggdGhlIGl0ZW0gYmVsb25ncworICAgICAqLworICAgICAKKyAgICBwdWJsaWMgQnVuZGxlSXRlbShCdW5kbGVHcm91cCBwYXJlbnQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB0aGlzLmdyb3VwID0gcGFyZW50OworICAgICAgICBjb21tZW50ID0gbnVsbDsKKyAgICAgICAgdHJhbnNsYXRlZCA9IGZhbHNlOworICAgICAgICBjcmVhdGVkID0gbmV3IERhdGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGN1cnJlbnQgZGF0ZQorICAgICAgICBtb2RpZmllZCA9IG5ldyBEYXRlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGN1cnJlbnQgZGF0ZQorICAgICAgICBjcmVhdG9yID0gbnVsbDsKKyAgICAgICAgbW9kaWZpZXIgPSBudWxsOworICAgICAgICBsb29rdXBzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIEJ1bmRsZUdyb3VwIHRvIHdoaWNoIHRoaXMgaXRlbSBiZWxvbmdzCisgICAgICovCisJCisgICAgcHVibGljIEJ1bmRsZUdyb3VwIGdldFBhcmVudEdyb3VwKCkgeworICAgICAgICByZXR1cm4gZ3JvdXA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGF0ZSB0aGlzIGl0ZW0gd2FzIGxhc3QgbW9kaWZpZWQuCisgICAgICovCisJCisgICAgcHVibGljIERhdGUgZ2V0TW9kaWZpZWREYXRlKCkgeworICAgICAgICByZXR1cm4gbW9kaWZpZWQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGUgdGhlIGl0ZW0gd2FzIGZpcnN0IGNyZWF0ZWQuCisgICAgICovCisJCisgICAgcHVibGljIERhdGUgZ2V0Q3JlYXRlZERhdGUoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVkOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSB1c2VyIHRoYXQgY3JlYXRlZCB0aGUgaXRlbS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldENyZWF0b3IoKSB7CisgICAgICAgIHJldHVybiBjcmVhdG9yOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSB1c2VyIHRoYXQgbGFzdCBtb2RpZmllZCB0aGUgaXRlbS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1vZGlmaWVyKCkgeworICAgICAgICByZXR1cm4gbW9kaWZpZXI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIE5MUyBsb29rdXAga2V5IGZvciB0aGUgaXRlbS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldEtleSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBpdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNsYXRpb24oKSB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEhhcyB0aGUgaXRlbSB5ZXQgYmVlbiB0cmFuc2xhdGVkLCBvciB3YXMgaXQgbWVyZWx5IGRlcml2ZWQgZnJvbSBhIHByZXZpb3VzCisgICAgICogYnVuZGxlIGZpbGU/CisgICAgICovCisJCisgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2xhdGVkKCkgeworICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGhhc2h0YWJsZSBvZiB0aGUgdmFyaW91cyBsb29rdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXRlbS4gTG9va3VwcyBhcmUKKyAgICAgKiBjb250ZXh0IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBzdG9yZWQgd2l0aGluIHRoZSByZXNvdXJjZSBpdGVtIGFuZCBoYXZlIHRoZWlyIG93bgorICAgICAqIG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlbXNlbHZlcy4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgSGFzaHRhYmxlIGdldExvb2t1cHMoKSB7CisgICAgICAgIHJldHVybiBsb29rdXBzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgdGhlIGl0ZW0uIEEgdHJ1ZSBtYXJrIGluZGljYXRlcyB0aGF0IHRoZSBpdGVtIGhhcworICAgICAqIGJlZW4gZXhhbWluZWQgb3IgbW9kaWZpZWQgYW5kIGlzIHJlYWR5IGZvciB1c2UgaW4gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBieSB0aGUKKyAgICAgKiBwYXJlbnQgQnVuZGxlLgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0ZWQoYm9vbGVhbiBpc1RyYW5zbGF0ZWQpIHsKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWQgPT0gaXNUcmFuc2xhdGVkKSByZXR1cm47CisgICAgICAgIHRyYW5zbGF0ZWQgPSBpc1RyYW5zbGF0ZWQ7CisgICAgICAgIGlmICh0aGlzLmdldFBhcmVudEdyb3VwKCkgIT0gbnVsbCAmJiB0aGlzLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IHRoaXMuZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKTsKKyAgICAgICAgICAgIGlmIChpc1RyYW5zbGF0ZWQpIGJ1bmRsZS5yZW1vdmVVbnRyYW5zbGF0ZWRJdGVtKHRoaXMubmFtZSk7CisgICAgICAgICAgICBlbHNlIGJ1bmRsZS5hZGRVbnRyYW5zbGF0ZWRJdGVtKHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KFN0cmluZyBjb21tZW50KSB7CisgICAgICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdpdmVuIGEgaGFzaHRhYmxlIG9mIGxvb2t1cHMsIGFzc29jaWF0ZXMgdGhvc2UgbG9va3VwcyB3aXRoIHRoaXMgaXRlbS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXRMb29rdXBzKEhhc2h0YWJsZSBsb29rdXBzKSB7CisgICAgICAgIHRoaXMubG9va3VwcyA9IGxvb2t1cHM7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIE5MUyBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4gQmUgY2FyZWZ1bCB1c2luZyB0aGlzIG1ldGhvZCwgYXMKKyAgICAgKiBpdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGxvb2t1cCB2YWx1ZSBvZiBhbnkgb3RoZXIgaXRlbXMgaW4gdGhlIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKiBUaGlzIG11c3QgYmUgZG9uZSBhdCBhIGhpZ2hlciBsZXZlbC4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleU5hbWUpIHsKKyAgICAgICAgbmFtZSA9IGtleU5hbWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIHRyYW5zbGF0aW9uIHZhbHVlIG9mIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uKFN0cmluZyB0cmFuc2xhdGlvblZhbHVlKSB7CisgICAgICAgIHZhbHVlID0gdHJhbnNsYXRpb25WYWx1ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcGFyZW50IEJ1bmRsZUdyb3VwIG9mIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudEdyb3VwKEJ1bmRsZUdyb3VwIGdyb3VwKSB7CisgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQXNzb2NpYXRlcyBhIGxvZ2luIG5hbWUgb2YgdGhlIGNyZWF0b3Igb2YgdGhlIGl0ZW0gd2l0aCB0aGUgaXRlbS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXRDcmVhdG9yKFN0cmluZyBuYW1lKSB7CisgICAgICAgIGNyZWF0b3IgPSBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFzc29jaWF0ZXMgYSBsb2dpbiBuYW1lIG9mIHRoZSBsYXN0IG1vZGlmaWVyIG9mIHRoZSBpdGVtIHdpdGggdGhlIGl0ZW0uCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgc2V0TW9kaWZpZXIoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgbW9kaWZpZXIgPSBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGNyZWF0ZWQgZGF0ZSBvZiB0aGUgaXRlbSBnaXZlbiBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZy4KKyAgICAgKiBUaGUgZm9ybWF0IGNhbiBiZSBlaXRoZXIgJ1lZWVktTU0tREQnIChlLmcuIDIwMDAyLTAyLTA1KSBvcgorICAgICAqIHRoZSBmb3JtYXQgY2FuIGJlICdZWVlNTUREVEhITU1TU1onIChlLmcuIDIwMDIwMjA1VDEwMzAwMFopCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlZERhdGUoU3RyaW5nIGRhdGVTdHIpIHsKKyAgICAgICAgaWYgKGRhdGVTdHIgIT0gbnVsbCkgY3JlYXRlZCA9IHBhcnNlRGF0ZUZyb21TdHJpbmcoZGF0ZVN0cik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGNyZWF0ZWQgZGF0ZSBvZiB0aGUgaXRlbS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRDcmVhdGVkRGF0ZShEYXRlIGRhdGUpIHsKKyAgICAgICAgY3JlYXRlZCA9IGRhdGU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGxhc3QgbW9kaWZpZmNhdGlvbiBkYXRlIG9mIHRoZSBpdGVtIGdpdmVuIGEgZGF0ZSBmb3JtYXR0ZWQgc3RyaW5nLgorICAgICAqIFRoZSBmb3JtYXQgY2FuIGJlIGVpdGhlciAnWVlZWS1NTS1ERCcgKGUuZy4gMjAwMi0wMi0wNSkgb3IKKyAgICAgKiB0aGUgZm9ybWF0IGNhbiBiZSAnWVlZTU1ERFRISE1NU1NaJyAoZS5nLiAyMDAyMDIwNVQxMDMwMDBaKQorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldE1vZGlmaWVkRGF0ZShTdHJpbmcgZGF0ZVN0cikgeworICAgICAgICBpZiAoZGF0ZVN0ciAhPSBudWxsKQorICAgICAgICAJbW9kaWZpZWQgPSBwYXJzZURhdGVGcm9tU3RyaW5nKGRhdGVTdHIpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldE1vZGlmaWVkRGF0ZShEYXRlIGRhdGUpIHsKKyAgICAgICAgbW9kaWZpZWQgPSBkYXRlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTaW1wbHkgcmV0dXJucyB0aGUgbG9va3VwIG5hbWUgb2YgdGhlIGl0ZW0uCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBvdXRwdXQgb2YgdGhpcyBidW5kbGUgaXRlbSBhcyBpdCB3b3VsZCBiZSBpbmNsdWRlZCBpbiBhIC5wcm9wZXJ0aWVzCisgICAgICogZm9ybWF0dGVkIHJlc291cmNlIGJ1bmRsZSBmaWxlLiBUaGlzIGZvcm1hdCBhbHNvIGNvbnRhaW5zIHRoZSBtZXRhLWRhdGEgdXNlZCBieSBSQk1hbmFnZXIgaW4KKyAgICAgKiB0aGUgZm9ybSBvZiBwYXJzZWFibGUgY29tbWVudHMuCisgICAgICovCisKKyAgICBwdWJsaWMgU3RyaW5nIHRvT3V0cHV0U3RyaW5nKCkgeworICAgICAgICBTdHJpbmcgcmV0U3RyID0gKHRyYW5zbGF0ZWQgPyAiIyBAdHJhbnNsYXRlZCB0cnVlIiA6ICIjIEB0cmFuc2xhdGVkIGZhbHNlIik7CisgICAgICAgIGlmIChjcmVhdGVkICE9IG51bGwpIHsKKyAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNyZWF0ZWRDYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgICAgIGNyZWF0ZWRDYWwuc2V0VGltZShjcmVhdGVkKTsKKyAgICAgICAgICAgIGludCB5ZWFyID0gY3JlYXRlZENhbC5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpbnQgbW9udGggPSBjcmVhdGVkQ2FsLmdldChDYWxlbmRhci5NT05USCkrMTsKKyAgICAgICAgICAgIGludCBkYXkgPSBjcmVhdGVkQ2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgcmV0U3RyICs9ICIgQGNyZWF0ZWQgIiArIFN0cmluZy52YWx1ZU9mKHllYXIpICsgIi0iCisgICAgICAgICAgICAgICAgKyAobW9udGggPiA5ID8gU3RyaW5nLnZhbHVlT2YobW9udGgpIDogIjAiICsgU3RyaW5nLnZhbHVlT2YobW9udGgpKSArICItIgorICAgICAgICAgICAgICAgICsgKGRheSA+IDkgPyBTdHJpbmcudmFsdWVPZihkYXkpIDogIjAiICsgU3RyaW5nLnZhbHVlT2YoZGF5KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGlmaWVkICE9IG51bGwpIHsKKyAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIG1vZGlmaWVkQ2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgICAgICBtb2RpZmllZENhbC5zZXRUaW1lKG1vZGlmaWVkKTsKKyAgICAgICAgICAgIGludCB5ZWFyID0gbW9kaWZpZWRDYWwuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICAgICAgaW50IG1vbnRoID0gbW9kaWZpZWRDYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSsxOworICAgICAgICAgICAgaW50IGRheSA9IG1vZGlmaWVkQ2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICAgICAgcmV0U3RyICs9ICIgQG1vZGlmaWVkICIgKyBTdHJpbmcudmFsdWVPZih5ZWFyKSArICItIgorICAgICAgICAgICAgICAgICsgKG1vbnRoID4gOSA/IFN0cmluZy52YWx1ZU9mKG1vbnRoKSA6ICIwIiArIFN0cmluZy52YWx1ZU9mKG1vbnRoKSkgKyAiLSIKKyAgICAgICAgICAgICAgICArIChkYXkgPiA5ID8gU3RyaW5nLnZhbHVlT2YoZGF5KSA6ICIwIiArIFN0cmluZy52YWx1ZU9mKGRheSkpOworICAgICAgICB9CisgICAgICAgIGlmIChjcmVhdG9yICE9IG51bGwpIHJldFN0ciArPSAiIEBjcmVhdG9yICIgKyBjcmVhdG9yOworICAgICAgICBpZiAobW9kaWZpZXIgIT0gbnVsbCkgcmV0U3RyICs9ICIgQG1vZGlmaWVyICIgKyBtb2RpZmllcjsKKyAgICAgICAgRW51bWVyYXRpb24gZWxlbXMgPSBsb29rdXBzLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGVsZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gKFN0cmluZyllbGVtcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgcmV0U3RyICs9ICJcbiMgQHsiICsgc3RyICsgIn0gIiArIChTdHJpbmcpbG9va3Vwcy5nZXQoc3RyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29tbWVudCAhPSBudWxsKSByZXRTdHIgKz0gIlxuIyBAY29tbWVudCAiICsgY29tbWVudDsKKwkJCisgICAgICAgIHJldFN0ciArPSAiXG4iICsgbmFtZSArICI9IiArIHNhdmVDb252ZXJ0KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogV3JpdGVzIHRoZSBmb3JtYXR0ZWQgY29udGVudHMgdG8gYSBQcmludFN0cmVhbS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUNvbnRlbnRzKFByaW50U3RyZWFtIHBzKSB7CisgICAgICAgIHBzLnByaW50bG4odGhpcy50b091dHB1dFN0cmluZygpKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogV3JpdGVzIHRoZSBmb3JtYXR0ZWQgY29udGVudHMgdG8gYSB3cml0ZXIgc3VjaCBhcyBhIEZpbGVXcml0ZXIuCisgICAgICovCisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUNvbnRlbnRzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB3LndyaXRlKHRoaXMudG9PdXRwdXRTdHJpbmcoKSArICJcbiIpOworICAgIH0KKwkJCisgICAgLyoKKyAgICAgKiBDb252ZXJ0cyB1bmljb2RlcyB0byBlbmNvZGVkIFxcdXh4eHgKKyAgICAgKiBhbmQgd3JpdGVzIG91dCBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgaW4gc3BlY2lhbFNhdmVDaGFycworICAgICAqIHdpdGggYSBwcmVjZWRpbmcgc2xhc2gKKyAgICAgKi8KKyAgICAvLyBUYWtlbiBmcm9tIGphdmEudXRpbC5Qcm9wZXJ0aWVzCisgICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZUNvbnZlcnQoU3RyaW5nIHRoZVN0cmluZykgeworICAgICAgICBjaGFyIGFDaGFyOworICAgICAgICBpbnQgbGVuID0gdGhlU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihsZW4qMik7CisKKyAgICAgICAgZm9yKGludCB4PTA7IHg8bGVuOyApIHsKKyAgICAgICAgICAgIGFDaGFyID0gdGhlU3RyaW5nLmNoYXJBdCh4KyspOworICAgICAgICAgICAgc3dpdGNoKGFDaGFyKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnXFwnOm91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7IG91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJ1x0JzpvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOyBvdXRCdWZmZXIuYXBwZW5kKCd0Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzpvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOyBvdXRCdWZmZXIuYXBwZW5kKCduJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzpvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOyBvdXRCdWZmZXIuYXBwZW5kKCdyJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJ1xmJzpvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOyBvdXRCdWZmZXIuYXBwZW5kKCdmJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmICgoYUNoYXIgPCAyMCkgfHwgKGFDaGFyID4gMTI3KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci5hcHBlbmQoJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDEyKSAmIDB4RikpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gOCkgJiAweEYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDQpICYgMHhGKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiAwKSAmIDB4RikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNpYWxTYXZlQ2hhcnMuaW5kZXhPZihhQ2hhcikgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci5hcHBlbmQoYUNoYXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dEJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgbmliYmxlIHRvIGEgaGV4IGNoYXJhY3RlcgorICAgICAqIEBwYXJhbQluaWJibGUJdGhlIG5pYmJsZSB0byBjb252ZXJ0LgorICAgICAqLworCS8vIFRha2VuIGZyb20gamF2YS51dGlsLlByb3BlcnRpZXMKKyAgICBwcml2YXRlIHN0YXRpYyBjaGFyIHRvSGV4KGludCBuaWJibGUpIHsKKyAgICAgICAgcmV0dXJuIGhleERpZ2l0WyhuaWJibGUgJiAweEYpXTsKKyAgICB9CisJCisgICAgLyoqIEEgdGFibGUgb2YgaGV4IGRpZ2l0cyAqLworICAgIC8vIFRha2VuIGZyb20gamF2YS51dGlsLlByb3BlcnRpZXMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7CisJJzAnLCcxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0YnCisgICAgfTsKKwkKKyAgICAvLyBUYWtlbiBmcm9tIGphdmEudXRpbC5Qcm9wZXJ0aWVzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNwZWNpYWxTYXZlQ2hhcnMgPSAiPTogXHRcclxuXGYjISI7CisJCisgICAgcHJpdmF0ZSBEYXRlIHBhcnNlRGF0ZUZyb21TdHJpbmcoU3RyaW5nIGRhdGVTdHIpIHsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXQgPSBudWxsOworICAgICAgICBpZiAoZGF0ZVN0ci5sZW5ndGgoKSA9PSAxMCkKKyAgICAgICAgCWZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIik7IC8vIFNpbXBsZSBmb3JtYXQKKyAgICAgICAgZWxzZQorICAgICAgICAJZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXlNTWRkJ1QnSEhtbXNzJ1onIik7ICAgICAgICAgICAgICAvLyBUTVggSVNPIGZvcm1hdAorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZShkYXRlU3RyKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gcGUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9PY2N1cmFuY2UuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9PY2N1cmFuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJjYmRhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL09jY3VyYW5jZS5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworLyoqCisgKiBUaGlzIGlzIGEgY2xhc3MgdXNlZCBieSB0aGUgUkJSZXBvcnRlciB0byB0cmFjayBvY2N1cmFuY2VzIG9mIGEgcmVzb3VyY2UKKyAqIGtleSBmb3VuZCB3aGlsZSBzY2FubmluZyBhIHRleHQgY29kZSBmaWxlLiBJdCBpcyB1c2VkIG1haW5seSB0byBwcm9kdWNlIGVycm9yCisgKiBtZXNzYWdlcyB3aXRoIGhlbHBmdWwgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIKKyAqLworcHVibGljIGNsYXNzIE9jY3VyYW5jZSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmlsZV9uYW1lOworICAgIHByaXZhdGUgU3RyaW5nIGZpbGVfcGF0aDsKKyAgICBwcml2YXRlIGludCBsaW5lX251bWJlcjsKKyAgICAKKyAgICAvKioKKyAgICAgKiBCYXNpYyBkYXRhIGNvbnN0cnVjdG9yLgorICAgICAqLworICAgIAorICAgIE9jY3VyYW5jZSAoU3RyaW5nIGZpbGVfbmFtZSwgU3RyaW5nIGZpbGVfcGF0aCwgaW50IGxpbmVfbnVtYmVyKSB7CisgICAgICAgIHRoaXMuZmlsZV9uYW1lID0gZmlsZV9uYW1lOworICAgICAgICB0aGlzLmZpbGVfcGF0aCA9IGZpbGVfcGF0aDsKKyAgICAgICAgdGhpcy5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGZpbGUgbmFtZSBvZiB0aGUgb2NjdXJhbmNlCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRGaWxlTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGZpbGVfbmFtZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmaWxlIHBhdGggb2YgdGhlIG9jY3VyYW5jZQorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZVBhdGgoKSB7CisgICAgICAgIHJldHVybiBmaWxlX3BhdGg7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvY2N1cmFuY2UuCisgICAgICovCisgICAgCisgICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgeworICAgICAgICByZXR1cm4gbGluZV9udW1iZXI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jY3VyYW5jZSBvZiB0aGUgZm9ybSAnT2NjdXJhbmNlOiBfZmlsZV9wYXRoXyAoX2xpbmVfbnVtYmVyXyknCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuICJPY2N1cmFuY2U6ICIgKyBmaWxlX3BhdGggKyAiICgiICsgbGluZV9udW1iZXIgKyAiKSI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9QcmVmZXJlbmNlcy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1ByZWZlcmVuY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5NGI4YQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9QcmVmZXJlbmNlcy5qYXZhCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBtZXRob2RzIHVzZWQgYnkgUkJNYW5hZ2VyIHRvIGFjY2Vzcywgc2V0LCBhbmQgc3RvcmUKKyAqIGluZGl2aWR1YWwgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBBbGwgb2YgdGhlIHB1YmxpYyBtZXRob2RzIGRlZmluZWQKKyAqIGluIHRoaXMgY2xhc3MgYXJlIHN0YXRpYywgYW5kIHNvIHRoZSBjbGFzcyBuZWVkIG5vdCBiZSBpbnN0YW50aWF0ZWQuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VzIHsKKyAgICAvLyBEZWZhdWx0IHZhbHVlcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1fUkVDRU5UX0ZJTEVTID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgUHJvcGVydGllcyBwcm9wOworCQorICAgIC8qKgorICAgICAqIFJldHJpZXZlIGEgcHJlZmVyZW5jZSBieSBpdHMga2V5IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCBvbmUgcHJlZmVyZW5jZQorICAgICAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBwcmVmZXJlbmNlIHNvdWdodAorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFByZWZlcmVuY2UoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkgaW5pdCgpOworICAgICAgICBPYmplY3QgbyA9IHByb3AuZ2V0KG5hbWUpOworICAgICAgICBpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFN0cmluZykpIHJldHVybiBFTVBUWV9TVFJJTkc7CisgICAgICAgIHJldHVybiAoU3RyaW5nKW87CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFNldHMgYSBwcmVmZXJlbmNlIGJ5IGtleSBuYW1lIGFuZCB2YWx1ZS4gSWYgdGhlIGtleSBuYW1lIGFsbCByZWFkeSBleGlzdHMsIHRoYXQKKyAgICAgKiBwcmVmZXJlbmNlIGlzIG92ZXJ3cml0dGVuIHdpdGhvdXQgd2FybmluZy4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJlZmVyZW5jZQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHByZWZlcmVuY2UgdG8gYmUgc2V0IGFuZCBsYXRlciByZXRyaWV2ZWQuIElmIHRoaXMgdmFsdWUgaXMgbnVsbCwgdGhlIHByb3BlcnR5IG9mIHRoaXMgbmFtZSBpcyBlcmFzZWQuCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFByZWZlcmVuY2UoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBpZiAocHJvcCA9PSBudWxsKSBpbml0KCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgcmVtb3ZlIHRoZSBwcm9wZXJ0eQorICAgICAgICAgICAgcHJvcC5yZW1vdmUobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvcC5wdXQobmFtZSwgdmFsdWUpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIGJ1ZmZlcmVkIHByZWZlcmVuY2VzIHRvIGZpbGUuIFRoZXJlIGlzIG5vIG9wdGlvbiBmb3IKKyAgICAgKiB3aGVyZSB0aGlzIGZpbGUgaXMgc2F2ZWQgb24gdGhlIGZpbGUgc3lzdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAocHJvcCA9PSBudWxsKSBpbml0KCk7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oInByZWZlcmVuY2VzLnByb3BlcnRpZXMiKTsKKyAgICAgICAgcHJvcC5zdG9yZShmb3MsICJSQk1hbmFnZXIgUHJlZmVyZW5jZXMiKTsKKyAgICAgICAgZm9zLmZsdXNoKCk7CisgICAgICAgIGZvcy5jbG9zZSgpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBHaXZlbiB0aGUgbmFtZSBvZiBhIHJlc291cmNlIGJ1bmRsZSBhbmQgdGhlIGZpbGUgcGF0aCBsb2NhdGlvbiBvZiB0aGUgYmFzZQorICAgICAqIGRvY3VtZW50IGZvciB0aGF0IHJlc291cmNlIGJ1bmRsZSwgdGhpcyBtZXRob2Qgd2lsbCBpbnNlcnQgdGhhdCBmaWxlIGludG8KKyAgICAgKiBhIGxpc3Qgb2YgcmVjZW50IGZpbGVzLiBDdXJyZW50bHkgdGhlIHBhc3QgNCByZXNvdXJjZSBidW5kbGVzIHZpc2l0ZWQgd2lsbAorICAgICAqIGJlIGRpc3BsYXllZC4gVGhpcyBtZXRob2QgYWxzbyBzb3J0cyB0aGUgcHJlZmVuY2VzIHNvIHRoYXQgdGhlIG1vc3QgcmVjZW50bHkKKyAgICAgKiBhZGRlZCB3aWxsIGJlIHRoZSBmaXJzdCByZXR1cm5lZCwgZXZlbiBpZiB0aGF0IGZpbGUgaGFkIGFsbCByZWFkeSBleGlzdGVkCisgICAgICogaW4gdGhlIHByZWZlcmVuY2VzIHdoZW4gaXQgd2FzIGFkZGVkLgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoaXMgZmlsZSBhcyBpdCB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlcgorICAgICAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgZmlsZSBwYXRoIHRvIHRoaXMgZmlsZSAoc2hvdWxkIGJlIGFic29sdXRlKS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkUmVjZW50RmlsZVByZWZlcmVuY2UoU3RyaW5nIG5hbWUsIFN0cmluZyBsb2NhdGlvbikgeworICAgICAgICBWZWN0b3IgZXhpc3RpbmdOYW1lcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgVmVjdG9yIGV4aXN0aW5nTG9jYXRpb25zID0gbmV3IFZlY3RvcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBOVU1fUkVDRU5UX0ZJTEVTOyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZyBvbGROYW1lID0gZ2V0UHJlZmVyZW5jZSgicmVjZW50ZmlsZWlkIiArIFN0cmluZy52YWx1ZU9mKGkpKTsKKyAgICAgICAgICAgIFN0cmluZyBvbGRMb2NhdGlvbiA9IGdldFByZWZlcmVuY2UoInJlY2VudGZpbGVsb2MiICsgU3RyaW5nLnZhbHVlT2YoaSkpOworICAgICAgICAgICAgaWYgKG9sZE5hbWUuZXF1YWxzKEVNUFRZX1NUUklORykgfHwgb2xkTG9jYXRpb24uZXF1YWxzKEVNUFRZX1NUUklORykpIGJyZWFrOworICAgICAgICAgICAgZXhpc3RpbmdOYW1lcy5hZGRFbGVtZW50KG9sZE5hbWUpOworICAgICAgICAgICAgZXhpc3RpbmdMb2NhdGlvbnMuYWRkRWxlbWVudChvbGRMb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGFsbCByZWFkeSBpbiB0aGVyZQorICAgICAgICBpbnQgc3dhcF9zdGFydCA9IDA7CisgICAgICAgIGludCBvbGRfc2l6ZSA9IGV4aXN0aW5nTG9jYXRpb25zLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDw9IG9sZF9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID09IGV4aXN0aW5nTG9jYXRpb25zLnNpemUoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoIHdhcyBmb3VuZCwgcHVsbCBhbGwgdGhlIGVsZW1lbnRzIGRvd24gb25lCisgICAgICAgICAgICAgICAgc3dhcF9zdGFydCA9IGk7CisgICAgICAgICAgICAgICAgaWYgKHN3YXBfc3RhcnQgPj0gTlVNX1JFQ0VOVF9GSUxFUykgc3dhcF9zdGFydCA9IE5VTV9SRUNFTlRfRklMRVMtMTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBsZW5ndGggb2YgdGhlIHZlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdOYW1lcy5hZGRFbGVtZW50KEVNUFRZX1NUUklORyk7CisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nTG9jYXRpb25zLmFkZEVsZW1lbnQoRU1QVFlfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRMb2NhdGlvbiA9IChTdHJpbmcpZXhpc3RpbmdMb2NhdGlvbnMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgIGlmIChvbGRMb2NhdGlvbi5lcXVhbHMobG9jYXRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbWF0Y2gsIHB1bGwgdGhpcyBvbmUgdG8gdGhlIGZyb250CisgICAgICAgICAgICAgICAgICAgIHN3YXBfc3RhcnQgPSBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkJCisgICAgICAgIC8vIE1vdmUgdGhlIGZpbGVzIGRvd24gdGhlIGxpbmUgYXMgYXBwcm9wcmlhdGUKKyAgICAgICAgZm9yIChpbnQgaT1zd2FwX3N0YXJ0OyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBleGlzdGluZ0xvY2F0aW9ucy5zZXRFbGVtZW50QXQoZXhpc3RpbmdMb2NhdGlvbnMuZWxlbWVudEF0KGktMSksaSk7CisgICAgICAgICAgICBleGlzdGluZ05hbWVzLnNldEVsZW1lbnRBdChleGlzdGluZ05hbWVzLmVsZW1lbnRBdChpLTEpLGkpOworICAgICAgICB9CisgICAgICAgIGV4aXN0aW5nTG9jYXRpb25zLnNldEVsZW1lbnRBdChsb2NhdGlvbiwgMCk7CisgICAgICAgIGV4aXN0aW5nTmFtZXMuc2V0RWxlbWVudEF0KG5hbWUsIDApOworCQkKKyAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0aWVzCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGV4aXN0aW5nTG9jYXRpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBzZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlaWQiICsgU3RyaW5nLnZhbHVlT2YoaSksIChTdHJpbmcpZXhpc3RpbmdOYW1lcy5lbGVtZW50QXQoaSkpOworICAgICAgICAgICAgc2V0UHJlZmVyZW5jZSgicmVjZW50ZmlsZWxvYyIgKyBTdHJpbmcudmFsdWVPZihpKSwgKFN0cmluZylleGlzdGluZ0xvY2F0aW9ucy5lbGVtZW50QXQoaSkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGk9ZXhpc3RpbmdMb2NhdGlvbnMuc2l6ZSgpOyBpIDwgTlVNX1JFQ0VOVF9GSUxFUzsgaSsrKSB7CisgICAgICAgICAgICBzZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlaWQiICsgU3RyaW5nLnZhbHVlT2YoaSksIEVNUFRZX1NUUklORyk7CisgICAgICAgICAgICBzZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlbG9jIiArIFN0cmluZy52YWx1ZU9mKGkpLCBFTVBUWV9TVFJJTkcpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzYXZlUHJlZmVyZW5jZXMoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7fSAvLyBJZ25vcmUsIGl0cyBub3QgY3JpdGljYWwKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCBsb2NhdGlvbnMgb2YgdGhlIHZhcmlvdXMgcmVjZW50bHkgdXNlZCBmaWxlcy4KKyAgICAgKiBAcmV0dXJuIEEgVmVjdG9yIG9mIFN0cmluZ3Mgd2hpY2ggaXMgdHdpY2UgaW4gbGVuZ3RoIHRoZSBudW1iZXIgb2YgZmlsZXMga25vd24gYWJvdXQuIFRoZSB2ZWN0b3IgY29udGFpbnMgbmFtZSAxIHRoZW4gbG9jYXRpb24gMSwgdGhlbiBuYW1lIDIgLi4uCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyBWZWN0b3IgZ2V0UmVjZW50RmlsZXNQcmVmZXJlbmNlcygpIHsKKyAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkgaW5pdCgpOworICAgICAgICBWZWN0b3IgZXhpc3RpbmcgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE5VTV9SRUNFTlRfRklMRVM7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlaWQiICsgU3RyaW5nLnZhbHVlT2YoaSkpOworICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gZ2V0UHJlZmVyZW5jZSgicmVjZW50ZmlsZWxvYyIgKyBTdHJpbmcudmFsdWVPZihpKSk7CisgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoRU1QVFlfU1RSSU5HKSB8fCBsb2NhdGlvbi5lcXVhbHMoRU1QVFlfU1RSSU5HKSkgYnJlYWs7CisgICAgICAgICAgICBleGlzdGluZy5hZGRFbGVtZW50KG5hbWUpOworICAgICAgICAgICAgZXhpc3RpbmcuYWRkRWxlbWVudChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgUHJvcGVydGllcyBkZWZhdWx0cyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIC8vIFRoaXMgdmFsdWVzIGFyZSBuZWVkZWQgYW5kIGFyZSBzcGVjaWZpZWQgYnkgZGVmYXVsdAorICAgICAgICAvLyBJZiB0aGV5IGV4aXN0IGluIHRoZSBmaWxlLCB0aGV5IHdpbGwgYmUgb3ZlcndyaXR0ZW4KKyAgICAgICAgZGVmYXVsdHMucHV0KCJ1c2VybmFtZSIsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidW5rbm93bl91c2VyIikpOworICAgICAgICBkZWZhdWx0cy5wdXQoImxvY2FsZSIsICJlbiIpOworICAgICAgICBkZWZhdWx0cy5wdXQoImxvb2thbmRmZWVsIiwgIiIpOworCQkKKyAgICAgICAgcHJvcCA9IG5ldyBQcm9wZXJ0aWVzKGRlZmF1bHRzKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJwcmVmZXJlbmNlcy5wcm9wZXJ0aWVzIik7CisgICAgICAgICAgICBwcm9wLmxvYWQoZmlzKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHJlYWRpbmcgcHJvcGVydGllcyIpOworICAgICAgICAgICAgaW9lLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2F2ZVByZWZlcmVuY2VzKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBzYXZpbmcgcHJlZmVyZW5jZXMgIiArIGlvZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCQorICAgIC8qCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworICAgICAgICAvLyBUZXN0CisgICAgICAgIGluaXQoKTsKKyAgICB9CisgICAgKi8KK30KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkV4cG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJFeHBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTU4MDQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCisvKioKKyAqIFRoaXMgaXMgdGhlIHN1cGVyIGNsYXNzIGZvciBhbGwgZXhwb3J0ZXIgcGx1Zy1pbiBjbGFzc2VzLiBBcyBvZiB5ZXQsIHRoZXJlCisgKiBpcyBsaXR0bGUgY29udGFpbmVkIGluIHRoaXMgY2xhc3MuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFJCRXhwb3J0ZXIgeworICAgIHByb3RlY3RlZCBzdGF0aWMgSkZpbGVDaG9vc2VyIGNob29zZXI7CisJCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZXhwb3J0KFJCTWFuYWdlciByYm0pIHRocm93cyBJT0V4Y2VwdGlvbjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJJQ1VFeHBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSUNVRXhwb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWJjMTFlCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSUNVRXhwb3J0ZXIuamF2YQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHBsdWctaW4gZXhwb3J0ZXIgdXRpbGl0eSBmb3IgUkJNYW5hZ2VyIHRoYXQgb3V0cHV0cyBJQ1UKKyAqIHJlc291cmNlIGJ1bmRsZSBmaWxlcyBpbiB0aGUgYWNjb3JkaW5nIHRvIHRoZSBmaWxlIHN0cnVjdHVyZSBvZiBSZXNvdXJjZQorICogQnVuZGxlcy4gTW9zdCBvZiB0aGUgbWV0YS1kYXRhIGlzIGxvc3QgaW4gdGhpcyBleHBvcnQuCisgKiAKKyAqIEBhdXRob3IgR2VvcmdlIFJob3RlbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJCSUNVRXhwb3J0ZXIgZXh0ZW5kcyBSQkV4cG9ydGVyIHsKKyAgICAvKiogRG8gY2hhcmFjdGVycyBiZXlvbmQgXFx1MDA3ZiBuZWVkIFxcdSBlc2NhcGUgbm90YXRpb24/ICovCisgICAgcHJpdmF0ZSBib29sZWFuIGVzY2FwZU5vbkFzY2lpID0gZmFsc2U7CisKKyAgICAvKiogV3JpdGUgdGhlIG1ldGEgZGF0YSBmb3IgZWFjaCByZXNvdXJjZT8gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gd3JpdGVNZXRhRGF0YSA9IHRydWU7CisJCisgICAgLyoqIFdyaXRlIHRoZSBncm91cHMgYXMga2V5cz8gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gd3JpdGVHcm91cHNBc0tleXMgPSBmYWxzZTsKKworICAgIHB1YmxpYyBSQklDVUV4cG9ydGVyKCkgeworICAgICAgICBzdXBlcigpOworCQkKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmlsZSBjaG9vc2VyIGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiAoY2hvb3NlciA9PSBudWxsKSB7CisgICAgICAgICAgICBjaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJyb290IElDVSBGaWxlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmLmdldE5hbWUoKS5zdGFydHNXaXRoKCJyb290LiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICB9CisJCisgICAgcHVibGljIHZvaWQgZXhwb3J0KFJCTWFuYWdlciByYm0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChyYm0gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICAvLyBPcGVuIHRoZSBTYXZlIERpYWxvZworICAgICAgICBpbnQgcmV0X3ZhbCA9IGNob29zZXIuc2hvd1NhdmVEaWFsb2cobnVsbCk7CisgICAgICAgIGlmIChyZXRfdmFsICE9IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFJldHJpZXZlIGJhc2ljIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgRmlsZSBmaWxlID0gY2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlsZShzKSB3ZSB3aWxsIGJlIHdvcmtpbmcgd2l0aAorICAgICAgICBGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGZpbGUuZ2V0UGFyZW50KCkpOyAgICAgICAgICAgIC8vIFRoZSBkaXJlY3Rvcnkgd2Ugd2lsbCBiZSB3cml0aW5nIHRvCisgICAgICAgIFN0cmluZyBiYXNlX25hbWUgPSBmaWxlLmdldE5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJhc2UgbmFtZSBvZiB0aGUgZmlsZXMgd2Ugd2lsbCB3cml0ZQorICAgICAgICBpZiAoYmFzZV9uYW1lID09IG51bGwgfHwgYmFzZV9uYW1lLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9IHJibS5nZXRCYXNlQ2xhc3MoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFzZV9uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpIHsKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9IGJhc2VfbmFtZS5zdWJzdHJpbmcoMCxiYXNlX25hbWUubGVuZ3RoKCktMTEpOworICAgICAgICB9CisJCQorICAgICAgICBWZWN0b3IgYnVuZGxlX3YgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVfdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlX3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGJhc2VfZW5jID0gYmFzZV9uYW1lOworICAgICAgICAgICAgaWYgKGJ1bmRsZS5lbmNvZGluZyAhPSBudWxsICYmICFidW5kbGUuZW5jb2RpbmcuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIGJhc2VfZW5jID0gYmFzZV9lbmMgKyAiXyIgKyBidW5kbGUuZW5jb2Rpbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgZmlsZV9uYW1lID0gYmFzZV9lbmMgKyAiLnR4dCI7CisgICAgICAgICAgICBTdHJpbmcgaGVhZGVyID0gIlx1ZmVmZi8vIFJlc291cmNlIEJ1bmRsZTogIiArIGZpbGVfbmFtZSArICIgLSBGaWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlciBhdCAiICsgKG5ldyBEYXRlKCkpOworCisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0obmV3IEZpbGUoZGlyZWN0b3J5LCBmaWxlX25hbWUpKTsKKyAgICAgICAgICAgIFByaW50V3JpdGVyIHJlc091dCA9IG5ldyBQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKGZvcywgIlVURi04IikpOworCisgICAgICAgICAgICBWZWN0b3IgZ3JvdXBfdiA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oaGVhZGVyKTsKKyAgICAgICAgICAgIHJlc091dC5wcmludGxuKGJhc2VfZW5jICsgIiB7ICIpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgZ3JvdXBfdi5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWdyb3VwX3YuZWxlbWVudEF0KGopOworCisgICAgICAgICAgICAgICAgVmVjdG9yIGl0ZW1WZWN0ID0gZ3JvdXAuZ2V0SXRlbXNBc1ZlY3RvcigpOworICAgICAgICAgICAgICAgIGludCBpdGVtVmVjdFNpemUgPSBpdGVtVmVjdC5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1WZWN0U2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlTWV0YURhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBncm91cENvbW1lbnQgPSBncm91cC5nZXRDb21tZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDb21tZW50ICE9IG51bGwgJiYgIWdyb3VwQ29tbWVudC5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICAvLyBAZ3JvdXBDb21tZW50ICIgKyBncm91cENvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0ZUdyb3VwTmFtZSA9ICFidW5kbGUuZ2V0VW5ncm91cGVkR3JvdXAoKS5nZXROYW1lKCkuZXF1YWxzKGdyb3VwLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZUdyb3VwTmFtZSkgeworCSAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlR3JvdXBzQXNLZXlzKSB7CisJCSAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICAiICsgZXNjYXBlU3RyaW5nKGdyb3VwLmdldE5hbWUoKSwgdHJ1ZSkgKyAiIHsgIik7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3cml0ZU1ldGFEYXRhKSB7CisJCSAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICAvLyBAZ3JvdXAgIiArIGVzY2FwZVN0cmluZyhncm91cC5nZXROYW1lKCksIHRydWUpKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBpdGVtVmVjdFNpemU7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbVZlY3QuZWxlbWVudEF0KGspOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVNZXRhRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludCgiICAgICAgICAvLyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludCgiIEB0cmFuc2xhdGVkICIgKyBpdGVtLmlzVHJhbnNsYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnQoIiBAY3JlYXRlZCAiICsgaXRlbS5nZXRDcmVhdGVkRGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnQoIiBAbW9kaWZpZWQgIiArIGl0ZW0uZ2V0TW9kaWZpZWREYXRlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludCgiIEBjcmVhdG9yICIgKyBpdGVtLmdldENyZWF0b3IoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiBAbW9kaWZpZXIgIiArIGl0ZW0uZ2V0TW9kaWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGl0ZW1Db21tZW50ID0gaXRlbS5nZXRDb21tZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1Db21tZW50ICE9IG51bGwgJiYgIWl0ZW1Db21tZW50LmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICAgICAgLy8gQGNvbW1lbnQgIiArIGl0ZW1Db21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludGxuKCIgICAgICAgICIgKyBlc2NhcGVTdHJpbmcoaXRlbS5nZXRLZXkoKSwgdHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB7ICIgKyBlc2NhcGVTdHJpbmcoaXRlbS5nZXRUcmFuc2xhdGlvbigpLCBmYWxzZSkgKyAiIH0iKTsKKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yIC0gaworICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVHcm91cE5hbWUgJiYgd3JpdGVHcm91cHNBc0tleXMpIHsKKwkgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludGxuKCIgICAgfSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvLyBlbmQgZm9yIC0gagorICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIn0iKTsKKwkJCQorICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBmaWxlCisgICAgICAgICAgICByZXNPdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIGZvcy5jbG9zZSgpOworICAgICAgICB9IC8vIGVuZCBmb3IgLSBpCisgICAgfQorCisgICAgLyoqCisgICAgICogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byBob3cgdGhlIElDVSB0b29sICJnZW5yYiIgaGFuZGxlcyBzdHJpbmdzLgorICAgICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBlc2NhcGUKKyAgICAgKiBAcGFyYW0gaXNLZXkgSWYgdGhpcyBpcyBhIGtleSwgdGhlbiBxdW90ZXMgYXJlIG9wdGlvbmFsLgorICAgICAqIEByZXR1cm4gQSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiBJQ1UgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZXNjYXBlU3RyaW5nKFN0cmluZyBzdHIsIGJvb2xlYW4gaXNLZXkpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzdHJCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGludCBsZW4gPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIGJvb2xlYW4gcXVvdGVSZXF1aXJlZCA9ICFpc0tleTsKKyAgICAgICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgeworICAgICAgICAgICAgaW50IGNoID0gc3RyLmNoYXJBdChpZHgpOworICAgICAgICAgICAgaWYgKGNoIDw9ICcgJyB8fCAnficgPCBjaCkgeworICAgICAgICAgICAgICAgIGlmIChpc0tleSAmJiBjaCAhPSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgSU9FeGNlcHRpb24gZSA9IG5ldyBJT0V4Y2VwdGlvbihzdHIgKyAiIG5lZWRzIHRvIHVzZSBpbnZhcmlhbnQgY2hhcmFjdGVycyBmb3IgdGhlIGtleS4iKTsKKyAgICAgICAgICAgICAgICAgICAgZS5maWxsSW5TdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlc2NhcGVOb25Bc2NpaSAmJiBjaCAhPSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHplcm9zOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaGV4TnVtOworICAgICAgICAgICAgICAgICAgICBpZiAoKGNoICYgMHhmODAwKSA9PSAweGQ4MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHdlIGZvdW5kIGEgdmFsaWQgVVRGLTE2IHN0cmluZyB3aXRoIGEgc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2gyID0gc3RyLmNoYXJBdChpZHgrKyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hTdXJyb2dhdGUgPSAoKChjaCk8PDEwKSsoY2gyKS0oKDB4ZDgwMDw8MTApKzB4ZGMwMC0weDEwMDAwKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHplcm9zID0gIjAwMDAwMDAwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhleE51bSA9IEludGVnZXIudG9IZXhTdHJpbmcoY2hTdXJyb2dhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZCgiXFxVIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvcyA9ICIwMDAwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhleE51bSA9IEludGVnZXIudG9IZXhTdHJpbmcoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZCgiXFx1Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZCh6ZXJvcy5zdWJzdHJpbmcoaGV4TnVtLmxlbmd0aCgpKSArIGhleE51bS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBxdW90ZVJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXCInKSB7CisgICAgICAgICAgICAgICAgcXVvdGVSZXF1aXJlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZCgiXFxcIiIpOworICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd7JyB8fCBjaCA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICAgICAgcXVvdGVSZXF1aXJlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ckJ1Zi5hcHBlbmQoY2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChxdW90ZVJlcXVpcmVkKSB7CisgICAgICAgICAgICBzdHJCdWYuaW5zZXJ0KDAsICdcIicpOworICAgICAgICAgICAgc3RyQnVmLmFwcGVuZCgnXCInKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyQnVmLnRvU3RyaW5nKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkltcG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJJbXBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNGE1YjkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKKy8qKgorICogPFA+VGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIGFsbCBpbXBvcnRlciBwbHVnLWluIGNsYXNzZXMuPC9QPgorICogPFA+CisgKiBJbiB0ZXJtcyBvZiBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjbGFzcyBvciBpdHMgY2hpbGRyZW4gY2xhc3NlcywgdGhlIGZvbGxvd2luZyBzdGVwcyBzaG91bGQgaGFwcGVuIGluIG9yZGVyOgorICogPE9MPgorICogPExJPkEgRGlhbG9nIGlzIHNob3duIGZyb20gd2hpY2ggdGhlIHVzZXIgbWF5IHNlbGVjdCBvcHRpb25zIGFib3V0IHRoZSBpbXBvcnQsIGluY2x1ZGluZyB0aGUgZmlsZSBmcm9tIHdoaWNoIHRvIGltcG9ydC48L0xJPgorICogPExJPlRoZSAnSW1wb3J0JyBidXR0b24gaXMgcHJlc3NlZCwgY2xvc2luZyB0aGUgb3B0aW9ucyBkaWFsb2cgYW5kIG9wZW5pbmcgYSBwcm9ncmVzcyBiYXIgZGlhbG9nIGJveC48L0xJPgorICogPExJPlRoZSBjbGFzcyBzaG91bGQgcmVzb2x2ZSBhbGwgY29uZmxpY3RzIHdpdGggbG9jYWxlIGVuY29kaW5ncyBleGlzdGluZyBpbiB0aGUgaW1wb3J0IGZpbGVzLCBidXQgbm90IGluIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlLjwvTEk+CisgKiA8TEk+VGhlIGNsYXNzIHNob3VsZCBwYXJzZSByZXNvdXJjZXMgb25lIGF0IGEgdGltZSBhbmQgdXNlIHRoZSBpbXBvcnRSZXNvdXJjZSgpIG1ldGhvZCB0byBpbnNlcnQgdGhlbSBpbnRvIHRoZSByZXNvdXJjZSBidW5kbGUuPC9MST4KKyAqIDxMST5UaGUgY2xhc3Mgc2hvdWxkIHJlcG9ydCB3aGVuIGFsbCByZXNvdXJjZXMgaGF2ZSBiZWVuIHJlYWQgYW5kIHRoZSBpbXBvcnQgaXMgY29tcGxldGUuPC9MST4KKyAqIDwvT0w+CisgKiA8L1A+CisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJCSW1wb3J0ZXIgZXh0ZW5kcyBKRGlhbG9nIHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRklMRV9PUFRJT05fUE9QVUxBVEUgICAgICA9IDA7ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2FsZSBmaWxlIHBvcHVsYXRlZCBmcm9tIGJhc2UgZmlsZQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBGSUxFX09QVElPTl9FTVBUWSAgICAgICAgID0gMTsgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZW1wdHkgbG9jYWxlIGZpbGUKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRklMRV9PUFRJT05fSUdOT1JFICAgICAgICA9IDI7ICAgICAgICAgICAgLy8gSWdub3JlIGFsbCByZXNvdXJjZXMgZnJvbSB0aGlzIGVuY29kaW5nCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IEZJTEVfT1BUSU9OX1BST01QVCAgICAgICAgPSAzOyAgICAgICAgICAgIC8vIFByb21wdCBmb3IgZWFjaCBjb25mbGljdAorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBSRVNPVVJDRV9PUFRJT05fT1ZFUldSSVRFID0gMDsgICAgICAgICAgICAvLyBVc2UgdGhlIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBpbXBvcnQgZmlsZQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBSRVNPVVJDRV9PUFRJT05fSUdOT1JFICAgID0gMTsgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIGltcG9ydCBhbmQgdXNlIGV4aXN0aW5nIHZhbHVlCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFJFU09VUkNFX09QVElPTl9QUk9NUFQgICAgPSAyOyAgICAgICAgICAgIC8vIFByb3BtcHQgZm9yIGVhY2ggY29uZmxpY3QKKwkKKyAgICBwcm90ZWN0ZWQgc3RhdGljIEpGaWxlQ2hvb3NlciBjaG9vc2VyOworICAgIHByb3RlY3RlZCBpbnQgICAgbnVtX2NvbmZsaWN0czsKKyAgICBwcm90ZWN0ZWQgaW50ICAgIG51bV9leHRyYV9maWxlczsKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOworICAgIHByb3RlY3RlZCBSQk1hbmFnZXIgcmJtOworICAgIHByb3RlY3RlZCBSQk1hbmFnZXJHVUkgZ3VpOworICAgIHByb3RlY3RlZCBib29sZWFuIHBhdGhTZXQgPSBmYWxzZTsKKwkKKyAgICAvLyBWaXN1YWwgQ29tcG9uZW50cworICAgIEpSYWRpb0J1dHRvbiByZXNvdXJjZU92ZXJ3cml0ZVJhZGlvICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9vdmVyd3JpdGUiKSwgZmFsc2UpOworICAgIEpSYWRpb0J1dHRvbiByZXNvdXJjZUlnbm9yZVJhZGlvICAgICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9pZ25vcmUiKSwgZmFsc2UpOworICAgIEpSYWRpb0J1dHRvbiByZXNvdXJjZVByb21wdFJhZGlvICAgICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9jb25mbGljdF9wcm9tcHQiKSwgdHJ1ZSk7CisgICAgSlJhZGlvQnV0dG9uIGZpbGVHZW5lcmF0ZVBvcHVsYXRlUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGUiKSwgZmFsc2UpOworICAgIEpSYWRpb0J1dHRvbiBmaWxlR2VuZXJhdGVFbXB0eVJhZGlvICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX2VtcHR5IiksIGZhbHNlKTsKKyAgICBKUmFkaW9CdXR0b24gZmlsZUlnbm9yZVJhZGlvICAgICAgICAgICA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdF9pZ25vcmUiKSwgZmFsc2UpOworICAgIEpSYWRpb0J1dHRvbiBmaWxlUHJvbXB0UmFkaW8gICAgICAgICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9jb25mbGljdF9wcm9tcHQiKSwgdHJ1ZSk7CisJCisgICAgSkNoZWNrQm94IG1hcmtUcmFuc2xhdGVkQ2hlY2sgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2RlZmF1bHRfdHJhbnNsYXRlZCIpLCB0cnVlKTsKKyAgICBKQ2hlY2tCb3ggY3JlYXRlR3JvdXBzQ2hlY2sgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2RlZmF1bHRfZ3JvdXBfY3JlYXRpb24iKSwgdHJ1ZSk7CisgICAgSkNvbWJvQm94IGdyb3VwQ29tYm9Cb3ggPSBuZXcgSkNvbWJvQm94KCk7CisJCisgICAgSkxhYmVsIHNvdXJjZUxhYmVsOworCQorICAgIEpEaWFsb2cgcHJvZ3Jlc3NCYXJEaWFsb2c7CisgICAgSlByb2dyZXNzQmFyIHByb2dyZXNzQmFyOworICAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSB0aGF0IGFwcGVhcnMgaW4gdGhlIERpYWxvZyBib3gKKyAgICAgKiBAcGFyYW0gcmJtIEFuIFJCTWFuYWdlciBpbnN0YW5jZQorICAgICAqIEBwYXJhbSBndWkgVGhlIFJCTWFuYWdlciBHVUkgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBSQk1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgUkJJbXBvcnRlcihTdHJpbmcgdGl0bGUsIFJCTWFuYWdlciByYm0sIFJCTWFuYWdlckdVSSBndWkpIHsKKyAgICAgICAgc3VwZXIobmV3IEZyYW1lKCksIHRpdGxlLCB0cnVlKTsKKyAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOworICAgICAgICB0aGlzLnJibSA9IHJibTsKKyAgICAgICAgdGhpcy5ndWkgPSBndWk7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgY2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKyAgICAgICAgc2V0dXBGaWxlQ2hvb3NlcigpOworICAgICAgICBudW1fY29uZmxpY3RzID0gMDsKKyAgICAgICAgbnVtX2V4dHJhX2ZpbGVzID0gMDsKKyAgICAgICAgaW5pdENvbXBvbmVudHMoKTsKKyAgICAgICAgc2V0VmlzaWJsZSh0cnVlKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBGaWxlQ2hvb3NlcigpIHsKKyAgICAgICAgLy8gVG8gYmUgb3ZlcndyaXR0ZW4KKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgYmVnaW5JbXBvcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBUbyBiZSBvdmVyd3JpdHRlbgorICAgICAgICBpZiAoIXBhdGhTZXQpCisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlBhdGggbm90IHNldCB5ZXQiKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgY2hvb3NlRmlsZSgpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IGNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisgICAgICAgICAgICBGaWxlIGYgPSBjaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworICAgICAgICAgICAgc291cmNlTGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9zb3VyY2VfZmlsZSIsZi5nZXRBYnNvbHV0ZVBhdGgoKSkpOworICAgICAgICAgICAgcGF0aFNldCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgcHJvdGVjdGVkIEZpbGUgZ2V0Q2hvc2VuRmlsZSgpIHsKKyAgICAgICAgcmV0dXJuIGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEEgc3VwZXIgY2xhc3MgbWV0aG9kIGludGVuZGVkIGZvciB1c2Ugb2YgbmVhcmx5IGFsbCBzdWJjbGFzcyBpbXBvcnRlcnMsIG9uY2UgYSByZXNvdXJjZQorICAgICAqIGlzIGZvdW5kIGJ5IHRob3NlIHN1YmNsYXNzZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIG5ldyByZXNvdXJjZQorICAgICAqIGFuZCBoYW5kbGUgdGhlIHZhcmlvdXMgY29uZmxpY3QgZXJyb3JzIHRoYXQgbWF5IHJlc3VsdCBhcyBhIHBhcnQgb2YgdGhhdCBpbXBvcnQuCisgICAgICovCisJCisgICAgcHJvdGVjdGVkIHZvaWQgaW1wb3J0UmVzb3VyY2UoQnVuZGxlSXRlbSBpdGVtLCBTdHJpbmcgZW5jb2RpbmcsIFN0cmluZyBncm91cF9uYW1lKSB7CisgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBudWxsOworICAgICAgICBCdW5kbGVHcm91cCBncm91cCA9IG51bGw7CisgICAgICAgIEJ1bmRsZUdyb3VwIGJhY2t1cF9ncm91cCA9IG51bGw7CisJCQorICAgICAgICBpZiAoZ3JvdXBfbmFtZSA9PSBudWxsKQorICAgICAgICAJZ3JvdXBfbmFtZSA9IGdldERlZmF1bHRHcm91cCgpOworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgLy8gR2V0IHRoZSBidW5kbGUgdG8gd2hpY2ggd2Ugd2lsbCBiZSBhZGRpbmcgdGhpcyByZXNvdXJjZQorICAgICAgICBidW5kbGUgPSByYm0uZ2V0QnVuZGxlKGVuY29kaW5nKTsKKyAgICAgICAgLy8gU2tpcCB0aGlzIGltcG9ydCBpZiB0aGUgYnVuZGxlIGlzIG5vbi1leGlzdGVudCAoU2hvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCBpZiB3YW50ZWQpCisgICAgICAgIGlmIChidW5kbGUgPT0gbnVsbCkKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgLy8gRmluZCB0aGUgZ3JvdXAgaW4gdGhlIGJ1bmRsZSwgVW5ncm91cGVkIGlmIG5vbi1leGlzdGVudAorICAgICAgICBWZWN0b3IgZ3YgPSBidW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZ3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIHRlbXBnID0gKEJ1bmRsZUdyb3VwKWd2LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSBiYWNrdXBfZ3JvdXAgPSB0ZW1wZzsKKyAgICAgICAgICAgIGlmICh0ZW1wZy5nZXROYW1lKCkuZXF1YWxzKCJVbmdyb3VwZWQgSXRlbXMiKSkgYmFja3VwX2dyb3VwID0gdGVtcGc7CisgICAgICAgICAgICBlbHNlIGlmICh0ZW1wZy5nZXROYW1lKCkuZXF1YWxzKGdyb3VwX25hbWUpKSB7CisgICAgICAgICAgICAgICAgZ3JvdXAgPSB0ZW1wZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGdldERlZmF1bHRHcm91cENyZWF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZ3JvdXAgYnkgdGhpcyBuYW1lCisgICAgICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUdyb3VwKGdyb3VwX25hbWUsICIiKTsKKyAgICAgICAgICAgICAgICBndiA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGd2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIHRlbXBnID0gKEJ1bmRsZUdyb3VwKWd2LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBnLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBfbmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gdGVtcGc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBiYWNrdXBfZ3JvdXAKKyAgICAgICAgICAgICAgICBncm91cCA9IGJhY2t1cF9ncm91cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBJZiBhbGwgZ3JvdXAgaWRlbnRpZmljYXRpb24gZWZmb3J0cyBmYWlsLCB3ZSBmYWlsCisgICAgICAgIGlmIChncm91cCA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICBpdGVtLnNldFBhcmVudEdyb3VwKGdyb3VwKTsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGFuZCByZXNvbHZlIGNvbmZsaWN0cworICAgICAgICBpZiAoYnVuZGxlLmFsbEl0ZW1zLmNvbnRhaW5zS2V5KGl0ZW0uZ2V0S2V5KCkpKSB7CisgICAgICAgICAgICByZXNvbHZlUmVzb3VyY2UoYnVuZGxlLGl0ZW0pOyAKKyAgICAgICAgICAgIFJCTWFuYWdlckdVSS5kZWJ1Z01zZygiUmVzb2x2ZSBjb25mbGljdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSByZXNvdXJjZQorICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRyeWluZyB0byBpbXBvcnQgYW5kIGl0ZW0gd2hvc2Uga2V5IGFsbCByZWFkeSBleGlzdHMgd2l0aGluIHRoZSBidW5kbGUuCisgICAgICovCisJCisgICAgcHJvdGVjdGVkIHZvaWQgcmVzb2x2ZVJlc291cmNlKEJ1bmRsZSBidW5kbGUsIEJ1bmRsZUl0ZW0gaXRlbSkgeworICAgICAgICBpZiAodGhpcy5nZXRSZXNvdXJjZUNvbmZsaWN0T3B0aW9uKCkgPT0gUkVTT1VSQ0VfT1BUSU9OX0lHTk9SRSkKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5nZXRSZXNvdXJjZUNvbmZsaWN0T3B0aW9uKCkgPT0gUkVTT1VSQ0VfT1BUSU9OX09WRVJXUklURSkgeworICAgICAgICAgICAgYnVuZGxlLnJlbW92ZUl0ZW0oaXRlbS5nZXRLZXkoKSk7CisgICAgICAgICAgICBidW5kbGUuYWRkQnVuZGxlSXRlbShpdGVtKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFJlc291cmNlQ29uZmxpY3RPcHRpb24oKSA9PSBSRVNPVVJDRV9PUFRJT05fUFJPTVBUKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIG9yaWdpbmFsID0gKEJ1bmRsZUl0ZW0pYnVuZGxlLmFsbEl0ZW1zLmdldChpdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbCA9PSBudWxsKQorICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgICAgIFN0cmluZyB0cmFucyA9IG9yaWdpbmFsLmdldFRyYW5zbGF0aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgb3B0aW9uc1tdID0geyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9vdmVyd3JpdGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZSIpfTsKKyAgICAgICAgICAgIFN0cmluZyBpbnNlcnRbXSA9IHtpdGVtLmdldEtleSgpLCAoYnVuZGxlLmVuY29kaW5nLmVxdWFscygiIikgPyAiKEJhc2UgQ2xhc3MpIiA6IGJ1bmRsZS5lbmNvZGluZyl9OworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpSk9wdGlvblBhbmUuc2hvd0lucHV0RGlhbG9nKHRoaXMsICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2UiLCBpbnNlcnQpICsgCisgICAgICAgICAgICAgICAgIlxuIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV9zb3VyY2UiLCBpdGVtLmdldFRyYW5zbGF0aW9uKCkpICsKKyAgICAgICAgICAgICAgICAiXG4iICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3RhcmdldCIsIHRyYW5zKSwKKyAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0cyIpLCBKT3B0aW9uUGFuZS5RVUVTVElPTl9NRVNTQUdFLAorICAgICAgICAgICAgICAgIG51bGwsIG9wdGlvbnMsIG9wdGlvbnNbMF0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQorICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZSIpKSkgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5yZW1vdmVJdGVtKGl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRCdW5kbGVJdGVtKGl0ZW0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZSIpKSkKKyAgICAgICAgICAgIAlyZXR1cm47CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogR2l2ZW4gYSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb250YWluaW5nIGxvY2FsZSBlbmNvZGluZ3MgKGUuZy4geyJlbiIsICJlbl91cyIsICJkZSJ9KSwgYXR0ZW1wdHMKKyAgICAgKiB0byByZXNvbHZlIHRob3NlIGNvbmZsaWN0cyBhY2NvcmRpbmcgdG8gdGhlIHByZWZlcmVuY2VzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLgorICAgICAqLworCQorICAgIHByb3RlY3RlZCB2b2lkIHJlc29sdmVFbmNvZGluZ3MoVmVjdG9yIHYpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gKFN0cmluZyl2LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsIHx8IGVuY29kaW5nLmVxdWFscygiIikgfHwgcmJtLmhhc1Jlc291cmNlKGVuY29kaW5nKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgdGhpcyBjb25mbGljdAorICAgICAgICAgICAgaWYgKHRoaXMuZ2V0RmlsZUNvbmZsaWN0T3B0aW9uKCkgPT0gRklMRV9PUFRJT05fSUdOT1JFKSBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZ2V0RmlsZUNvbmZsaWN0T3B0aW9uKCkgPT0gRklMRV9PUFRJT05fUE9QVUxBVEUpIHsKKyAgICAgICAgICAgICAgICByYm0uY3JlYXRlUmVzb3VyY2UobnVsbCwgbnVsbCwgbnVsbCwgZW5jb2RpbmcsIG51bGwsIG51bGwsIG51bGwsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEZpbGVDb25mbGljdE9wdGlvbigpID09IEZJTEVfT1BUSU9OX0VNUFRZKSB7CisgICAgICAgICAgICAgICAgcmJtLmNyZWF0ZVJlc291cmNlKG51bGwsIG51bGwsIG51bGwsIGVuY29kaW5nLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRGaWxlQ29uZmxpY3RPcHRpb24oKSA9PSBGSUxFX09QVElPTl9QUk9NUFQpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgb3B0aW9uc1tdID0geyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX3BvcHVsYXRlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9lbXB0eSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlIil9OworCQkJCQorICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKUpPcHRpb25QYW5lLnNob3dJbnB1dERpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2Nob29zZSIsIGVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdHMiKSwgSk9wdGlvblBhbmUuUVVFU1RJT05fTUVTU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgb3B0aW9ucywgb3B0aW9uc1swXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2lnbm9yZSIpKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX3BvcHVsYXRlIikpKSB7CisgICAgICAgICAgICAgICAgICAgIHJibS5jcmVhdGVSZXNvdXJjZShudWxsLCBudWxsLCBudWxsLCBlbmNvZGluZywgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHkiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmJtLmNyZWF0ZVJlc291cmNlKG51bGwsIG51bGwsIG51bGwsIGVuY29kaW5nLCBudWxsLCBudWxsLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGd1aS51cGRhdGVEaXNwbGF5VHJlZSgpOworICAgIH0KKwkKKyAgICAvLyBSZXR1cm5zIGFuIGludGVnZXIgbWFzayBkZXNjcmliaW5nIHRoZSB1c2VyJ3Mgc2VsZWN0aW9uIGZvciBmaWxlIHJlc29sdmluZyBtaXNzaW5nIGZpbGUgbG9jYWxlIGNvbmZsaWN0cworCQorICAgIHByaXZhdGUgaW50IGdldEZpbGVDb25mbGljdE9wdGlvbigpIHsKKyAgICAgICAgaWYgKGZpbGVHZW5lcmF0ZVBvcHVsYXRlUmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gRklMRV9PUFRJT05fUE9QVUxBVEU7CisgICAgICAgIGlmIChmaWxlR2VuZXJhdGVFbXB0eVJhZGlvLmlzU2VsZWN0ZWQoKSkgcmV0dXJuIEZJTEVfT1BUSU9OX0VNUFRZOworICAgICAgICBpZiAoZmlsZUlnbm9yZVJhZGlvLmlzU2VsZWN0ZWQoKSkgcmV0dXJuIEZJTEVfT1BUSU9OX0lHTk9SRTsKKyAgICAgICAgaWYgKGZpbGVQcm9tcHRSYWRpby5pc1NlbGVjdGVkKCkpIHJldHVybiBGSUxFX09QVElPTl9QUk9NUFQ7CisgICAgICAgIHJldHVybiBGSUxFX09QVElPTl9QUk9NUFQ7CisgICAgfQorCQorICAgIC8vIFJldHVybnMgYW4gaW50ZWdlciBtYXNrIGRlc2NyaWJpbmcgdGhlIHVzZXIncyBzZWxlY3Rpb24gZm9yIGR1cGxpY2F0ZSByZXNvdXJjZSBrZXkgY29uZmxpY3RzCisJCisgICAgcHJpdmF0ZSBpbnQgZ2V0UmVzb3VyY2VDb25mbGljdE9wdGlvbigpIHsKKyAgICAgICAgaWYgKHJlc291cmNlT3ZlcndyaXRlUmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gUkVTT1VSQ0VfT1BUSU9OX09WRVJXUklURTsKKyAgICAgICAgaWYgKHJlc291cmNlSWdub3JlUmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gUkVTT1VSQ0VfT1BUSU9OX0lHTk9SRTsKKyAgICAgICAgaWYgKHJlc291cmNlUHJvbXB0UmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gUkVTT1VSQ0VfT1BUSU9OX1BST01QVDsKKyAgICAgICAgcmV0dXJuIFJFU09VUkNFX09QVElPTl9QUk9NUFQ7CisgICAgfQorCQorICAgIC8vIFJldHVybnMgdGhlIGdyb3VwIG5hbWUgZm9yIHVzZSB3aGVuIG5vIGdyb3VwIG5hbWUgaXMgc3BlY2lmaWVkCisJCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXREZWZhdWx0R3JvdXAoKSB7CisgICAgICAgIHJldHVybiBncm91cENvbWJvQm94LmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCk7CisgICAgfQorCQorICAgIC8vIFJldHVybnMgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb24gdmFsdWUKKwkKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBnZXREZWZhdWx0VHJhbnNsYXRlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1hcmtUcmFuc2xhdGVkQ2hlY2suaXNTZWxlY3RlZCgpOworICAgIH0KKwkKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgZ3JvdXAgb2YgbmFtZSBub24tZXhpc3RhbnQgaW4gdGhlIGFjdGl2ZSBidW5kbGUgaXMgY3JlYXRlZAorCQorICAgIHByb3RlY3RlZCBib29sZWFuIGdldERlZmF1bHRHcm91cENyZWF0aW9uKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlR3JvdXBzQ2hlY2suaXNTZWxlY3RlZCgpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBzaG93UHJvZ3Jlc3NCYXIoaW50IHN0ZXBzKSB7CisgICAgICAgIHRoaXNXaW5kb3dDbG9zaW5nKCk7CisgICAgICAgIEpEaWFsb2cgcHJvZ3Jlc3NCYXJEaWFsb2cgPSBuZXcgSkRpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9pbXBvcnRfcHJvZ3Jlc3MiKSwgZmFsc2UpOworICAgICAgICBKUHJvZ3Jlc3NCYXIgcHJvZ3Jlc3NCYXIgPSBuZXcgSlByb2dyZXNzQmFyKDAsIHN0ZXBzKTsKKyAgICAgICAgcHJvZ3Jlc3NCYXIuc2V0VmFsdWUoMCk7CisgICAgICAgIHByb2dyZXNzQmFyRGlhbG9nLmdldENvbnRlbnRQYW5lKCkuYWRkKHByb2dyZXNzQmFyKTsKKyAgICAgICAgcHJvZ3Jlc3NCYXJEaWFsb2cucGFjaygpOworICAgICAgICBwcm9ncmVzc0JhckRpYWxvZy5zZXRWaXNpYmxlKHRydWUpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBpbmNyZW1lbnRQcm9ncmVzc0JhcigpIHsKKyAgICAgICAgaWYgKHByb2dyZXNzQmFyID09IG51bGwpIHJldHVybjsKKyAgICAgICAgcHJvZ3Jlc3NCYXIuc2V0VmFsdWUocHJvZ3Jlc3NCYXIuZ2V0VmFsdWUoKSsxKTsKKyAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFZhbHVlKCkgPT0gcHJvZ3Jlc3NCYXIuZ2V0TWF4aW11bSgpKSBoaWRlUHJvZ3Jlc3NCYXIoKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgaGlkZVByb2dyZXNzQmFyKCkgeworICAgICAgICBpZiAocHJvZ3Jlc3NCYXJEaWFsb2cgIT0gbnVsbCkgcHJvZ3Jlc3NCYXJEaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgdGhlIHZpc3VhbCBjb21wb25lbnRzIGZvciBzZWxlY3RpbmcgYW4gaW1wb3J0IGZpbGUgYW5kIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlCisgICAgICogb3B0aW9ucworICAgICAqLworCQorICAgIHByb3RlY3RlZCB2b2lkIGluaXRDb21wb25lbnRzKCkgeworICAgICAgICAvLyBDcmVhdGUgQ29tcG9uZW50cworICAgICAgICBKTGFiZWwgdGl0bGVMYWJlbCAgICAgICA9IG5ldyBKTGFiZWwodGl0bGUpOworICAgICAgICBzb3VyY2VMYWJlbCAgICAgICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfc291cmNlX2ZpbGUiLCItLSIpKTsKKyAgICAgICAgSkxhYmVsIGluc2VydEdyb3VwTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2luc2VydF9ncm91cCIpKTsKKyAgICAgICAgCisgICAgICAgIEpCdXR0b24gZmlsZUNob29zZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2Nob29zZSIpKTsKKyAgICAgICAgSkJ1dHRvbiBjYW5jZWxCdXR0b24gICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY2FuY2VsIikpOworICAgICAgICBKQnV0dG9uIGltcG9ydEJ1dHRvbiAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9pbXBvcnQiKSk7CisgICAgICAgIAorICAgICAgICBCdXR0b25Hcm91cCByZXNvdXJjZUdyb3VwID0gbmV3IEJ1dHRvbkdyb3VwKCk7CisgICAgICAgIEJ1dHRvbkdyb3VwIGZpbGVHcm91cCA9IG5ldyBCdXR0b25Hcm91cCgpOworCQkKKyAgICAgICAgSlBhbmVsIHRvcFBhbmVsID0gbmV3IEpQYW5lbChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBKUGFuZWwgbWlkUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIEpQYW5lbCBib3RQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5SSUdIVCkpOworICAgICAgICAKKyAgICAgICAgSlBhbmVsIHRvcElubmVyUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIAorICAgICAgICBCb3ggbWlkQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCisgICAgICAgIEpQYW5lbCByZXNvdXJjZVBhbmVsID0gbmV3IEpQYW5lbChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkxFRlQpKTsKKyAgICAgICAgSlBhbmVsIGZpbGVQYW5lbCAgICAgPSBuZXcgSlBhbmVsKG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworICAgICAgICBKUGFuZWwgZGVmYXVsdFBhbmVsICA9IG5ldyBKUGFuZWwobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisgICAgICAgIEpQYW5lbCBkZWZhdWx0UGFuZWwyID0gbmV3IEpQYW5lbChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICAKKyAgICAgICAgQm94IHJlc291cmNlQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKyAgICAgICAgQm94IGZpbGVCb3ggICAgID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKyAgICAgICAgQm94IGdyb3VwQm94ICAgID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkJCisgICAgICAgIC8vIFNldHVwIHRpdGxlCisgICAgICAgIHRpdGxlTGFiZWwuc2V0Rm9udChuZXcgRm9udCgiU2VyaWYiLEZvbnQuQk9MRCwxNikpOworCQkKKyAgICAgICAgLy8gU2V0dXAgcGFuZWxzCisgICAgICAgIG1pZFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9vcHRpb25zIikpKTsKKyAgICAgICAgcmVzb3VyY2VQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RzIikpKTsKKyAgICAgICAgZmlsZVBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0cyIpKSk7CisgICAgICAgIGRlZmF1bHRQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZGVmYXVsdF92YWx1ZXMiKSkpOworCQkKKyAgICAgICAgLy8gQXJyYW5nZSBidXR0b24gZ3JvdXBzCisgICAgICAgIGZpbGVHcm91cC5hZGQoZmlsZUdlbmVyYXRlUG9wdWxhdGVSYWRpbyk7CisgICAgICAgIGZpbGVHcm91cC5hZGQoZmlsZUdlbmVyYXRlRW1wdHlSYWRpbyk7CisgICAgICAgIGZpbGVHcm91cC5hZGQoZmlsZUlnbm9yZVJhZGlvKTsKKyAgICAgICAgZmlsZUdyb3VwLmFkZChmaWxlUHJvbXB0UmFkaW8pOworICAgICAgICByZXNvdXJjZUdyb3VwLmFkZChyZXNvdXJjZU92ZXJ3cml0ZVJhZGlvKTsKKyAgICAgICAgcmVzb3VyY2VHcm91cC5hZGQocmVzb3VyY2VJZ25vcmVSYWRpbyk7CisgICAgICAgIHJlc291cmNlR3JvdXAuYWRkKHJlc291cmNlUHJvbXB0UmFkaW8pOworCQkKKyAgICAgICAgLy8gQWRkIGFjdGlvbiBsaXN0ZW5lcnMKKyAgICAgICAgY2FuY2VsQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisgICAgICAgICAgICAgICAgdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisJCQorICAgICAgICBpbXBvcnRCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBiZWdpbkltcG9ydCgpOworICAgICAgICAgICAgICAgICAgICBndWkudXBkYXRlUHJvamVjdFRyZWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3VpLnVwZGF0ZURpc3BsYXlUcmVlKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXNXaW5kb3dDbG9zaW5nKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICAgICAgCWlvZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgICAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIikgKyAiXG4iICsgaW9lLmdldExvY2FsaXplZE1lc3NhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisJCQorICAgICAgICBmaWxlQ2hvb3NlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisgICAgICAgICAgICAgICAgY2hvb3NlRmlsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkJCisgICAgICAgIC8vIFNldHVwIGNvbWJvIGJveAorICAgICAgICBCdW5kbGUgYmFzZUJ1bmRsZSA9ICgoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZWxlbWVudEF0KDApKTsKKyAgICAgICAgQnVuZGxlR3JvdXAgdW5ncm91cGVkR3JvdXAgPSBiYXNlQnVuZGxlLmdldFVuZ3JvdXBlZEdyb3VwKCk7CisgICAgICAgIGdyb3VwQ29tYm9Cb3ggPSBuZXcgSkNvbWJvQm94KGJhc2VCdW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKSk7CisgICAgICAgIGludCBncm91cENvbWJvQm94Q291bnQgPSBncm91cENvbWJvQm94LmdldEl0ZW1Db3VudCgpOworICAgICAgICBmb3IgKGludCBzZWxlY3RlZEluZGV4ID0gMDsgc2VsZWN0ZWRJbmRleCA8IGdyb3VwQ29tYm9Cb3hDb3VudDsgc2VsZWN0ZWRJbmRleCsrKSB7CisgICAgICAgIAlCdW5kbGVHcm91cCBidW5kR3JvdXAgPSAoKEJ1bmRsZUdyb3VwKWdyb3VwQ29tYm9Cb3guZ2V0SXRlbUF0KHNlbGVjdGVkSW5kZXgpKTsKKyAgICAgICAgCWlmIChidW5kR3JvdXAuZ2V0TmFtZSgpLmVxdWFscyh1bmdyb3VwZWRHcm91cC5nZXROYW1lKCkpKSB7CisgICAgICAgIAkJLy8gQnkgZGVmYXVsdCwgdXNlIHRoZSB1bmdyb3VwZWQgZ3JvdXAuIFByb2JhYmx5IG5hbWVkICdVbmdyb3VwZWQgSXRlbXMnLgorICAgICAgICAJCWdyb3VwQ29tYm9Cb3guc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZEluZGV4KTsKKyAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAgICAgfQorCQkKKyAgICAgICAgLy8gQXJhbmdlIGNvbXBvbmVudHMKKyAgICAgICAgZ3JvdXBCb3guYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsR2x1ZSgpKTsKKyAgICAgICAgZ3JvdXBCb3guYWRkKGluc2VydEdyb3VwTGFiZWwpOworICAgICAgICBncm91cEJveC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisgICAgICAgIGdyb3VwQm94LmFkZChncm91cENvbWJvQm94KTsKKwkJCisgICAgICAgIGRlZmF1bHRQYW5lbDIuYWRkKGdyb3VwQm94LCBCb3JkZXJMYXlvdXQuTk9SVEgpOworICAgICAgICBkZWZhdWx0UGFuZWwyLmFkZChtYXJrVHJhbnNsYXRlZENoZWNrLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKyAgICAgICAgZGVmYXVsdFBhbmVsMi5hZGQoY3JlYXRlR3JvdXBzQ2hlY2ssIEJvcmRlckxheW91dC5TT1VUSCk7CisJCQorICAgICAgICBmaWxlQm94LmFkZChmaWxlR2VuZXJhdGVQb3B1bGF0ZVJhZGlvKTsKKyAgICAgICAgZmlsZUJveC5hZGQoZmlsZUdlbmVyYXRlRW1wdHlSYWRpbyk7CisgICAgICAgIGZpbGVCb3guYWRkKGZpbGVJZ25vcmVSYWRpbyk7CisgICAgICAgIGZpbGVCb3guYWRkKGZpbGVQcm9tcHRSYWRpbyk7CisJCQorICAgICAgICByZXNvdXJjZUJveC5hZGQocmVzb3VyY2VPdmVyd3JpdGVSYWRpbyk7CisgICAgICAgIHJlc291cmNlQm94LmFkZChyZXNvdXJjZUlnbm9yZVJhZGlvKTsKKyAgICAgICAgcmVzb3VyY2VCb3guYWRkKHJlc291cmNlUHJvbXB0UmFkaW8pOworCQkKKyAgICAgICAgZGVmYXVsdFBhbmVsLmFkZChkZWZhdWx0UGFuZWwyKTsKKyAgICAgICAgZmlsZVBhbmVsLmFkZChmaWxlQm94KTsKKyAgICAgICAgcmVzb3VyY2VQYW5lbC5hZGQocmVzb3VyY2VCb3gpOworCQkKKyAgICAgICAgbWlkQm94LmFkZChyZXNvdXJjZVBhbmVsKTsKKyAgICAgICAgbWlkQm94LmFkZChmaWxlUGFuZWwpOworICAgICAgICBtaWRCb3guYWRkKGRlZmF1bHRQYW5lbCk7CisgICAgICAgICAgICAKKyAgICAgICAgbWlkUGFuZWwuYWRkKG1pZEJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorICAgICAgICB0b3BJbm5lclBhbmVsLmFkZChzb3VyY2VMYWJlbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisgICAgICAgIHRvcElubmVyUGFuZWwuYWRkKGZpbGVDaG9vc2VCdXR0b24sIEJvcmRlckxheW91dC5FQVNUKTsKKwkJCisgICAgICAgIHRvcFBhbmVsLmFkZCh0aXRsZUxhYmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworICAgICAgICB0b3BQYW5lbC5hZGQodG9wSW5uZXJQYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorICAgICAgICBib3RQYW5lbC5hZGQoY2FuY2VsQnV0dG9uKTsKKyAgICAgICAgYm90UGFuZWwuYWRkKGltcG9ydEJ1dHRvbik7CisJCQorICAgICAgICBnZXRDb250ZW50UGFuZSgpLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZCh0b3BQYW5lbCwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5hZGQobWlkUGFuZWwsIEJvcmRlckxheW91dC5DRU5URVIpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZChib3RQYW5lbCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJCisgICAgICAgIHBhY2soKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgdGhpc1dpbmRvd0Nsb3NpbmcoKSB7CisgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworICAgICAgICBkaXNwb3NlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkphdmFFeHBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2NDhmYwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkphdmFFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcuYm9yZGVyLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogQW4gZXhwb3J0ZXIgcGx1Zy1pbiBjbGFzcyBmb3IgUkJNYW5hZ2VyLiBUaGUgcmVzb3VyY2VzIGV4cG9ydGVkIGhlcmUgY29uZm9ybSB0bworICogdGhlIEphdmEgc3RhbmRhcmQgZm9yIFJlc291cmNlIEJ1bmRsZXMgYXMgc3BlY2lmaWVkIGluIGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGUuCisgKiBUaGUgb3V0cHV0IGZpbGVzIGFyZSBjb21waWxhYmxlIGphdmEgZmlsZXMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkKKyAqIHBhY2thZ2UuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJCSmF2YUV4cG9ydGVyIGV4dGVuZHMgUkJFeHBvcnRlciB7CisgICAgcHJpdmF0ZSBTdHJpbmcgcGFja2FnZU5hbWUgPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiBwdWJsaWNDbGFzcyA9IHRydWU7CisgICAgcHJpdmF0ZSBib29sZWFuIHB1YmxpY01ldGhvZHMgPSB0cnVlOworCQorCQorICAgIHB1YmxpYyBSQkphdmFFeHBvcnRlcigpIHsKKyAgICAgICAgc3VwZXIoKTsKKwkJCisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbGUgY2hvb3NlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgaWYgKGNob29zZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgY2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKyAgICAgICAgICAgIGNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpeworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiSmF2YSBTb3VyY2UgRmlsZXMiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZi5nZXROYW1lKCkuZW5kc1dpdGgoIi5qYXZhIikgJiYgZi5nZXROYW1lKCkuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJibSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIE9wZW4gdGhlIGFkZGl0aW9uYWwgRGlhbG9nCisgICAgICAgIFJCSmF2YUV4cG9ydGVyRGlhbG9nIHBhcmFtZXRlcnNEaWFsb2cgPSBuZXcgUkJKYXZhRXhwb3J0ZXJEaWFsb2coKTsKKyAgICAgICAgcGFja2FnZU5hbWUgPSBwYXJhbWV0ZXJzRGlhbG9nLmdldFBhY2thZ2VOYW1lKCk7CisgICAgICAgIHB1YmxpY0NsYXNzID0gcGFyYW1ldGVyc0RpYWxvZy5pc0NsYXNzUHVibGljKCk7CisgICAgICAgIHB1YmxpY01ldGhvZHMgPSBwYXJhbWV0ZXJzRGlhbG9nLmlzTWV0aG9kc1B1YmxpYygpOworCQkKKyAgICAgICAgLy8gT3BlbiB0aGUgU2F2ZSBEaWFsb2cKKyAgICAgICAgaW50IHJldF92YWwgPSBjaG9vc2VyLnNob3dTYXZlRGlhbG9nKG51bGwpOworICAgICAgICBpZiAocmV0X3ZhbCAhPSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHJldHVybjsKKyAgICAgICAgLy8gUmV0cmlldmUgYmFzaWMgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICBGaWxlIGZpbGUgPSBjaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOyAgICAgICAgICAgICAgICAgIC8vIFRoZSBmaWxlKHMpIHdlIHdpbGwgYmUgd29ya2luZyB3aXRoCisgICAgICAgIEZpbGUgZGlyZWN0b3J5ID0gbmV3IEZpbGUoZmlsZS5nZXRQYXJlbnQoKSk7ICAgICAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSB3ZSB3aWxsIGJlIHdyaXRpbmcgdG8KKyAgICAgICAgU3RyaW5nIGJhc2VfbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBmaWxlcyB3ZSB3aWxsIHdyaXRlCisgICAgICAgIGlmIChiYXNlX25hbWUgPT0gbnVsbCB8fCBiYXNlX25hbWUuZXF1YWxzKCIiKSkgYmFzZV9uYW1lID0gcmJtLmdldEJhc2VDbGFzcygpOworICAgICAgICBpZiAoYmFzZV9uYW1lLmVuZHNXaXRoKCIuamF2YSIpKSBiYXNlX25hbWUgPSBiYXNlX25hbWUuc3Vic3RyaW5nKDAsYmFzZV9uYW1lLmxlbmd0aCgpLTUpOworCQkKKyAgICAgICAgVmVjdG9yIGJ1bmRsZV92ID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlX3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZV92LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIFN0cmluZyBiYXNlX2VuYyA9IGJhc2VfbmFtZTsKKyAgICAgICAgICAgIGlmIChidW5kbGUuZW5jb2RpbmcgIT0gbnVsbCAmJiAhYnVuZGxlLmVuY29kaW5nLmVxdWFscygiIikpIGJhc2VfZW5jID0gYmFzZV9lbmMgKyAiXyIgKyBidW5kbGUuZW5jb2Rpbmc7CisgICAgICAgICAgICBTdHJpbmcgZmlsZV9uYW1lID0gYmFzZV9lbmMgKyAiLmphdmEiOworCQkJCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiLyogRmlsZTogICAgIiArIGZpbGVfbmFtZSArICJcbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiICogRGF0ZTogICAgIiArIChuZXcgRGF0ZSgpKSArICJcbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiICogQ29tbWVudDogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBSQk1hbmFnZXIiICsgIlxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIgKi9cblxuIik7CisgICAgICAgICAgICBpZiAocGFja2FnZU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoInBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIjtcblxuIik7CisgICAgICAgICAgICB9CQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiaW1wb3J0IGphdmEudXRpbC5MaXN0UmVzb3VyY2VCdW5kbGU7XG5cbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgocHVibGljQ2xhc3MgPyAicHVibGljICIgOiAicHJvdGVjdGVkICIpKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoImNsYXNzICIgKyBiYXNlX2VuYyArICIgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUge1xuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdCIgKyAocHVibGljTWV0aG9kcyA/ICJwdWJsaWMiIDogInByb3RlY3RlZCIpICsgIiBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkge1xuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdFx0cmV0dXJuIGNvbnRlbnRzO1xuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdH1cbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHRwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXVtdIGNvbnRlbnRzID0ge1xuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdC8vIExPQ0FMSVpFIFRISVNcbiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWZWN0b3IgZ3JvdXBfdiA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgZ3JvdXBfdi5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWdyb3VwX3YuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgIFZlY3RvciBpdGVtX3YgPSBncm91cC5nZXRJdGVtc0FzVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgaXRlbV92LnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1fdi5lbGVtZW50QXQoayk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0XHR7XCIiICsgaXRlbS5nZXRLZXkoKSArICJcIiwgXCIiICsgaXRlbS5nZXRUcmFuc2xhdGlvbigpICsgIlwifSxcdC8vICIgKyBpdGVtLmdldENvbW1lbnQoKSArICJcbiIpOworICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGsKKyAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGoKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHQvLyBFTkQgT0YgTUFURVJJQUwgVE8gTE9DQUxJWkVcbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHR9O1xuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJ9Iik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgZmlsZQorICAgICAgICAgICAgRmlsZSB3cml0ZV9maWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBmaWxlX25hbWUpOworICAgICAgICAgICAgRmlsZVdyaXRlciB3cml0ZXIgPSBuZXcgRmlsZVdyaXRlcih3cml0ZV9maWxlKTsKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShidWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB3cml0ZXIuZmx1c2goKTsKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpOworICAgICAgICB9IC8vIGVuZCBmb3IgLSBpCisgICAgfQorfQorCitjbGFzcyBSQkphdmFFeHBvcnRlckRpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworICAgIEpDaGVja0JveCBwYWNrYWdlQ2hlY2s7CisgICAgSlJhZGlvQnV0dG9uIGNsYXNzUHVibGljUmFkaW87CisgICAgSlJhZGlvQnV0dG9uIGNsYXNzUHJvdGVjdGVkUmFkaW87CisgICAgSlJhZGlvQnV0dG9uIG1ldGhvZHNQdWJsaWNSYWRpbzsKKyAgICBKUmFkaW9CdXR0b24gbWV0aG9kc1Byb3RlY3RlZFJhZGlvOworICAgIEpUZXh0RmllbGQgcGFja2FnZUZpZWxkOworCQorICAgIHB1YmxpYyBSQkphdmFFeHBvcnRlckRpYWxvZygpIHsKKyAgICAgICAgc3VwZXIobmV3IEpGcmFtZSgpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9leHBvcnRfamF2YV9vcHRpb25zIiksIHRydWUpOworICAgICAgICBpbml0Q29tcG9uZW50cygpOworICAgIH0KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkgeworICAgICAgICBpZiAoIShwYWNrYWdlQ2hlY2suaXNTZWxlY3RlZCgpKSkgcmV0dXJuIG51bGw7CisgICAgICAgIFN0cmluZyByZXRWYWwgPSBwYWNrYWdlRmllbGQuZ2V0VGV4dCgpOworICAgICAgICBpZiAocmV0VmFsID09IG51bGwgfHwgcmV0VmFsLnRyaW0oKS5lcXVhbHMoIiIpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIHJldFZhbC50cmltKCk7CisgICAgfQorCQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2xhc3NQdWJsaWMoKSB7CQorICAgICAgICByZXR1cm4gY2xhc3NQdWJsaWNSYWRpby5pc1NlbGVjdGVkKCk7CQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBpc01ldGhvZHNQdWJsaWMoKSB7CisgICAgICAgIHJldHVybiBtZXRob2RzUHVibGljUmFkaW8uaXNTZWxlY3RlZCgpOworICAgIH0KKwkKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlQ2xvc2UoKSB7CisgICAgICAgIHNldFZpc2libGUoZmFsc2UpOworICAgICAgICBkaXNwb3NlKCk7CisgICAgfQorCQorICAgIHByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5yZW1vdmVBbGwoKTsKKwkJCisgICAgICAgIHBhY2thZ2VDaGVjayA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJleHBvcnRfamF2YV9wYWNrYWdlIiksIGZhbHNlKTsKKyAgICAgICAgY2xhc3NQdWJsaWNSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJleHBvcnRfamF2YV9jbGFzc19wdWJsaWMiKSwgdHJ1ZSk7CisgICAgICAgIGNsYXNzUHJvdGVjdGVkUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXhwb3J0X2phdmFfY2xhc3NfcHJvdGVjdGVkIiksIGZhbHNlKTsKKyAgICAgICAgbWV0aG9kc1B1YmxpY1JhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImV4cG9ydF9qYXZhX2NsYXNzX3B1YmxpYyIpLCB0cnVlKTsKKyAgICAgICAgbWV0aG9kc1Byb3RlY3RlZFJhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImV4cG9ydF9qYXZhX2NsYXNzX3Byb3RlY3RlZCIpLCBmYWxzZSk7CisgICAgICAgIHBhY2thZ2VGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKCk7CisgICAgICAgIHBhY2thZ2VGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJCisgICAgICAgIEpCdXR0b24gb2tCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIk9LIikpOworICAgICAgICBKTGFiZWwgdGl0bGVMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJleHBvcnRfamF2YV90aXRsZSIpLCBTd2luZ0NvbnN0YW50cy5MRUZUKTsKKwkJCisgICAgICAgIEpQYW5lbCBva1BhbmVsID0gbmV3IEpQYW5lbCgpOworICAgICAgICBva1BhbmVsLmFkZChva0J1dHRvbik7CisgICAgICAgIEpQYW5lbCBjZW50ZXJQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEdyaWRMYXlvdXQoMSwxKSk7CisgICAgICAgIGNlbnRlclBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUJldmVsQm9yZGVyKEJldmVsQm9yZGVyLlJBSVNFRCkpOworICAgICAgICBCb3ggY2VudGVyQm94ID0gQm94LmNyZWF0ZVZlcnRpY2FsQm94KCk7CisgICAgICAgIEJveCBwYWNrYWdlQm94ID0gQm94LmNyZWF0ZUhvcml6b250YWxCb3goKTsKKyAgICAgICAgcGFja2FnZUJveC5hZGQocGFja2FnZUNoZWNrKTsKKyAgICAgICAgcGFja2FnZUJveC5hZGQocGFja2FnZUZpZWxkKTsKKyAgICAgICAgY2VudGVyQm94LmFkZChwYWNrYWdlQm94KTsKKyAgICAgICAgY2VudGVyQm94LmFkZChuZXcgSlNlcGFyYXRvcigpKTsKKyAgICAgICAgY2VudGVyQm94LmFkZChjbGFzc1B1YmxpY1JhZGlvKTsKKyAgICAgICAgY2VudGVyQm94LmFkZChjbGFzc1Byb3RlY3RlZFJhZGlvKTsKKyAgICAgICAgY2VudGVyQm94LmFkZChuZXcgSlNlcGFyYXRvcigpKTsKKyAgICAgICAgY2VudGVyQm94LmFkZChtZXRob2RzUHVibGljUmFkaW8pOworICAgICAgICBjZW50ZXJCb3guYWRkKG1ldGhvZHNQcm90ZWN0ZWRSYWRpbyk7CisgICAgICAgIGNlbnRlclBhbmVsLmFkZChjZW50ZXJCb3gpOworCQkKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5hZGQodGl0bGVMYWJlbCwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5hZGQob2tQYW5lbCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5hZGQoY2VudGVyUGFuZWwsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkKKyAgICAgICAgb2tCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkJCisgICAgICAgIEJ1dHRvbkdyb3VwIGNsYXNzR3JvdXAgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKyAgICAgICAgQnV0dG9uR3JvdXAgbWV0aG9kc0dyb3VwID0gbmV3IEJ1dHRvbkdyb3VwKCk7CisgICAgICAgIGNsYXNzR3JvdXAuYWRkKGNsYXNzUHVibGljUmFkaW8pOworICAgICAgICBjbGFzc0dyb3VwLmFkZChjbGFzc1Byb3RlY3RlZFJhZGlvKTsKKyAgICAgICAgbWV0aG9kc0dyb3VwLmFkZChtZXRob2RzUHVibGljUmFkaW8pOworICAgICAgICBtZXRob2RzR3JvdXAuYWRkKG1ldGhvZHNQcm90ZWN0ZWRSYWRpbyk7CisJCQorICAgICAgICAvL3ZhbGlkYXRlVHJlZSgpOworICAgICAgICBwYWNrKCk7CisgICAgICAgIC8vc2V0TG9jYXRpb24obmV3IFBvaW50KDI1LDI1KSk7CisgICAgICAgIHNldFZpc2libGUodHJ1ZSk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkphdmFJbXBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUltcG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyZmZlOAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkphdmFJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby4qOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEubmV0Lio7CisKKy8qKgorICogVGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIGFsbCBpbXBvcnRlciBwbHVnLWluIGNsYXNzZXMuIEFzIG9mIHlldCwgdGhlcmUKKyAqIGlzIGxpdHRsZSBjb250YWluZWQgaW4gdGhpcyBjbGFzcy4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJKYXZhSW1wb3J0ZXIgZXh0ZW5kcyBSQkltcG9ydGVyIHsKKwkKKyAgICBwdWJsaWMgUkJKYXZhSW1wb3J0ZXIoU3RyaW5nIHRpdGxlLCBSQk1hbmFnZXIgcmJtLCBSQk1hbmFnZXJHVUkgZ3VpKSB7CisgICAgICAgIHN1cGVyKHRpdGxlLCByYm0sIGd1aSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIHNldHVwRmlsZUNob29zZXIoKSB7CisgICAgICAgIGNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChmLmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikgJiYgZi5nZXROYW1lKCkuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCQkJCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9qYXZhX2ZpbGVfZGVzY3JpcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIGJlZ2luSW1wb3J0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuYmVnaW5JbXBvcnQoKTsKKyAgICAgICAgTGlzdFJlc291cmNlQnVuZGxlIGJhc2VfbHJiID0gbnVsbDsKKyAgICAgICAgVVJMQ2xhc3NMb2FkZXIgdXJsTG9hZGVyID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGUgYmFzZUZpbGUgPSBnZXRDaG9zZW5GaWxlKCk7CisgICAgICAgICAgICBVUkwgYmFzZVVSTCA9IGJhc2VGaWxlLnRvVVJMKCk7CisgICAgICAgICAgICBVUkwgdXJsc1tdID0gbmV3IFVSTFsxXTsKKyAgICAgICAgICAgIHVybHNbMF0gPSBiYXNlVVJMOworICAgICAgICAgICAgdXJsTG9hZGVyID0gbmV3IFVSTENsYXNzTG9hZGVyKHVybHMpOworICAgICAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gYmFzZUZpbGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgYmFzZU5hbWUuaW5kZXhPZigiLmNsYXNzIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBDbGFzcyBiYXNlQ2xhc3MgPSB1cmxMb2FkZXIubG9hZENsYXNzKGJhc2VOYW1lKTsKKyAgICAgICAgICAgIGJhc2VfbHJiID0gKExpc3RSZXNvdXJjZUJ1bmRsZSliYXNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFJCTWFuYWdlckdVSS5kZWJ1Z01zZyhlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNlX2xyYiAhPSBudWxsKSB7CisgICAgICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gYmFzZV9scmIuZ2V0S2V5cygpOworICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0ga2V5cy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJSZXNvdXJjZSAtPiAiICsga2V5ICsgIiA9ICIgKyBiYXNlX2xyYi5nZXRTdHJpbmcoa2V5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCitjbGFzcyBteUNsYXNzTG9hZGVyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgeworICAgIHB1YmxpYyBteUNsYXNzTG9hZGVyKCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KKwkKKyAgICBwdWJsaWMgQ2xhc3MgbXlEZWZpbmVDbGFzcyhTdHJpbmcgbmFtZSwgYnl0ZSBhcnJheVtdLCBpbnQgb2ZmLCBpbnQgbGVuKSB7CisgICAgICAgIHJldHVybiBzdXBlci5kZWZpbmVDbGFzcyhuYW1lLCBhcnJheSwgb2ZmLCBsZW4pOworICAgIH0KK30KKyovCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJNYW5hZ2VyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJNYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwN2E3MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDk0NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmF4LnN3aW5nLlVJTWFuYWdlcjsKK2ltcG9ydCBqYXZheC5zd2luZy5KT3B0aW9uUGFuZTsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CisKKy8qKgorICogQSB1dGlsaXR5IGNsYXNzIHRvIGFpZCBpbiB0aGUgcHJvY2VzcyBvZiB1cGRhdGluZyB0aGUgTmF0dXJhbCBMYW5ndWFnZSBTdXBwb3J0IG9mIFRlbXB1cyBGdWdpdC4KKyAqIFRoaXMgY2xhc3Mgc2NhbnMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIE5MUyBmaWxlcyBhbmQgY2hlY2tzIHRoZSB2YXJpb3VzIGxhbmd1YWdlcyBmb3VuZCB0aGVyZQorICogZm9yIGNvbXBsZXRlbmVzcywgZHVwbGljYXRpb24gb2YgZW50cnksIGFuZCBzdGF0dXMgb2YgdHJhbnNsYXRpb24uIFRoZSBjbGFzcyBjYW4gYmUgaW5zdGFudGlhdGVkCisgKiB0aHJvdWdoIGEgY29uc3RydWN0b3IsIG9yIGl0IGNhbiBiZSBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUKKyAqIGNvbW1hbmQgbGluZSByZXN1bHRzLCBzZWUgdGhlIDxDT0RFPm1haW48L0NPREU+IG1ldGhvZC4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJNYW5hZ2VyIHsKKwkKKyAgICAvLyAqKiogREFUQSAqKioKKyAgICBwcml2YXRlIFZlY3RvciBhbGxCdW5kbGVLZXlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIFZlY3RvciBvZiBTdHJpbmdzIHdpdGggYWxsIGRlZmluZWQgTkxTIHByb3BlcnRpZXMKKyAgICBwcml2YXRlIFZlY3RvciBidW5kbGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBWZWN0b3Igb2YgTkxTYnVuZGxlcywgb25lIGZvciBlYWNoIGxhbmd1YWdlCisgICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVudFVzZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBjdXJyZW50bHkgdXNpbmcgdGhlIGVkaXRvcgorICAgIHByaXZhdGUgU3RyaW5nIGJhc2VDbGFzczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBiYXNlIGNsYXNzIG9mIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlCisgICAgcHJpdmF0ZSBGaWxlICAgY3VycmVudERpcmVjdG9yeTsKKwkKKyAgICAvLyAqKiogQ09OU1RSVUNUT1JTICoqKgorCQorICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGlzIG5vdCBwdWJsaWNseSBhdmFpbGFibGUKKyAgICBwcml2YXRlIFJCTWFuYWdlcigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIExvb2sgYW5kIEZlZWwgY2hlY2sKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxhZiA9IFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvb2thbmRmZWVsIik7CisgICAgICAgICAgICAgICAgaWYgKCFsYWYuZXF1YWxzKCIiKSkgVUlNYW5hZ2VyLnNldExvb2tBbmRGZWVsKGxhZik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyAKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmVkCisgICAgICAgICAgICB9CisJCQkKKyAgICAgICAgICAgIFJlc291cmNlcy5pbml0QnVuZGxlKCk7CisgICAgICAgICAgICBSQk1hbmFnZXJHVUkgZ3VpRnJhbWUgPSBuZXcgUkJNYW5hZ2VyR1VJKCk7CisgICAgICAgICAgICBpZiAoIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInVzZXJuYW1lIikuZXF1YWxzKCIiKSkKKyAgICAgICAgICAgICAgICBndWlGcmFtZS5zZXRVc2VyKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInVzZXJuYW1lIikpOworICAgICAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJsb2NhbGUiKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FsZVN0ciA9IFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvY2FsZSIpOworICAgICAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IFJlc291cmNlcy5nZXRMYW5ndWFnZShsb2NhbGVTdHIpOworICAgICAgICAgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gUmVzb3VyY2VzLmdldENvdW50cnkobG9jYWxlU3RyKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCA9IFJlc291cmNlcy5nZXRWYXJpYW50KGxvY2FsZVN0cik7CisgICAgICAgICAgICAgICAgaWYgKGxhbmd1YWdlID09IG51bGwgfHwgbGFuZ3VhZ2UuZXF1YWxzKCIiKSB8fCBsYW5ndWFnZS5sZW5ndGgoKSA+IDMpIGxhbmd1YWdlID0gImVuIjsKKyAgICAgICAgICAgICAgICBpZiAoY291bnRyeSA9PSBudWxsKSBjb3VudHJ5ID0gbmV3IFN0cmluZygpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYW50ID09IG51bGwpIFJlc291cmNlcy5zZXRMb2NhbGUobmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSkpOworICAgICAgICAgICAgICAgIGVsc2UgUmVzb3VyY2VzLnNldExvY2FsZShuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSZXNvdXJjZXMuaW5pdEJ1bmRsZSgpOworICAgICAgICAgICAgZ3VpRnJhbWUuaW5pdENvbXBvbmVudHMoKTsKKyAgICAgICAgICAgIGd1aUZyYW1lLnNldFZpc2libGUodHJ1ZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgY3JlYXRlcyBhbiBlbnRpcmVseSBibGFuayBSQk1hbmFnZXIgYW5kIGJhc2UgQnVuZGxlLiBPbmx5IHRoZSBiYXNlIGNsYXNzIG5hbWUgaXMgZGVmaW5lZC4KKyAgICAgKiBBbGwgb3RoZXIgcHJvcGVydGllcyBuZWVkIHRvIGJlIGRlZmluZWQuCisgICAgICovCisJCisgICAgcHVibGljIFJCTWFuYWdlcihTdHJpbmcgYmFzZUNsYXNzTmFtZSkgeworICAgICAgICBhbGxCdW5kbGVLZXlzID0gbmV3IFZlY3RvcigpOworICAgICAgICBidW5kbGVzID0gbmV3IFZlY3RvcigpOworICAgICAgICBjdXJyZW50VXNlciA9ICJVbmtub3duIjsKKyAgICAgICAgYmFzZUNsYXNzID0gYmFzZUNsYXNzTmFtZTsKKyAgICAgICAgY3VycmVudERpcmVjdG9yeSA9IG5ldyBGaWxlKCIiKTsKKwkJCisgICAgICAgIEJ1bmRsZSBtYWluQnVuZGxlID0gbmV3IEJ1bmRsZSgiIik7CisgICAgICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgZ3JvdXAKKyAgICAgICAgbWFpbkJ1bmRsZS5hZGRCdW5kbGVHcm91cCgiVW5ncm91cGVkIEl0ZW1zIiwgIlRoZXNlIGFyZSByZXNvdXJjZSBpdGVtcyB0aGF0IGhhdmUgbm90IGJlZW4gYXNzaWduZWQgYSBncm91cCIpOworICAgICAgICBidW5kbGVzLmFkZEVsZW1lbnQobWFpbkJ1bmRsZSk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGNvbnN0cnVjdG9yIGZvciBSQk1hbmFnZXIuIEl0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJvb3Qgb2YgYSByZXNvdXJjZSBidW5kbGUuCisgICAgICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGVhY2ggZmlsZSBpcyBwYXJzZWQgc2VwYXJhdGVseSBzdGFydGluZyB3aXRoIHRoZSBiYXNlIGNsYXNzIGZpbGUgKHJvb3QpLgorICAgICAqIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSBsb29rdXAga2V5cyBhcmUgcmVwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGZpbGVzLiBUaGUKKyAgICAgKiB0cmFuc2xhdGlvbiB2YWx1ZXMgaG93ZXZlciBhcmUgdHJhbnNsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIHJ1bGVzIGRlZmluZWQgaW4gamF2YS51dGlsLlByb3BlcnRpZXMuCisgICAgICogVGh1cyBpbiB0aGUga2V5LCB0aGUgdXNlciBtYXkgc2VlICdcIicgd2hlbiBpbiB0aGUgdmFsdWUgaXQgd291bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byAnIicuIFRoaXMKKyAgICAgKiB0cmFuc2xhdGlvbiBpcyByZXZlcnNlZCB3aGVuIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqIEBwYXJhbSBtYWluRmlsZSBUaGUgYmFzZSBjbGFzcyBmaWxlIG9mIHRoZSByZXNvdXJjZSBidW5kbGUgdG8gYmUgcmVhZAorICAgICAqLworCQorICAgIHB1YmxpYyBSQk1hbmFnZXIoRmlsZSBtYWluRmlsZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBpbml0KCk7CisJCQorICAgICAgICBjdXJyZW50RGlyZWN0b3J5ID0gbmV3IEZpbGUobWFpbkZpbGUuZ2V0UGFyZW50KCkpOworCQkKKyAgICAgICAgU3RyaW5nW10gZW5jb2RpbmdzOworCQkKKyAgICAgICAgLy8gSW5pdGlhaWxpemUgdGhlIHJlYWRlcnMgdG8gdGhlIG1haW4gTkxTIGZpbGUKKyAgICAgICAgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKG1haW5GaWxlKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIpOworCQkKKyAgICAgICAgLy8gTG9hZCB0aGUgamF2YSByZWFkYWJsZSB2YWx1ZXMgZnJvbSB0aGUgbWFpbiBOTFMgZmlsZTsKKyAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgcC5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0obWFpbkZpbGUpKTsKKwkJCisgICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGFuZ3VhZ2UgZmlsZXMgYW5kIHNldCB1cCB0aGUgZW5jb2RpbmcgYW5kIGRpY3Rpb25hcnkgZGF0YQorICAgICAgICBpbnQgbnVtTGFuZ3VhZ2VzID0gMTsKKyAgICAgICAgU3RyaW5nIE5MU2Jhc2VDbGFzcyA9IG51bGw7CisgICAgICAgIFN0cmluZyBOTFNwb3N0Zml4ICAgPSBudWxsOworCQkKKyAgICAgICAgaWYgKG1haW5GaWxlLmdldE5hbWUoKS5pbmRleE9mKCIuIikgPj0gMCkgeworICAgICAgICAgICAgTkxTYmFzZUNsYXNzID0gbWFpbkZpbGUuZ2V0TmFtZSgpLnN1YnN0cmluZygwLG1haW5GaWxlLmdldE5hbWUoKS5pbmRleE9mKCIuIikpOworICAgICAgICAgICAgTkxTcG9zdGZpeCA9ICIucHJvcGVydGllcyI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOTFNiYXNlQ2xhc3MgPSBtYWluRmlsZS5nZXROYW1lKCk7CisgICAgICAgICAgICBOTFNwb3N0Zml4ID0gIiI7CisgICAgICAgIH0KKwkJCisgICAgICAgIGJhc2VDbGFzcyA9IE5MU2Jhc2VDbGFzczsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmaWxlUHJlZml4ID0gbWFpbkZpbGUuZ2V0TmFtZSgpLnN1YnN0cmluZygwLG1haW5GaWxlLmdldE5hbWUoKS5sYXN0SW5kZXhPZigiLiIpKTsKKyAgICAgICAgU3RyaW5nIGZpbGVQb3N0Zml4ID0gbWFpbkZpbGUuZ2V0TmFtZSgpLnN1YnN0cmluZyhtYWluRmlsZS5nZXROYW1lKCkubGFzdEluZGV4T2YoIi4iKSxtYWluRmlsZS5nZXROYW1lKCkubGVuZ3RoKCkpOworICAgICAgICBGaWxlIHJlc0RpciA9IGN1cnJlbnREaXJlY3Rvcnk7CisgICAgICAgIGlmIChyZXNEaXIgIT0gbnVsbCAmJiByZXNEaXIuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgU3RyaW5nW10gdGVtcCA9IHJlc0Rpci5saXN0KCk7CisgICAgICAgICAgICBudW1MYW5ndWFnZXMgPSAwOworICAgICAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBsYW5ndWFnZSBmaWxlcworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRlbXBbaV0uc3RhcnRzV2l0aChOTFNiYXNlQ2xhc3MpICYmICh0ZW1wW2ldLmVuZHNXaXRoKE5MU3Bvc3RmaXgpIAorICAgICAgICAgICAgICAgICAgICB8fCB0ZW1wW2ldLmVuZHNXaXRoKE5MU3Bvc3RmaXgudG9VcHBlckNhc2UoKSkgfHwgTkxTcG9zdGZpeC5lcXVhbHMoIiIpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTdGFydHMgd2l0aCB0aGUgYmFzZSBjbGFzcyBuYW1lIGFuZCBlbmRzIGluIHByb3BlciBzdWZmaXggKGFib3ZlKQorICAgICAgICAgICAgICAgICAgICAvLyBCYXNlIG5hbWUgaXMgZm9sbG93ZWQgYnkgLiBvciBfIChiZWxvdykKKyAgICAgICAgICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJDaGFyYWN0ZXIgaXM6ICIgKyB0ZW1wW2ldLmNoYXJBdChOTFNiYXNlQ2xhc3MubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBbaV0uY2hhckF0KE5MU2Jhc2VDbGFzcy5sZW5ndGgoKSkgPT0gJy4nIHx8IHRlbXBbaV0uY2hhckF0KE5MU2Jhc2VDbGFzcy5sZW5ndGgoKSkgPT0gJ18nKQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTGFuZ3VhZ2VzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYnVuZGxlcyBhbmQgZW5jb2RpbmdzCisgICAgICAgICAgICBlbmNvZGluZ3MgPSBuZXcgU3RyaW5nW251bUxhbmd1YWdlc107CisJCQkKKyAgICAgICAgICAgIGludCBjb3VudCA9IDE7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXAubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcFtpXS5lcXVhbHMobWFpbkZpbGUuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ3NbMF0gPSAiIjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBbaV0uc3RhcnRzV2l0aChOTFNiYXNlQ2xhc3MpICYmICh0ZW1wW2ldLmVuZHNXaXRoKE5MU3Bvc3RmaXgpIAorICAgICAgICAgICAgICAgICAgICB8fCB0ZW1wW2ldLmVuZHNXaXRoKE5MU3Bvc3RmaXgudG9VcHBlckNhc2UoKSkgfHwgTkxTcG9zdGZpeC5lcXVhbHMoIiIpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGVtcFtpXS5jaGFyQXQoTkxTYmFzZUNsYXNzLmxlbmd0aCgpKSA9PSAnLicgfHwgdGVtcFtpXS5jaGFyQXQoTkxTYmFzZUNsYXNzLmxlbmd0aCgpKSA9PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nc1tjb3VudF0gPSBuZXcgU3RyaW5nKHRlbXBbaV0uc3Vic3RyaW5nKGZpbGVQcmVmaXgubGVuZ3RoKCkrMSx0ZW1wW2ldLmluZGV4T2YoZmlsZVBvc3RmaXgpKSk7CQkJCQkJCWNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBidW5kbGVzIGFuZCBlbmNvZGluZ3MgaW4gY2FzZSB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgb25seSB0aGUgbWFpbiBOTFMgZmlsZSB3aWxsIGJlIGhhbmRsZWQKKyAgICAgICAgICAgIGVuY29kaW5ncyA9IG5ldyBTdHJpbmdbbnVtTGFuZ3VhZ2VzXTsKKyAgICAgICAgICAgIGVuY29kaW5nc1swXSA9IG5ldyBTdHJpbmcoIiIpOworICAgICAgICB9IC8vIGVuZCB0aGUgY291bnQgYW5kIGluaXRpYWxpemF0aW9uCisJCQorICAgICAgICAvLyBSZWFkIGluIHRoZSBlbnRyaWVzIGZyb20gdGhlIG1haW4gZmlsZQorICAgICAgICBTdHJpbmcgbGluZTsKKyAgICAgICAgLy8gU2V0IHRoZSBkaWN0aW9uYXJ5IGZvciB0aGUgbWFpbiBmaWxlCisgICAgICAgIEJ1bmRsZSBkaWN0ID0gbmV3IEJ1bmRsZShlbmNvZGluZ3NbMF0pOworICAgICAgICBidW5kbGVzLmFkZEVsZW1lbnQoZGljdCk7CisgICAgICAgIC8vIFNldCB1cCB0aGUgZmlyc3QgZ3JvdXAgaW4gY2FzZSB0aGVyZSBhcmUgTkxTIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFzc2lnbmVkIHRvIGEgZ3JvdXAKKyAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSBuZXcgQnVuZGxlR3JvdXAoZGljdCwgIlVuZ3JvdXBlZCBJdGVtcyIpOworICAgICAgICBncm91cC5zZXRDb21tZW50KCJOTFMgSXRlbXMgd2hpY2ggd2VyZSBub3QgaW5pdGlhbGx5IGFzc2lnbmVkIHRvIGEgZ3JvdXAiKTsKKyAgICAgICAgZGljdC5hZGRCdW5kbGVHcm91cChncm91cCk7CisgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGdyb3VwLG51bGwsbnVsbCk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRlc3QgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSBmaWxlIHRoYXQgd2FzIGdlbmVyYXRlZCBieSBSQk1hbmFnZXIKKyAgICAgICAgICAgIGlmICghbGluZS50cmltKCkuZXF1YWxzKCIiKSkgY291bnQrKzsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSAxICYmICFsaW5lLnN0YXJ0c1dpdGgoIiMgQGZpbGUiKSkgeworICAgICAgICAgICAgICAgIC8vIE5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCisgICAgICAgICAgICAgICAgSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2cobnVsbCwKKyAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdCIpICsgIlxuIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3Jfc3VnZ2VzdF9pbXBvcnRfcHJvcGVydGllcyIpLAorICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdCIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJJbXByb3BlciBmb3JtYXQgZm9yIGZpbGU6ICIgKyBtYWluRmlsZS5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGNvbW1lbnRMaW5lID0gbnVsbDsKKyAgICAgICAgICAgIC8vIEdyYWIgdGV4dCBmb2xsb3dpbmcgdGhlICMgc2lnbgorICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZigiIyIpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb21tZW50TGluZSA9IGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiIyIpKzEsbGluZS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsbGluZS5pbmRleE9mKCIjIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbW1lbnRMaW5lICE9IG51bGwgJiYgY29tbWVudExpbmUudHJpbSgpLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgYW55IGluZm9ybWF0aW9uIG1hZGUgYXZhaWxhYmxlIGluIGNvbW1lbnQgJ0AnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgSGFzaHRhYmxlIGRlc2NyaXB0b3JzID0gZ2V0RGVzY3JpcHRvcnMobnVsbCxjb21tZW50TGluZSk7CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG87CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgdGFncworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlIik7IGlmIChvICE9IG51bGwpIGRpY3QubmFtZSA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZUNvbW1lbnQiKTsgIGlmIChvICE9IG51bGwpIGRpY3QuY29tbWVudCAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVMYW5ndWFnZSIpOyBpZiAobyAhPSBudWxsKSBkaWN0Lmxhbmd1YWdlID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlQ291bnRyeSIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC5jb3VudHJ5ICA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZVZhcmlhbnQiKTsgIGlmIChvICE9IG51bGwpIGRpY3QudmFyaWFudCAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVNYW5hZ2VyIik7ICBpZiAobyAhPSBudWxsKSBkaWN0Lm1hbmFnZXIgID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR3JvdXAgdGFncworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJncm91cCIpOworICAgICAgICAgICAgICAgICAgICBpZiAobyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IG5ldyBCdW5kbGVHcm91cChkaWN0LCAoU3RyaW5nKW8pOworICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnRHcm91cChncm91cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LmFkZEJ1bmRsZUdyb3VwKGdyb3VwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJncm91cENvbW1lbnQiKTsgaWYgKG8gIT0gbnVsbCkgZ3JvdXAuc2V0Q29tbWVudCgoU3RyaW5nKSBvKTsKKwkJCQkJCisgICAgICAgICAgICAgICAgICAgIC8vIEl0ZW0gdGFncworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJjb21tZW50Iik7ICAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0Q29tbWVudCgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgidHJhbnNsYXRlZCIpOyBpZiAobyAhPSBudWxsKSBpdGVtLnNldFRyYW5zbGF0ZWQoKChTdHJpbmcpIG8pLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImNyZWF0b3IiKTsgICAgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRDcmVhdG9yKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJtb2RpZmllciIpOyAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0TW9kaWZpZXIoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImNyZWF0ZWQiKTsgICAgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRDcmVhdGVkRGF0ZSgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgibW9kaWZpZWQiKTsgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldE1vZGlmaWVkRGF0ZSgoU3RyaW5nKSBvKTsKKwkJCQkJCisgICAgICAgICAgICAgICAgICAgIC8vIExvb2t1cCB0YWdzIChlLmcuIHtfI199IF9kZXNjcmlwdGlvbl8pCisgICAgICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBkZXNjcmlwdG9ycy5rZXlzKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFnID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0c1dpdGgoInsiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuaW5kZXhPZigifSIpIDwgMCkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvb2t1cCA9IHRhZy5zdWJzdHJpbmcoMSx0YWcuaW5kZXhPZigifSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldExvb2t1cHMoKS5wdXQobG9va3VwLCBkZXNjcmlwdG9ycy5nZXQodGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfSAvLyBlbmQgY2hlY2sgb2YgY29tbWVudCBsaW5lCisgICAgICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoKCkgPCAxKSBjb250aW51ZTsKKwkJCQorICAgICAgICAgICAgLy8gR3JhYiB0aGUgbmFtZSBhbmQgdmFsdWUgKHRyYW5zbGF0aW9uKSBmcm9tIHRoZSBsaW5lCisgICAgICAgICAgICBpbnQgYnJlYWtwb2ludCA9IDA7CisgICAgICAgICAgICBib29sZWFuIHN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNoYXIgYXJyYXlbXSA9IGxpbmUudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydGVkICYmIGFycmF5W2ldICE9ICcgJyAmJiBhcnJheVtpXSAhPSAnXHQnKSBzdGFydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRlZCAmJiAoYXJyYXlbaV0gPT0gJz0nIHx8IGFycmF5W2ldID09ICc6JyB8fCBhcnJheVtpXSA9PSAnICcgfHwgYXJyYXlbaV0gPT0gJ1x0JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBTdHJpbmcudmFsdWVPZihhcnJheSwwLGJyZWFrcG9pbnQpOworCQkJCisgICAgICAgICAgICBpdGVtLnNldEtleShrZXkpOworICAgICAgICAgICAgU3RyaW5nIHRyYW5zbGF0aW9uID0gcC5nZXRQcm9wZXJ0eShrZXkpOworICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uID09IG51bGwgfHwgdHJhbnNsYXRpb24uZXF1YWxzKCIiKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRyYW5zbGF0aW9uKGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiPSIpKzEsbGluZS5sZW5ndGgoKSkudHJpbSgpKTsKKyAgICAgICAgICAgIGVsc2UgaXRlbS5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbik7CisJCQkKKyAgICAgICAgICAgIGRpY3QuYWRkQnVuZGxlSXRlbShpdGVtKTsKKyAgICAgICAgICAgIGl0ZW0gPSBuZXcgQnVuZGxlSXRlbShncm91cCxudWxsLG51bGwpOworICAgICAgICB9IC8vIGVuZCB3aGlsZSAtIG1haW4gTkxTIGZpbGUKKwkJCisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgcGFyc2VkIHRoZSBlbnRpcmUgbWFpbiBsYW5ndWFnZSBmaWxlLCBwb3B1bGF0ZSB0aGUgYWxsTkxTS2V5IHNldCB3aXRoIHRoZSBkaWN0aW9uYXJ5IGtleXMKKyAgICAgICAgYWxsQnVuZGxlS2V5cyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9ICgoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KDApKS5hbGxJdGVtcy5rZXlzKCk7CisgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBhbGxCdW5kbGVLZXlzLmFkZEVsZW1lbnQoa2V5cy5uZXh0RWxlbWVudCgpKTsKKyAgICAgICAgfQorCQkKKyAgICAgICAgLy8gTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZSBvdGhlciBsYW5ndWFnZXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBlbmNvZGluZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChlbmNvZGluZ3NbaV0uZXF1YWxzKCJrciIpKSBjb250aW51ZTsgLy8gSSBjYW4ndCBoYW5kbGUgZG91YmxlIGJ5dGUgY2hhcmFjdGVyIHNldHMgeWV0CisgICAgICAgICAgICAvLyBUcnkgdG8gb2J0YWluIHRoZSBuZXcgZmlsZQorICAgICAgICAgICAgRmlsZSB0ZW1wRmlsZSA9IG5ldyBGaWxlKHJlc0RpciwgTkxTYmFzZUNsYXNzICsgIl8iICsgZW5jb2RpbmdzW2ldICsgTkxTcG9zdGZpeCk7CisgICAgICAgICAgICBmciA9IG5ldyBGaWxlUmVhZGVyKHRlbXBGaWxlKTsKKyAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsKKwkJCQorICAgICAgICAgICAgLy8gVHJ5IHRvIG9idGFpbiB0aGUgamF2YSByZWFkYWJsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlsZQorICAgICAgICAgICAgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBwLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbSh0ZW1wRmlsZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZXQgdGhlIGRpY3Rpb25hcnkgZm9yIHRoZSBtYWluIGZpbGUKKyAgICAgICAgICAgIGRpY3QgPSBuZXcgQnVuZGxlKGVuY29kaW5nc1tpXSk7CisgICAgICAgICAgICBidW5kbGVzLmFkZEVsZW1lbnQoZGljdCk7CisgICAgICAgICAgICAvLyBTZXQgdXAgdGhlIGZpcnN0IGdyb3VwIGluIGNhc2UgdGhlcmUgYXJlIE5MUyBpdGVtcyB3aGljaCB3ZXJlIG5vdCBhc3NpZ25lZCB0byBhIGdyb3VwCisgICAgICAgICAgICBncm91cCA9IG5ldyBCdW5kbGVHcm91cChkaWN0LCAiVW5ncm91cGVkIEl0ZW1zIik7CisgICAgICAgICAgICBkaWN0LmFkZEJ1bmRsZUdyb3VwKGdyb3VwKTsKKyAgICAgICAgICAgIGdyb3VwLnNldENvbW1lbnQoIk5MUyBJdGVtcyB3aGljaCB3ZXJlIG5vdCBpbml0aWFsbHkgYXNzaWduZWQgdG8gYSBncm91cCIpOworICAgICAgICAgICAgaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGdyb3VwLG51bGwsbnVsbCk7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHJlc3Qgb2YgdGhlIGdyb3VwcworICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjb21tZW50TGluZSA9IG51bGw7CisgICAgICAgICAgICAgICAgLy8gR3JhYiB0aGUgdGV4dCBmb2xsb3dpbmcgdGhlICMgc2lnbgorICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoIiMiKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRMaW5lID0gbGluZS5zdWJzdHJpbmcobGluZS5pbmRleE9mKCIjIikrMSxsaW5lLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsbGluZS5pbmRleE9mKCIjIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29tbWVudExpbmUgIT0gbnVsbCAmJiBjb21tZW50TGluZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgYW55IGluZm9ybWF0aW9uIG1hZGUgYXZhaWxhYmxlIGluIGNvbW1lbnQgJ0AnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIEhhc2h0YWJsZSBkZXNjcmlwdG9ycyA9IGdldERlc2NyaXB0b3JzKG51bGwsY29tbWVudExpbmUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG87CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIHRhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGUiKTsgaWYgKG8gIT0gbnVsbCkgZGljdC5uYW1lID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZUNvbW1lbnQiKTsgIGlmIChvICE9IG51bGwpIGRpY3QuY29tbWVudCAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlTGFuZ3VhZ2UiKTsgaWYgKG8gIT0gbnVsbCkgZGljdC5sYW5ndWFnZSA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVDb3VudHJ5Iik7ICBpZiAobyAhPSBudWxsKSBkaWN0LmNvdW50cnkgID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZVZhcmlhbnQiKTsgIGlmIChvICE9IG51bGwpIGRpY3QudmFyaWFudCAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlTWFuYWdlciIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC5tYW5hZ2VyICA9ICgoU3RyaW5nKSBvKTsKKwkJCQkJCQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3JvdXAgdGFncworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZ3JvdXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IG5ldyBCdW5kbGVHcm91cChkaWN0LCAoU3RyaW5nKW8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0UGFyZW50R3JvdXAoZ3JvdXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QuYWRkQnVuZGxlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZ3JvdXBDb21tZW50Iik7IGlmIChvICE9IG51bGwpIGdyb3VwLnNldENvbW1lbnQoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0ZW0gdGFncworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiY29tbWVudCIpOyAgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldENvbW1lbnQoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJ0cmFuc2xhdGVkIik7IGlmIChvICE9IG51bGwpIGl0ZW0uc2V0VHJhbnNsYXRlZCgoKFN0cmluZykgbykuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImNyZWF0b3IiKTsgICAgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRDcmVhdG9yKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgibW9kaWZpZXIiKTsgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldE1vZGlmaWVyKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiY3JlYXRlZCIpOyAgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldENyZWF0ZWREYXRlKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgibW9kaWZpZWQiKTsgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldE1vZGlmaWVkRGF0ZSgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRhZ3MgKGUuZy4ge18jX30gX2Rlc2NyaXB0aW9uXykKKyAgICAgICAgICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGRlc2NLZXlzID0gZGVzY3JpcHRvcnMua2V5cygpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRlc2NLZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZyA9IChTdHJpbmcpZGVzY0tleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0c1dpdGgoInsiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLmluZGV4T2YoIn0iKSA8IDApIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9va3VwID0gdGFnLnN1YnN0cmluZygxLHRhZy5pbmRleE9mKCJ9IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldExvb2t1cHMoKS5wdXQobG9va3VwLCBkZXNjcmlwdG9ycy5nZXQodGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CQorICAgICAgICAgICAgICAgIH0gLy8gZW5kIGNoZWNrIG9mIGNvbW1lbnQgbGluZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGgoKSA8IDEpIGNvbnRpbnVlOworCQkJCisgICAgICAgICAgICAgICAgLy8gR3JhYiB0aGUgbmFtZSBhbmQgdmFsdWUgKHRyYW5zbGF0aW9uKSBmcm9tIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgaW50IGJyZWFrcG9pbnQgPSAwOworICAgICAgICAgICAgICAgIGJvb2xlYW4gc3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNoYXIgYXJyYXlbXSA9IGxpbmUudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBhcnJheS5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgYXJyYXlbal0gIT0gJyAnICYmIGFycmF5W2pdICE9ICdcdCcpIHN0YXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRlZCAmJiAoYXJyYXlbal0gPT0gJz0nIHx8IGFycmF5W2pdID09ICc6JyB8fCBhcnJheVtqXSA9PSAnICcgfHwgYXJyYXlbal0gPT0gJ1x0JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IFN0cmluZy52YWx1ZU9mKGFycmF5LDAsYnJlYWtwb2ludCk7CisgICAgICAgICAgICAgICAgaXRlbS5zZXRLZXkoa2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdHJhbnNsYXRpb24gPSBwLmdldFByb3BlcnR5KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uID09IG51bGwgfHwgdHJhbnNsYXRpb24uZXF1YWxzKCIiKSkKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRUcmFuc2xhdGlvbihsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoIj0iKSsxLGxpbmUubGVuZ3RoKCkpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpdGVtLnNldFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uKTsKKwkJCQkKKyAgICAgICAgICAgICAgICBkaWN0LmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgICAgICAgICAgaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGdyb3VwLG51bGwsbnVsbCk7CisgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZSAtIG5leHQgbGluZQorICAgICAgICB9IC8vIGVuZCBmb3IgbG9vb3AgdGhyb3VnaCBsYW5ndWFnZXMKKyAgICAgICAgLy8gQWRkIHRoaXMgb3BlbmVkIGZpbGUgdG8gb3VyIHJlY2VudCBmaWxlcworICAgICAgICBQcmVmZXJlbmNlcy5hZGRSZWNlbnRGaWxlUHJlZmVyZW5jZShtYWluRmlsZS5nZXROYW1lKCksIG1haW5GaWxlLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICB9IC8vIGVuZCBSQk1hbmFnZXIoKQorCQorICAgIC8vICoqKiBNRVRIT0RTICoqKgorCQorICAgIC8qKgorICAgICAqIE1haW4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdXNlciBzcGVjaWZpZWQgYSBwYXRoCisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDEpIHsgCisgICAgICAgICAgICBuZXcgUkJNYW5hZ2VyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IC8vIG1haW4KKwkKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gYmFzZUNsYXNzOyB9CisJCisgICAgLyoqCisgICAgICogV3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIHRoZSBvdXRwdXQgc3RyZWFtCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgd3JpdGVUb0ZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgRmlsZSBvdXRwdXRGaWxlID0gbmV3IEZpbGUoY3VycmVudERpcmVjdG9yeSwgYmFzZUNsYXNzICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJ1bmRsZS5lbmNvZGluZyA9PSBudWxsIHx8IGJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoIiIpKSA/ICIiIDogIl8iICsgYnVuZGxlLmVuY29kaW5nKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0aWVzIik7CisgICAgICAgICAgICBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIob3V0cHV0RmlsZSk7CisgICAgICAgICAgICBidW5kbGUud3JpdGVDb250ZW50cyhmdyk7CisgICAgICAgICAgICBmdy5mbHVzaCgpOworICAgICAgICAgICAgZncuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbiBjYXNlIHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIGJ1bmRsZSBvciB0aGUgbG9jYXRpb24gaGFzIGNoYW5nZWQgcmVjZW50bHksIHVwZGF0ZSB0aGUgcmVjZW50IGZpbGVzLCBwcmVmZXJlbmNlCisgICAgICAgIFByZWZlcmVuY2VzLmFkZFJlY2VudEZpbGVQcmVmZXJlbmNlKGJhc2VDbGFzcyArICIucHJvcGVydGllcyIsIGN1cnJlbnREaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkgKyBGaWxlLnNlcGFyYXRvciArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VDbGFzcyArICIucHJvcGVydGllcyIpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHJlbW92ZXMgYSByZXNvdXJjZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcm1hbmVudGx5CisgICAgICogZXJhc2UgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzIGF0IHRoaXMgZW5jb2RpbmcsIGhvd2V2ZXIgYW55IGNoYW5nZXMgb3Igc2F2ZXMgdGhhdCB0YWtlCisgICAgICogcGxhY2Ugb25jZSB0aGlzIGZpbGUgaGFzIGJlZW4gcmVtb3ZlZCB3aWxsIG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhpcyBoaWRkZW4gZmlsZS4gVG8gcmVzdG9yZSB0aGUgcmVzb3VyY2UsIAorICAgICAqIHRoZSBidW5kbGUgd2lsbCBoYXZlIHRvIGJlIHJlY3JlYXRlZC4gKFRoaXMgbGFzdCBwb2ludCBtYXkgY2hhbmdlKQorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIGhpZGVSZXNvdXJjZShTdHJpbmcgZW5jb2RpbmcpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAoYnVuZGxlLmVuY29kaW5nLmVxdWFscyhlbmNvZGluZykpIHsKKyAgICAgICAgICAgICAgICBidW5kbGVzLnJlbW92ZUVsZW1lbnQoYnVuZGxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBFcmFzZXMgcGVybWFuZW50bHkgb25lIG9mIHRoZSByZXNvdXJjZSBmaWxlcy4gQmUgY2FyZWZ1bCBhYm91dCBjYWxsaW5nIHRoaXMgbWV0aG9kIHRoZXJlIGlzIG5vdGhpbmcgeW91IGNhbiBkbworICAgICAqIG9uY2UgYSBmaWxlIGlzIGVyYXNlZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCBlcmFzZUZpbGUoU3RyaW5nIGVuY29kaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKCEoYnVuZGxlLmVuY29kaW5nLmVxdWFscyhlbmNvZGluZykpKSBjb250aW51ZTsKKyAgICAgICAgICAgIEZpbGUgb3V0cHV0RmlsZSA9IG5ldyBGaWxlKGN1cnJlbnREaXJlY3RvcnksIGJhc2VDbGFzcyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChidW5kbGUuZW5jb2RpbmcgPT0gbnVsbCB8fCBidW5kbGUuZW5jb2RpbmcuZXF1YWxzKCIiKSkgPyAiIiA6ICJfIiArIGJ1bmRsZS5lbmNvZGluZykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIucHJvcGVydGllcyIpOworICAgICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gb3V0cHV0RmlsZS5kZWxldGUoKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgdGhyb3cgbmV3IElPRXhjZXB0aW9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZGVsZXRpb25fbm90X3Bvc3NpYmxlIikpOworICAgICAgICAgICAgaGlkZVJlc291cmNlKGVuY29kaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFdyaXRlcyBvbmx5IG9uZSBvZiB0aGUgcmVzb3VyY2UgZmlsZXMgdG8gdGhlIGZpbGUgc3lzdGVtLiBUaGlzIGZpbGUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXIKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvRmlsZShTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAoYnVuZGxlLmVuY29kaW5nLmVxdWFscyhlbmNvZGluZykgfHwgKGk9PTAgJiYgZW5jb2RpbmcuZXF1YWxzKCIiKSkpIHsKKyAgICAgICAgICAgICAgICBGaWxlIG91dHB1dEZpbGUgPSBuZXcgRmlsZShjdXJyZW50RGlyZWN0b3J5LCBiYXNlQ2xhc3MgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJ1bmRsZS5lbmNvZGluZyA9PSBudWxsIHx8IGJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoIiIpKSA/ICIiIDogIl8iICsgYnVuZGxlLmVuY29kaW5nKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIucHJvcGVydGllcyIpOworICAgICAgICAgICAgICAgIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihvdXRwdXRGaWxlKTsKKyAgICAgICAgICAgICAgICBidW5kbGUud3JpdGVDb250ZW50cyhmdyk7CisgICAgICAgICAgICAgICAgZncuZmx1c2goKTsKKyAgICAgICAgICAgICAgICBmdy5jbG9zZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEluIGNhc2UgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgYnVuZGxlIG9yIHRoZSBsb2NhdGlvbiBoYXMgY2hhbmdlZCByZWNlbnRseSwgdXBkYXRlIHRoZSByZWNlbnQgZmlsZXMsIHByZWZlcmVuY2UKKyAgICAgICAgUHJlZmVyZW5jZXMuYWRkUmVjZW50RmlsZVByZWZlcmVuY2UoYmFzZUNsYXNzICsgIi5wcm9wZXJ0aWVzIiwgY3VycmVudERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUNsYXNzICsgIi5wcm9wZXJ0aWVzIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBCdW5kbGVJdGVtIGFuZCBzb21lIHByb3BlcnRpZXMgdG8gY2hhbmdlIGZvciB0aGF0IGl0ZW0sIHRoaXMgbWV0aG9kIGZpcnN0IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIHBhc3NlZAorICAgICAqIGl0ZW0gaXMgdmFsaWQgYW5kIGlmIGl0IGlzLCB0aGUgcHJvcGVydGllcyBvZiB0aGF0IGl0ZW0gYXJlIGNoYW5nZWQgdG8gcmVmbGVjdCB0aG9zZSBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyB0byB0aGlzCisgICAgICogbWV0aG9kLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgQnVuZGxlSXRlbSB3YXMgdmFsaWQgYW5kIHVwZGF0ZWFibGUsIGZhbHNlIGlmIG90aGVyd2lzZSAoaW4gdGhpcyBjYXNlIG5vIGNoYW5nZXMgd2VyZSBtYWRlKS4KKyAgICAgKi8KKyAgICAgCisgICAgcHVibGljIGJvb2xlYW4gZWRpdEl0ZW0oQnVuZGxlSXRlbSBpdGVtLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgZ3JvdXBOYW1lLCBTdHJpbmcgY29tbWVudCwgSGFzaHRhYmxlIGxvb2t1cHMpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmVxdWFscygiIikgfHwgZ3JvdXBOYW1lID09IG51bGwgfHwgZ3JvdXBOYW1lLmVxdWFscygiIikgfHwgaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgICAgIFN0cmluZyBvbGROYW1lID0gaXRlbS5nZXRLZXkoKTsKKyAgICAgICAgU3RyaW5nIG9sZENvbW1lbnQgPSBpdGVtLmdldENvbW1lbnQoKTsKKyAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaXRlbS5nZXRUcmFuc2xhdGlvbigpOworICAgICAgICAvL1N0cmluZyBvbGRHcm91cE5hbWUgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0TmFtZSgpOworICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIGJ1bmRsZXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gb2xkSXRlbSA9IChCdW5kbGVJdGVtKWJ1bmRsZS5hbGxJdGVtcy5nZXQob2xkTmFtZSk7CisgICAgICAgICAgICBpZiAob2xkSXRlbSA9PSBudWxsKSBicmVhazsKKyAgICAgICAgICAgIGlmICghb2xkTmFtZS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBBIG5ldyBrZXkKKyAgICAgICAgICAgICAgICBvbGRJdGVtLnNldEtleShuYW1lKTsKKyAgICAgICAgICAgICAgICBidW5kbGUuYWxsSXRlbXMucmVtb3ZlKG9sZEl0ZW0pOworICAgICAgICAgICAgICAgIGJ1bmRsZS5hbGxJdGVtcy5wdXQob2xkSXRlbS5nZXRLZXkoKSwgb2xkSXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2xkSXRlbS5nZXRDb21tZW50KCkgPT0gbnVsbCB8fCBvbGRJdGVtLmdldENvbW1lbnQoKS5lcXVhbHMob2xkQ29tbWVudCkpIG9sZEl0ZW0uc2V0Q29tbWVudChjb21tZW50KTsKKyAgICAgICAgICAgIGlmIChvbGRJdGVtLmdldFRyYW5zbGF0aW9uKCkuZXF1YWxzKG9sZFZhbHVlKSkgb2xkSXRlbS5zZXRUcmFuc2xhdGlvbih2YWx1ZSk7CisgICAgICAgICAgICBvbGRJdGVtLnNldExvb2t1cHMobG9va3Vwcyk7CisgICAgICAgICAgICBpZiAoIW9sZEl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBBIG5ldyBncm91cAorICAgICAgICAgICAgICAgIG9sZEl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5yZW1vdmVCdW5kbGVJdGVtKG9sZEl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGJnID0gYnVuZGxlLmdldEJ1bmRsZUdyb3VwKGdyb3VwTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGJnID09IG51bGwpIGJnID0gYnVuZGxlLmdldFVuZ3JvdXBlZEdyb3VwKCk7CisgICAgICAgICAgICAgICAgb2xkSXRlbS5zZXRQYXJlbnRHcm91cChiZyk7CisgICAgICAgICAgICAgICAgYmcuYWRkQnVuZGxlSXRlbShvbGRJdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgbmV3IGl0ZW0gaW4gZWFjaCBvZiB0aGUgbGFuZ3VhZ2UgZmlsZXMuIFRoZSBtZXRob2QgZmlyc3QgY2hlY2tzIHRoZSBiYXNlIFJlc291cmNlIEJ1bmRsZQorICAgICAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpdGVtIG5hbWUgZG9lcyBub3QgYWxsIHJlYWR5IGV4aXN0LiBJZiBpdCBkb2VzIGV4aXN0IHRoZSBpdGVtIGlzIG5vdCBjcmVhdGVkLgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBpdGVtCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgaXRlbSBmb3IgdGhlIGJhc2UgY2xhc3MKKyAgICAgKiBAcGFyYW0gZ3JvdXBOYW1lIFRoZSBncm91cCBuYW1lLCBzaG91bGQgYWxsIHJlYWR5IGV4aXN0IGluIHRoZSBiYXNlIGNsYXNzCisgICAgICogQHBhcmFtIGNvbW1lbnQgQW4gb3B0aW9uYWwgY29tbWVudCB0byBiZSBhZGRlZCB0byB0aGUgaXRlbSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHJldHVybiBBbiBlcnJvciByZXNwb25zZS4gSWYgdGhlIGNyZWF0aW9uIHdhcyBzdWNjZXNzZnVsIDxDT0RFPnRydWU8L0NPREU+IGlzIHJldHVybmVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgPENPREU+ZmFsc2U8L0NPREU+IGlzIHJldHVybmVkLgorICAgICAqLworCQorICAgIHB1YmxpYyBib29sZWFuIGNyZWF0ZUl0ZW0oU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGdyb3VwTmFtZSwgU3RyaW5nIGNvbW1lbnQsIEhhc2h0YWJsZSBsb29rdXBzKSB7CisgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5lcXVhbHMoIiIpIHx8IGdyb3VwTmFtZSA9PSBudWxsIHx8IGdyb3VwTmFtZS5lcXVhbHMoIiIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIEJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmZpcnN0RWxlbWVudCgpOworICAgICAgICBCdW5kbGVHcm91cCBtYWluR3JvdXAgPSBudWxsOworICAgICAgICBpZiAobWFpbkJ1bmRsZS5hbGxJdGVtcy5jb250YWluc0tleShuYW1lKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtYWluQnVuZGxlLmdldEdyb3VwQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGVHcm91cCBiZyA9IG1haW5CdW5kbGUuZ2V0QnVuZGxlR3JvdXAoaSk7CisgICAgICAgICAgICBpZiAoYmcuZ2V0TmFtZSgpLmVxdWFscyhncm91cE5hbWUpKSB7bWFpbkdyb3VwID0gYmc7IGJyZWFrO30KKyAgICAgICAgfQorICAgICAgICBpZiAobWFpbkdyb3VwID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQWRkIHRvIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIEJ1bmRsZUl0ZW0gbWFpbkl0ZW0gPSBuZXcgQnVuZGxlSXRlbShtYWluR3JvdXAsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgbWFpbkl0ZW0uc2V0VHJhbnNsYXRlZCh0cnVlKTsKKyAgICAgICAgbWFpbkl0ZW0uc2V0Q3JlYXRvcihjdXJyZW50VXNlcik7CisgICAgICAgIG1haW5JdGVtLnNldE1vZGlmaWVyKGN1cnJlbnRVc2VyKTsKKyAgICAgICAgbWFpbkl0ZW0uc2V0Q29tbWVudChjb21tZW50KTsKKyAgICAgICAgbWFpbkJ1bmRsZS5hbGxJdGVtcy5wdXQobmFtZSwgbWFpbkl0ZW0pOworICAgICAgICBtYWluR3JvdXAuYWRkQnVuZGxlSXRlbShtYWluSXRlbSk7CisgICAgICAgIGlmIChsb29rdXBzICE9IG51bGwpIG1haW5JdGVtLnNldExvb2t1cHMobG9va3Vwcyk7CisgICAgICAgIC8vIEFkZCB0byB0aGUgcmVzdCBvZiB0aGUgYnVuZGxlcworICAgICAgICBmb3IgKGludCBpPTE7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGdyb3VwCisgICAgICAgICAgICBCdW5kbGVHcm91cCBncm91cCA9IG51bGw7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBidW5kbGUuZ2V0R3JvdXBDb3VudCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGVHcm91cCBiZyA9IGJ1bmRsZS5nZXRCdW5kbGVHcm91cChqKTsKKyAgICAgICAgICAgICAgICBpZiAoYmcuZ2V0TmFtZSgpLmVxdWFscyhncm91cE5hbWUpKSB7Z3JvdXAgPSBiZzsgYnJlYWs7fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGdyb3VwID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBncm91cCA9IG5ldyBCdW5kbGVHcm91cChidW5kbGUsIGdyb3VwTmFtZSk7CisgICAgICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUdyb3VwKGdyb3VwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGdyb3VwLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBpdGVtLnNldENyZWF0b3IoY3VycmVudFVzZXIpOworICAgICAgICAgICAgaXRlbS5zZXRNb2RpZmllcihjdXJyZW50VXNlcik7CisgICAgICAgICAgICBpdGVtLnNldENvbW1lbnQoY29tbWVudCk7CisgICAgICAgICAgICBpZiAobG9va3VwcyAhPSBudWxsKSBpdGVtLnNldExvb2t1cHMobG9va3Vwcyk7CisgICAgICAgICAgICBidW5kbGUuYWxsSXRlbXMucHV0KG5hbWUsIGl0ZW0pOworICAgICAgICAgICAgYnVuZGxlLmFkZFVudHJhbnNsYXRlZEl0ZW0oaXRlbSk7CisgICAgICAgICAgICBncm91cC5hZGRCdW5kbGVJdGVtKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBjcmVhdGUgYSBuZXcgZ3JvdXAgaW4gZWFjaCBvZiB0aGUgbGFuZ3VhZ2UgZmlsZXMuIFRoZSBtZXRob2QgZmlyc3QgY2hlY2tzIHRoZSBiYXNlIFJlc291cmNlIEJ1bmRsZQorICAgICAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBncm91cCBuYW1lIGRvZXMgbm90IGFsbCByZWFkeSBleGlzdC4gSWYgaXQgZG9lcyBleGlzdCB0aGUgZ3JvdXAgaXMgbm90IGNyZWF0ZWQuCisgICAgICogQHBhcmFtIGdyb3VwTmFtZSBUaGUgdW5pcXVlIGdyb3VwIG5hbWUgdG8gYmUgY3JlYXRlZAorICAgICAqIEBwYXJhbSBncm91cENvbW1lbnQgQW4gb3B0aW9uYWwgY29tbWVudCB0byBiZSBhZGRlZCB0byB0aGUgZ3JvdXAsIGNhbiBiZSA8Q09ERT5udWxsPC9DT0RFPgorICAgICAqIEByZXR1cm4gQW4gZXJyb3IgcmVzcG9uc2UuIElmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCA8Q09ERT50cnVlPC9DT0RFPiBpcyByZXR1cm5lZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIDxDT0RFPmZhbHNlPC9DT0RFPiBpcyByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjcmVhdGVHcm91cChTdHJpbmcgZ3JvdXBOYW1lLCBTdHJpbmcgZ3JvdXBDb21tZW50KSB7CisgICAgICAgIGlmIChncm91cE5hbWUgPT0gbnVsbCB8fCBncm91cE5hbWUuZXF1YWxzKCIiKSkKKyAgICAgICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBncm91cCBleGlzdHMKKyAgICAgICAgQnVuZGxlIG1haW5CdW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZmlyc3RFbGVtZW50KCk7CisgICAgICAgIGlmIChtYWluQnVuZGxlLmhhc0dyb3VwKGdyb3VwTmFtZSkpCisgICAgICAgIAlyZXR1cm4gZmFsc2U7CisJCQorICAgICAgICAvLyBDcmVhdGUgdGhlIGdyb3VwCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgQnVuZGxlR3JvdXAgYmcgPSBuZXcgQnVuZGxlR3JvdXAoYnVuZGxlLCBncm91cE5hbWUpOworICAgICAgICAgICAgaWYgKGdyb3VwQ29tbWVudCAhPSBudWxsKQorICAgICAgICAgICAgCWJnLnNldENvbW1lbnQoZ3JvdXBDb21tZW50KTsKKyAgICAgICAgICAgIGJ1bmRsZS5hZGRCdW5kbGVHcm91cChiZyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSBncm91cCBhbmQgYWxsIG9mIHRoZSBpdGVtcyB3aXRoaW4gdGhhdCBncm91cCBmcm9tIHRoZSB2YXJpb3VzCisgICAgICogUmVzb3VyY2UgQnVuZGxlcyBrbm93biB0byB0aGUgc3lzdGVtLiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBncm91cCBmcm9tCisgICAgICogdGhlIHByb3RlY3RlZCB2ZWN0b3Igb2YgZ3JvdXBzLCB0aGVuIHJlbW92ZXMgYWxsIGl0ZW1zIGluIHRoYXQgZ3JvdXAgZnJvbQorICAgICAqIHRoZSBwcm90ZWN0ZWQgdmVjdG9yIG9mIHVudHJhbnNsYXRlZCBpdGVtcywgYW5kIHRoZSBwcm90ZWN0ZWQgaGFzaHRhYmxlIG9mCisgICAgICogYWxsIGl0ZW1zLgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUdyb3VwKFN0cmluZyBncm91cE5hbWUpIHsKKyAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIGJ1bmRsZXM7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgYnVuZGxlLnJlbW92ZUdyb3VwKGdyb3VwTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmVtb3ZlIHJlc291cmNlIGl0ZW1zIG9mIHRoZSBnaXZlbiBuYW1lIGZyb20gZWFjaCBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0aGF0IHRoZSBzeXN0ZW0KKyAgICAgKiBrbm93cyBhYm91dC4gVGhpcyB3b3JrcyBieSBmaXJzdCByZW1vdmluZyB0aGUgaXRlbSBmcm9tIHRoZSBwcm90ZWN0ZWQgdmVjdG9yIG9mIHRyYW5zbGF0ZWQKKyAgICAgKiBpdGVtcywgaWYgaXQgaXMgdGhlcmUsIGFuZCB0aGVuIHJlbW92aW5nIGl0IGZyb20gdGhlIHRoZSBoYXNodGFibGUgb2YgYWxsIGl0ZW1zLCBhbmQgdGhlbgorICAgICAqIHJlbW92aW5nIGl0IGZyb20gaXRzIHJlc3BlY3RpdmUgZ3JvdXAuIAorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oU3RyaW5nIGl0ZW1OYW1lKSB7CisgICAgICAgIGlmIChpdGVtTmFtZSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIGJ1bmRsZXM7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCB1bnRyYW5zbGF0ZWQgaXRlbXMKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgYnVuZGxlLnJlbW92ZVVudHJhbnNsYXRlZEl0ZW0oaXRlbU5hbWUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgSXRlbXMKKyAgICAgICAgICAgIEVudW1lcmF0aW9uIGl0ZW1zID0gYnVuZGxlLmFsbEl0ZW1zLmVsZW1lbnRzKCk7CisgICAgICAgICAgICB3aGlsZShpdGVtcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0S2V5KCkuZXF1YWxzKGl0ZW1OYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBidW5kbGUuYWxsSXRlbXMucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBpdGVtLmdldFBhcmVudEdyb3VwKCkucmVtb3ZlQnVuZGxlSXRlbShpdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogTG9va3MgdGhyb3VnaCB0aGUgcmVzb3VyY2VzIGNvbnRhaW5lZCBpbiB0aGUgYnVuZGxlIGZvciBhIHJlc291cmNlIG9mIHRoZSBnaXZlbiBlbmNvZGluZy4gTm90ZSB0aGF0IHRoaXMKKyAgICAgKiBzZWFyY2ggaXMgY2FzZSBzZW5zaXRpdmUuCisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBlbmNvZGluZyBleGlzdHMgYXMgb25lIG9mIHRoZSByZXNvdXJjZSBmaWxlcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisJCisgICAgcHVibGljIGJvb2xlYW4gaGFzUmVzb3VyY2UoU3RyaW5nIGVuY29kaW5nKSB7CisgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZW5jb2RpbmcgZXhpc3RzCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBiID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChiLmVuY29kaW5nLmVxdWFscyhlbmNvZGluZykpIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgbmV3IHJlc291cmNlIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gZW5jb2RpbmcuIFRoZSBtZXRob2QgZmlyc3QgY2hlY2tzIHRoZSBiYXNlIFJlc291cmNlIEJ1bmRsZQorICAgICAqIHRvIG1ha2Ugc3VyZSB0aGF0IGVuY29kaW5nIGRvZXMgbm90IGFsbCByZWFkeSBleGlzdC4gSWYgaXQgZG9lcyBleGlzdCB0aGUgcmVzb3VyY2UgZmlsZSBpcyBub3QgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gdGl0bGUgQW4gb3B0aW9uYWwsIHF1aWNrIHRpdGxlIGZvciB0aGUgZmlsZSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHBhcmFtIGNvbW1lbnQgQW4gb3B0aW9uYWwgY29tbWVudCB0byBiZSBhZGRlZCB0byB0aGUgcmVzb3VyY2UsIGNhbiBiZSA8Q09ERT5udWxsPC9DT0RFPgorICAgICAqIEBwYXJhbSBtYW5hZ2VyIFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoaXMgcmVzb3VyY2UsIGNhbiBiZSA8Q09ERT5udWxsPC9DT0RFPgorICAgICAqIEBwYXJhbSBlbmNvZGluZyBUaGUgcHJvcGVyIGVuY29kaW5nIGZvciB0aGUgcmVzb3VyY2UuIE11c3QgYmUgb2YgZm9ybSAnbGFuZ3VhZ2UnLCAnbGFuZ3VhZ2VfY291bnRyeScsIG9yICdsYW5ndWFnZV9jb3VudHJ5X3ZhcmlhbnQnCisgICAgICogQHBhcmFtIGxhbmd1YWdlIEEgbW9yZSBmb3JtYWwgbmFtZSBmb3IgdGhlIGxhbmd1YWdlIChlLmcuICdFbmdsaXNoJywgJ0RldXRzY2gnLCBldGMuKSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHBhcmFtIGNvdW50cnkgQSBtb3JlIGZvcm1hbCBuYW1lIGZvciB0aGUgY291bnRyeSBkZXNjcmliZWQgYnkgdGhlIHJlc291cmNlLCBjYW4gYmUgPENPREU+bnVsbDwvQ09ERT4KKyAgICAgKiBAcGFyYW0gdmFyaWFudCBBIG1vcmUgZm9ybWFsIG5hbWUgZm9yIHRoZSB2YXJpYW50IGRlc2NyaWJlZCBieSB0aGUgcmVzb3VyY2UsIGNhbiBiZSA8Q09ERT5udWxsPC9DT0RFPgorICAgICAqIEBwYXJhbSBjb3B5VmFsdWVzIEFuIGluZGljYXRpb24gb2Ygd2V0aGVyIG9yIG5vdCB0byBwb3B1bGF0ZSB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUgaXRlbXMgaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgKiBAcmV0dXJuIEFuIGVycm9yIHJlc3BvbnNlLiBJZiB0aGUgY3JlYXRpb24gd2FzIHN1Y2Nlc3NmdWwgPENPREU+dHJ1ZTwvQ09ERT4gaXMgcmV0dXJuZWQsIGlmIHRoZXJlIHdhcyBhbiBlcnJvciA8Q09ERT5mYWxzZTwvQ09ERT4gaXMgcmV0dXJuZWQuCisgICAgICovCisJCisgICAgcHVibGljIGJvb2xlYW4gY3JlYXRlUmVzb3VyY2UoU3RyaW5nIHRpdGxlLCBTdHJpbmcgY29tbWVudCwgU3RyaW5nIG1hbmFnZXIsIFN0cmluZyBlbmNvZGluZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlLCBTdHJpbmcgY291bnRyeSwgU3RyaW5nIHZhcmlhbnQsIGJvb2xlYW4gY29weVZhbHVlcykgeworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCB8fCBlbmNvZGluZy5lcXVhbHMoIiIpIHx8IGVuY29kaW5nLnN0YXJ0c1dpdGgoIl8iKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGVuY29kaW5nIGV4aXN0cworICAgICAgICBpZiAoaGFzUmVzb3VyY2UoZW5jb2RpbmcpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgcmVzb3VyY2UKKyAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoZW5jb2RpbmcpOworICAgICAgICBidW5kbGUubmFtZSA9IHRpdGxlOworICAgICAgICBidW5kbGUuY29tbWVudCA9IGNvbW1lbnQ7CisgICAgICAgIGJ1bmRsZS5tYW5hZ2VyID0gbWFuYWdlcjsKKyAgICAgICAgYnVuZGxlLmxhbmd1YWdlID0gbGFuZ3VhZ2U7CisgICAgICAgIGJ1bmRsZS5jb3VudHJ5ID0gY291bnRyeTsKKyAgICAgICAgYnVuZGxlLnZhcmlhbnQgPSB2YXJpYW50OworCQkKKyAgICAgICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCBncm91cAorICAgICAgICBidW5kbGUuYWRkQnVuZGxlR3JvdXAoIlVuZ3JvdXBlZCBJdGVtcyIsICJUaGVzZSBhcmUgcmVzb3VyY2UgaXRlbXMgdGhhdCBoYXZlIG5vdCBiZWVuIGFzc2lnbmVkIGEgZ3JvdXAiKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb3B5VmFsdWVzKSB7CisgICAgICAgICAgICBCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5maXJzdEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1haW5CdW5kbGUuZ2V0R3JvdXBDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGVHcm91cCBtYWluR3JvdXAgPSBtYWluQnVuZGxlLmdldEJ1bmRsZUdyb3VwKGkpOworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGJnID0gbmV3IEJ1bmRsZUdyb3VwKGJ1bmRsZSxtYWluR3JvdXAuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBiZy5zZXRDb21tZW50KG1haW5Hcm91cC5nZXRDb21tZW50KCkpOworICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRCdW5kbGVHcm91cChiZyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgbWFpbkdyb3VwLmdldEl0ZW1Db3VudCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBtYWluSXRlbSA9IG1haW5Hcm91cC5nZXRCdW5kbGVJdGVtKGopOworICAgICAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSBuZXcgQnVuZGxlSXRlbShiZywgbWFpbkl0ZW0uZ2V0S2V5KCksIG1haW5JdGVtLmdldFRyYW5zbGF0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpdGVtLnNldENvbW1lbnQobWFpbkl0ZW0uZ2V0Q29tbWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRDcmVhdG9yKG1haW5JdGVtLmdldENyZWF0b3IoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0TW9kaWZpZXIobWFpbkl0ZW0uZ2V0TW9kaWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0TG9va3VwcyhuZXcgSGFzaHRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBCdW5kbGUgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IG1haW5JdGVtLmdldExvb2t1cHMoKS5rZXlzKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gKFN0cmluZyltYWluSXRlbS5nZXRMb29rdXBzKCkuZ2V0KG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXRMb29rdXBzKCkucHV0KG5ldyBTdHJpbmcobmFtZSksIG5ldyBTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiZy5hZGRCdW5kbGVJdGVtKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBidW5kbGUuYWRkVW50cmFuc2xhdGVkSXRlbShpdGVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkJCisgICAgICAgIGJ1bmRsZXMuYWRkRWxlbWVudChidW5kbGUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZSBOTFMgZW50cmllcworICAgICAqLworCQorICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyRHVwbGljYXRlcygpIHsKKyAgICAgICAgcmV0dXJuICgoQnVuZGxlKWJ1bmRsZXMuZmlyc3RFbGVtZW50KCkpLmR1cGxpY2F0ZXMuc2l6ZSgpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc2luZ2xlIHN0cmluZyB3aXRoIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Rpbmcgb2YgYWxsIGR1cGxpY2F0ZSBlbnRyaWVzIGZvdW5kIGluIHRoZSBOTFMgcmVzb3VyY2VzCisgICAgICovCisJCisgICAgcHVibGljIFN0cmluZyBnZXREdXBsaWNhdGVzTGlzdGluZygpIHsKKyAgICAgICAgcmV0dXJuIGxpc3RTdHJpbmdzKGdldER1cGxpY2F0ZXNMaXN0aW5nVmVjdG9yKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBWZWN0b3IgY29sbGVjdGlvbiBvZiBkdXBsaWNhdGUgQnVuZGxlSXRlbXMgZm91bmQgaW4gdGhlIGJ1bmRsZQorICAgICAqLworCQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0RHVwbGljYXRlc0xpc3RpbmdWZWN0b3IoKSB7CisgICAgICAgIHJldHVybiAoKEJ1bmRsZSlidW5kbGVzLmZpcnN0RWxlbWVudCgpKS5kdXBsaWNhdGVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgdXNlZnVsIGRlYnVnZ2luZyBtZXRob2QgdGhhdCBsaXN0cyB0aGUgdmFyaW91cyBCdW5kbGVHcm91cCBuYW1lcyBpbiBhIFN0cmluZy4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwTGlzdGluZygpIHsKKyAgICAgICAgcmV0dXJuIGxpc3RTdHJpbmdzKGdldEdyb3VwTGlzdGluZ1ZlY3RvcigpKTsKKyAgICB9CisgICAgICAgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgdmVjdG9yIGNvbGxlY3Rpb24gb2YgYWxsIG9mIHRoZSBCdW5kbGVHcm91cCBpdGVtcyBmb3VuZHMgaW50IHRoZSBidW5kbGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIFZlY3RvciBnZXRHcm91cExpc3RpbmdWZWN0b3IoKSB7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmZpcnN0RWxlbWVudCgpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGUuZ2V0R3JvdXBDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYnVuZGxlLmdldEJ1bmRsZUdyb3VwKGkpLmdldE5hbWUoKTsKKyAgICAgICAgICAgIHYuYWRkRWxlbWVudChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGxhbmd1YWdlcyB0aGF0IHRoZSBzeXN0ZW0gc2VlbXMgdG8gc3VwcG9ydAorICAgICAqLworCQorICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyTGFuZ3VhZ2VzKCkgeworICAgICAgICByZXR1cm4gYnVuZGxlcy5zaXplKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzaW5nbGUgc3RyaW5nIGNvbXByaXNlZCBvZiBhIGNvbW1hIGRlbGltaXRlZCBsaXN0aW5nIG9mIGFsbCBsYW5ndWFnZXMgdGhlIHN5c3RlbSBzZWVtcyB0byBzdXBwb3J0CisgICAgICovCisJCisgICAgcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZUxpc3RpbmcoKSB7CisgICAgICAgIHJldHVybiBsaXN0U3RyaW5ncyhnZXRMYW5ndWFnZUxpc3RpbmdWZWN0b3IoKSk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb21wcmlzaW5nIGEgbGlzdCBvZiBhbGwgbGFuZ3VhZ2VzIGluIHRoZSBzeXN0ZW0KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgVmVjdG9yIGdldExhbmd1YWdlTGlzdGluZ1ZlY3RvcigpIHsKKyAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisJCQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBkaWN0ID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIFN0cmluZyBkaWN0U3RyID0gbmV3IFN0cmluZygpOworICAgICAgICAgICAgaWYgKGRpY3QubGFuZ3VhZ2UgIT0gbnVsbCkgZGljdFN0ciArPSBkaWN0Lmxhbmd1YWdlOworICAgICAgICAgICAgaWYgKGRpY3QuY291bnRyeSAhPSBudWxsKSBkaWN0U3RyICs9ICIgIiArIGRpY3QuY291bnRyeTsKKyAgICAgICAgICAgIGlmIChkaWN0LnZhcmlhbnQgIT0gbnVsbCkgZGljdFN0ciArPSAiICIgKyBkaWN0LnZhcmlhbnQ7CisgICAgICAgICAgICBpZiAoZGljdFN0ci50cmltKCkuZXF1YWxzKCIiKSkgZGljdFN0ciA9IChkaWN0LmVuY29kaW5nLnRyaW0oKS5lcXVhbHMoIiIpID8gIkJhc2UgUmVzb3VyY2UgQnVuZGxlIiA6IGRpY3QuZW5jb2RpbmcpOworICAgICAgICAgICAgdi5hZGRFbGVtZW50KGRpY3RTdHIpOworICAgICAgICB9CisJCQorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRyYW5zbGF0aW9ucyBjb250YWluZWQgYWNyb3NzIGFsbCBsYW5ndWFnZSBmaWxlcworICAgICAqLworCQorICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyVG90YWxUcmFuc2xhdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBhbGxCdW5kbGVLZXlzLnNpemUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQnVuZGxlR3JvdXBzIGluICB0aGUgYnVuZGxlLgorICAgICAqLworCQorICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyR3JvdXBzKCkgeworICAgICAgICByZXR1cm4gKChCdW5kbGUpYnVuZGxlcy5maXJzdEVsZW1lbnQoKSkuZ2V0R3JvdXBDb3VudCgpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGN1cnJlbnRseSB1c2luZyB0aGUgZWRpdG9yCisgICAgICovCisJCisgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgeworICAgICAgICByZXR1cm4gY3VycmVudFVzZXI7CQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGN1cnJlbnRseSB1c2luZyB0aGUgZWRpdG9yCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgeworICAgICAgICBjdXJyZW50VXNlciA9IHVzZXI7CQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBiYXNlIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIGJ1bmRsZQorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEJhc2VDbGFzcyhTdHJpbmcgYmFzZUNsYXNzTmFtZSkgeworICAgICAgICBiYXNlQ2xhc3MgPSBiYXNlQ2xhc3NOYW1lOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBkaXJlY3RvcnkgaW4gdGhlIGZpbGUgc3lzdGVtIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgYnVuZGxlIGlzIHRvIGJlCisgICAgICogc2F2ZWQgYW5kIHJldHJpZXZlZC4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRGaWxlRGlyZWN0b3J5KEZpbGUgZGlyZWN0b3J5KSB7CisgICAgICAgIGlmIChkaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgY3VycmVudERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIGNsYXNzIG5hbWUgaWYga25vd24sIG9yICJVbmtub3duIEJhc2UgQ2xhc3MiIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHRvU3JpbmcoKSB7CisgICAgICAgIHJldHVybiAoYmFzZUNsYXNzID09IG51bGwgPyAiVW5rbm93biBCYXNlIENsYXNzIiA6IGJhc2VDbGFzcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYmFzZSBjbGFzcyBuYW1lIG9yIG51bGwgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgICAgICovCisJCisgICAgcHVibGljIFN0cmluZyBnZXRCYXNlQ2xhc3MoKSB7CisgICAgICAgIHJldHVybiBiYXNlQ2xhc3M7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEEgVmVjdG9yIG9mIE5MU2J1bmRsZXMsIG9uZSBmb3IgZWFjaCBsYW5ndWFnZQorICAgICAqLworICAgIHB1YmxpYyBWZWN0b3IgZ2V0QnVuZGxlcygpIHsKKyAgICAgICAgcmV0dXJuIGJ1bmRsZXM7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhIGJ1bmRsZSBmcm9tIGEgbG9jYWxlCisgICAgICogQHJldHVybiBUaGUgcmVxdWVzdGVkIHJlc291cmNlIGJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0QnVuZGxlKFN0cmluZyBsb2NhbGUpIHsKKyAgICAJQnVuZGxlIGJ1bmRsZSA9IG51bGw7CisgICAgICAgIGlmIChoYXNSZXNvdXJjZShsb2NhbGUpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgdGVtcGIgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgIGlmICh0ZW1wYi5lbmNvZGluZy5lcXVhbHMobG9jYWxlKSkgeworICAgICAgICAgICAgICAgICAgICBidW5kbGUgPSB0ZW1wYjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidW5kbGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGlzIHRoZSBiYXNlIGNsYXNzIGZpbGUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIEZpbGUgZ2V0QmFzZUZpbGUoKSB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZShjdXJyZW50RGlyZWN0b3J5LGJhc2VDbGFzcyArICIucHJvcGVydGllcyIpOworICAgIH0KKwkKKyAgICAvLyBSZXR1cm4gYSBzaW5nbGUgY29tbWEgZGVsaW1pdGVkIHN0cmluZyBtYWRlIGZyb20gYSB2ZWN0b3Igb2Ygc3RyaW5ncworICAgIHByaXZhdGUgU3RyaW5nIGxpc3RTdHJpbmdzKFZlY3RvciB2KSB7CisgICAgICAgIFN0cmluZyByZXRTdHIgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgT2JqZWN0IG8gPSB2LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBTdHJpbmcpKSBjb250aW51ZTsKKyAgICAgICAgICAgIFN0cmluZyBzID0gKFN0cmluZylvOworICAgICAgICAgICAgaWYgKGkgPiAwKSByZXRTdHIgKz0gIiwgIjsKKyAgICAgICAgICAgIHJldFN0ciArPSBzOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgfQorCQorICAgIC8vIEluaXQgLSBjYWxsZWQgYmVmb3JlIGFudCBjb25zdHJ1Y3Rpb24KKyAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgYWxsQnVuZGxlS2V5cyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgYnVuZGxlcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgY3VycmVudFVzZXIgPSAiVW5rbm93biI7CisgICAgfQorCQorICAgIC8vIFJldHVybiBhIGhhc2h0YWJsZSBvZiB0aGUgdGFncyBpbiBhIGNvbW1lbnQgbGluZSAoaS5lLiB0aGUgdGV4dCBhZnRlciBlYWNoICdAJyBjaGFyYWN0ZXIpIGFuZCB0aGVpciB2YWx1ZXMKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBnZXREZXNjcmlwdG9ycyhIYXNodGFibGUgcmVzdWx0LCBTdHJpbmcgbGluZSkgeworICAgICAgICAvLyBSZWN1cnNpb24gdGVybWluYXRpbmcgY29uZGl0aW9uCisgICAgICAgIGlmIChsaW5lID09IG51bGwgfHwgbGluZS5sZW5ndGgoKSA8PSAwIHx8IGxpbmUuaW5kZXhPZigiQCIpIDwgMCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGdlbmVyYXRlIHdoYXQgaW5mb3JtYXRpb24gd2UgY2FuIGFuZCByZWN1cnNlCisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICAvLyBTdHJpcCBvZmYgYW55IGluZm9ybWF0aW9uIGJlZm9yZSBhbmQgaW5jbHVkaW5nIGEgJ0AnCisgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoIkAiKSsxLCBsaW5lLmxlbmd0aCgpKTsKKyAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYWZ0ZXIgdGhlICdAX3RhZ18nIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eQorICAgICAgICBpZiAobGluZS5pbmRleE9mKCIgIikgPCAwKSByZXR1cm4gcmVzdWx0OyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGlmIHRoaW5ncyBhcmUgZm9ybWF0dGVkIHJpZ2h0CisgICAgICAgIC8vIEFkZCB0aGUgdGV4dCBhZnRlciB0aGUgJ0AnIGNoYXJhY3RlciB1cCB0byB0aGUgZmlyc3Qgd2hpdGVzcGFjZSAoaGFzIHRvIGJlIGEgc3BhY2UsIG5vdCB0YWIgb3Igb3RoZXIgd2hpdGVzcGFjZSkKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBsaW5lLnN1YnN0cmluZygwLGxpbmUuaW5kZXhPZigiICIpKS50cmltKCk7CisgICAgICAgIC8vIE5vdyBzdHJpcCBvZmYgdGhlIHRhZyBuYW1lCisgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoIiAiKSwgbGluZS5sZW5ndGgoKSk7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgJ0AnIGNoYXJhY3RlciB3ZSB0YWtlIHRoZSB2YWx1ZSB1cCB1bnRpbCB0aGF0IGNoYXJhY3RlcgorICAgICAgICBpZiAobGluZS5pbmRleE9mKCJAIikgPj0gMCkgeworICAgICAgICAgICAgcmVzdWx0LnB1dChuYW1lLGxpbmUuc3Vic3RyaW5nKDAsbGluZS5pbmRleE9mKCJAIikpLnRyaW0oKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIHRha2UgdGhlIHJlc3Qgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGxpbmUKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQucHV0KG5hbWUsbGluZS50cmltKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWN1cnNlCisgICAgICAgIHJldHVybiBnZXREZXNjcmlwdG9ycyhyZXN1bHQsIGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiQCIpLCBsaW5lLmxlbmd0aCgpKSk7CisgICAgfQorCisgICAgLy8gQ2hlY2tzIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGEgcGFydGljdWxhciBzdHJpbmcKKy8qICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gYXJyYXlDb250YWlucyhTdHJpbmdbXSBhcnJheSwgU3RyaW5nIG1hdGNoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheVtpXS5lcXVhbHMobWF0Y2gpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSovCisJCisgICAgLy8gUHJpbnRzIHRoZSB1c2FnZSBvZiB0aGUgcHJvZ3JhbSB3aGVuIGNhbGxlZCBmcm9tIG1haW4KKy8qICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRVc2FnZSgpIHsKKyAgICAgICAgU3RyaW5nIHVzYWdlID0gbmV3IFN0cmluZygpOworICAgICAgICB1c2FnZSArPSAiVXNhZ2U6XG5cbmphdmEgY29tLmlibS5hbG1hZGVuLlRlbXB1c0Z1Z2l0LlRvb2xzLlJCTWFuYWdlciBmaWxlTmFtZSAoKC1yIHwgLWQpIGVuY29kaW5nPyk/IjsKKyAgICAgICAgdXNhZ2UgKz0gIlxuXG4gIGZpbGVOYW1lIC0+IFRoZSBmaWxlIChhbmQgcGF0aD8pIHJlcHJlc2VudGluZyB0aGUgbWFpbiBOTFMgcmVzb3VyY2Vcblx0XHQoaS5lLiBUZW1wdXNGdWdpdC5yZXNvdXJjZXMpXG4iOworICAgICAgICB1c2FnZSArPSAiICBlbmNvZGluZyAtPiBSZXR1cm5zIHJlc3VsdHMgZm9yIG9ubHkgdGhlIGxhbmd1YWdlIGVuY29kaW5nIHNwZWNpZmllZFxuIjsKKyAgICAgICAgdXNhZ2UgKz0gIiAgZmxhZyAtciAgLT4gR2l2ZXMgb25seSBhIHN0YXR1cyByZXBvcnQgb24gdGhlIHN0YXRlIG9mIHRoZSB0cmFuc2xhdGlvbnNcbiI7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odXNhZ2UpOworICAgIH0qLworICAgIAorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJQcm9wZXJ0aWVzRXhwb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlByb3BlcnRpZXNFeHBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZGY3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJQcm9wZXJ0aWVzRXhwb3J0ZXIuamF2YQpAQCAtMCwwICsxLDgxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgcGx1Zy1pbiBleHBvcnRlciB1dGlsaXR5IGZvciBSQk1hbmFnZXIgdGhhdCBvdXRwdXRzIEphdmEKKyAqIHN0YW5kYXJkIC5wcm9wZXJ0aWVzIGZpbGVzIGluIHRoZSBhY2NvcmRpbmcgdG8gdGhlIGZpbGUgc3RydWN0dXJlIG9mIFJlc291cmNlCisgKiBCdW5kbGVzLiBNb3N0IGFsbCBtZXRhLWRhdGEgaXMgbG9zdCBpbiB0aGlzIGV4cG9ydC4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJQcm9wZXJ0aWVzRXhwb3J0ZXIgZXh0ZW5kcyBSQkV4cG9ydGVyIHsKKwkKKyAgICBwdWJsaWMgUkJQcm9wZXJ0aWVzRXhwb3J0ZXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisJCQorICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBmaWxlIGNob29zZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChjaG9vc2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisgICAgICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkJhc2UgQ2xhc3MgUHJvcGVydGllcyBGaWxlcyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikgJiYgZi5nZXROYW1lKCkuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICB9CisJCisgICAgcHVibGljIHZvaWQgZXhwb3J0KFJCTWFuYWdlciByYm0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChyYm0gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICAvLyBPcGVuIHRoZSBTYXZlIERpYWxvZworICAgICAgICBpbnQgcmV0X3ZhbCA9IGNob29zZXIuc2hvd1NhdmVEaWFsb2cobnVsbCk7CisgICAgICAgIGlmIChyZXRfdmFsICE9IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgcmV0dXJuOworICAgICAgICAvLyBSZXRyaWV2ZSBiYXNpYyBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgIEZpbGUgZmlsZSA9IGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7ICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpbGUocykgd2Ugd2lsbCBiZSB3b3JraW5nIHdpdGgKKyAgICAgICAgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShmaWxlLmdldFBhcmVudCgpKTsgICAgICAgICAgICAvLyBUaGUgZGlyZWN0b3J5IHdlIHdpbGwgYmUgd3JpdGluZyB0bworICAgICAgICBTdHJpbmcgYmFzZV9uYW1lID0gZmlsZS5nZXROYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpbGVzIHdlIHdpbGwgd3JpdGUKKyAgICAgICAgaWYgKGJhc2VfbmFtZSA9PSBudWxsIHx8IGJhc2VfbmFtZS5lcXVhbHMoIiIpKSBiYXNlX25hbWUgPSByYm0uZ2V0QmFzZUNsYXNzKCk7CisgICAgICAgIGlmIChiYXNlX25hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkgCisgICAgICAgICAgICBiYXNlX25hbWUgPSBiYXNlX25hbWUuc3Vic3RyaW5nKDAsYmFzZV9uYW1lLmxlbmd0aCgpLTExKTsKKwkJCisgICAgICAgIFZlY3RvciBidW5kbGVfdiA9IHJibS5nZXRCdW5kbGVzKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZV92LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3AgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlX3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGJhc2VfZW5jID0gYmFzZV9uYW1lOworICAgICAgICAgICAgaWYgKGJ1bmRsZS5lbmNvZGluZyAhPSBudWxsICYmICFidW5kbGUuZW5jb2RpbmcuZXF1YWxzKCIiKSkgYmFzZV9lbmMgPSBiYXNlX2VuYyArICJfIiArIGJ1bmRsZS5lbmNvZGluZzsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlX25hbWUgPSBiYXNlX2VuYyArICIucHJvcGVydGllcyI7CisgICAgICAgICAgICBTdHJpbmcgaGVhZGVyID0gIlJlc291cmNlIEJ1bmRsZTogIiArIGZpbGVfbmFtZSArICIgLSBGaWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlciBhdCAiICsgKG5ldyBEYXRlKCkpOworCQkJCisgICAgICAgICAgICBWZWN0b3IgZ3JvdXBfdiA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgZ3JvdXBfdi5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWdyb3VwX3YuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgIFZlY3RvciBpdGVtX3YgPSBncm91cC5nZXRJdGVtc0FzVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgaXRlbV92LnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1fdi5lbGVtZW50QXQoayk7CisgICAgICAgICAgICAgICAgICAgIHByb3Auc2V0UHJvcGVydHkoaXRlbS5nZXRLZXkoKSwgaXRlbS5nZXRUcmFuc2xhdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBrCisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBqCisJCQkKKyAgICAgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgZmlsZQorICAgICAgICAgICAgRmlsZSB3cml0ZV9maWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBmaWxlX25hbWUpOworICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh3cml0ZV9maWxlKTsKKyAgICAgICAgICAgIHByb3Auc3RvcmUoZm9zLCBoZWFkZXIpOworICAgICAgICB9IC8vIGVuZCBmb3IgLSBpCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlByb3BlcnRpZXNJbXBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUHJvcGVydGllc0ltcG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2Y2QyOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlByb3BlcnRpZXNJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworCitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogVGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIGFsbCBpbXBvcnRlciBwbHVnLWluIGNsYXNzZXMuIEFzIG9mIHlldCwgdGhlcmUKKyAqIGlzIGxpdHRsZSBjb250YWluZWQgaW4gdGhpcyBjbGFzcy4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJQcm9wZXJ0aWVzSW1wb3J0ZXIgZXh0ZW5kcyBSQkltcG9ydGVyIHsKKwkKKyAgICBib29sZWFuIGlzUkJNRmlsZSA9IHRydWU7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyB0aGUgaW1wb3J0ZXIgZ2l2ZW4gdGhlIHBhcmVudCBkYXRhIGNsYXNzZXMgYW5kIGEgRGlhbG9nIHRpdGxlLgorICAgICAqLworCQorICAgIHB1YmxpYyBSQlByb3BlcnRpZXNJbXBvcnRlcihTdHJpbmcgdGl0bGUsIFJCTWFuYWdlciByYm0sIFJCTWFuYWdlckdVSSBndWkpIHsKKyAgICAgICAgc3VwZXIodGl0bGUsIHJibSwgZ3VpKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBGaWxlQ2hvb3NlcigpIHsKKyAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGYuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikgJiYgZi5nZXROYW1lKCkuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9wcm9wZXJ0aWVzX2ZpbGVfZGVzY3JpcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIGJlZ2luSW1wb3J0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuYmVnaW5JbXBvcnQoKTsKKyAgICAgICAgRmlsZSBiYXNlRmlsZSA9IGdldENob3NlbkZpbGUoKTsKKyAgICAgICAgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGJhc2VGaWxlKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIpOworCQkKKyAgICAgICAgLy8gVGVzdCBpZiB0aGlzIGlzIGFuIFJCTWFuYWdlciBnZW5lcmF0ZWQgZmlsZSBvciBub3QKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICBpc1JCTUZpbGUgPSB0cnVlOworICAgICAgICB3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmVxdWFscygiIikpIGNvdW50Kys7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSAmJiAhbGluZS5zdGFydHNXaXRoKCIjIEBmaWxlIikpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3QgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlcgorICAgICAgICAgICAgICAgIGlzUkJNRmlsZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IC8vIGVuZCB3aGlsZQorICAgICAgICBpZiAoaXNSQk1GaWxlKSB7CisgICAgICAgICAgICAvLyBUcmVhdCB0aGUgZmlsZSBhcyBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCisgICAgICAgICAgICAvLyBQYXJzZSB0aGUgcmVzb3VyY2UgYnVuZGxlIHRocm91Z2ggUkJNYW5hZ2VyCisgICAgICAgICAgICBSQk1hbmFnZXIgaW1wb3J0X3JibSA9IG5ldyBSQk1hbmFnZXIoYmFzZUZpbGUpOworICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIHR3byByZXNvdXJjZSBidW5kbGVzCisgICAgICAgICAgICBWZWN0b3IgYnVuZGxlcyA9IGltcG9ydF9yYm0uZ2V0QnVuZGxlcygpOworICAgICAgICAgICAgVmVjdG9yIGVuY29kaW5ncyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgYiA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgZW5jb2RpbmdzLmFkZEVsZW1lbnQoYi5lbmNvZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXNvbHZlRW5jb2RpbmdzKGVuY29kaW5ncyk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlIGIgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBiLmFsbEl0ZW1zLmtleXMoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWIuYWxsSXRlbXMuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydFJlc291cmNlKGl0ZW0sIGIuZW5jb2RpbmcsIChpdGVtLmdldFBhcmVudEdyb3VwKCkgPT0gbnVsbCA/IGdldERlZmF1bHRHcm91cCgpOiBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0TmFtZSgpKSk7IAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEp1c3QgdHJlYXQgaXQgYXMgYSByZWd1bGFyIHByb3BlcnRpZXMgZmlsZQorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBtaXNzaW5nIHRhcmdldCBsb2NhbGUgZmlsZXMKKyAgICAgICAgICAgIFN0cmluZyBiYXNlTmFtZSA9IGJhc2VGaWxlLmdldE5hbWUoKS5zdWJzdHJpbmcoMCxiYXNlRmlsZS5nZXROYW1lKCkubGVuZ3RoKCktMTEpOyAvLyB8Jy5wcm9wZXJ0aWVzJ3wgPT0gMTEKKyAgICAgICAgICAgIEZpbGUgYmFzZURpciA9IG5ldyBGaWxlKGJhc2VGaWxlLmdldFBhcmVudCgpKTsKKyAgICAgICAgICAgIFN0cmluZyBhbGxDaGlsZHJlbltdID0gYmFzZURpci5saXN0KCk7CisgICAgICAgICAgICBWZWN0b3IgY2hpbGRyZW5fdiA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGFsbENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuW2ldLnN0YXJ0c1dpdGgoYmFzZU5hbWUpICYmIGFsbENoaWxkcmVuW2ldLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuW2ldLmxlbmd0aCgpID09IChiYXNlTmFtZSArICIucHJvcGVydGllcyIpLmxlbmd0aCgpKSBjaGlsZHJlbl92LmFkZEVsZW1lbnQoIiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGNoaWxkcmVuX3YuYWRkRWxlbWVudChhbGxDaGlsZHJlbltpXS5zdWJzdHJpbmcoYmFzZU5hbWUubGVuZ3RoKCkrMSwgYWxsQ2hpbGRyZW5baV0uaW5kZXhPZigiLnByb3BlcnRpZXMiKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNob3dQcm9ncmVzc0JhcihjaGlsZHJlbl92LnNpemUoKSk7CisgICAgICAgICAgICByZXNvbHZlRW5jb2RpbmdzKGNoaWxkcmVuX3YpOworICAgICAgICAgICAgLy8gUnVuIHRocm91Z2ggZWFjaCBzb3VyY2UgbG9jYWxlIGZpbGUgaW1wb3J0aW5nIGFzIG5lY2Vzc2FyeQorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW5fdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0obmV3IEZpbGUoYmFzZURpciwgYmFzZU5hbWUgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRyZW5fdi5lbGVtZW50QXQoaSkudG9TdHJpbmcoKS5lcXVhbHMoIiIpID8gIiIgOiAiXyIgKyBjaGlsZHJlbl92LmVsZW1lbnRBdChpKS50b1N0cmluZygpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0aWVzIikpOworICAgICAgICAgICAgICAgIHAubG9hZChmaXMpOworICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBwLmtleXMoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG5ldyBCdW5kbGVJdGVtKG51bGwsIGtleSwgcC5nZXRQcm9wZXJ0eShrZXkpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRUcmFuc2xhdGVkKHRoaXMuZ2V0RGVmYXVsdFRyYW5zbGF0ZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydFJlc291cmNlKGl0ZW0sIGNoaWxkcmVuX3YuZWxlbWVudEF0KGkpLnRvU3RyaW5nKCksIGdldERlZmF1bHRHcm91cCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5jcmVtZW50UHJvZ3Jlc3NCYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhpZGVQcm9ncmVzc0JhcigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyLmJhdCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjhmYjMzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXIuYmF0CkBAIC0wLDAgKzEsMiBAQAorQGVjaG8gb2ZmCitqYXZhIC1jbGFzc3BhdGggUkJNYW5hZ2VyLmphcjtsaWJceGVyY2VzLmphcjsuIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIgJTEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTdhYzhkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXIuamF2YQpAQCAtMCwwICsxLDExOTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplLio7CitpbXBvcnQgb3JnLnczYy5kb20uKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CisKKy8qKgorICogUkJSZXBvcnRlciBpcyBhIGZ1bGx5IGZ1bmN0aW9uYWwgYXBwbGljYXRpb24gdGhhdCBydW5zIHNlcGFyYXRlIGZyb20gUkJNYW5hZ2VyLgorICogVGhlIHJlcG9ydCBwcm9kdWNlcyBzdGF0aXN0aWNhbGx5IGJhc2VkIHJlcG9ydHMgb24gc3BlY2lmaWVkIHJlc291cmNlIGJ1bmRsZXMsCisgKiBhbmQgaXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aW1lIGludGVydmFscyBhdCB3aGljaCB0aG9zZSByZXBvcnRzIHdpbGwgYmUKKyAqIGdlbmVyYXRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgdXNhZ2Ugc2VlIHRoZQorICogY29tbWVudHMgZm9yIHRoZSBtYWluKCkgbWV0aG9kLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQlJlcG9ydGVyIGV4dGVuZHMgSkZyYW1lIHsKKwkKKwkvLyAqKiBDT01QT05FTlRTICoqCisJSkxhYmVsICAgICAgIHN0YXR1c0xhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGVzIGlmIHRoZSByZXBvcnRlZCBpcyBydW5uaW5nCisJSkJ1dHRvbiAgICAgIHN0YXR1c0J1dHRvbjsgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0dG9uIGZvciB0b2dnbGluZyB0aGUgcmVwb3J0ZXIgb24vb2ZmCisJSkxhYmVsICAgICAgIG5leHRSZXBvcnRMYWJlbDsgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGVzIGRhdGUvdGltZSBvZiBuZXh0IHJlcG9ydAorCUpMYWJlbCAgICAgICBsYXN0UmVwb3J0TGFiZWw7ICAgICAgICAgICAgICAgICAgIC8vIEluZGljYXRlcyBkYXRlL3RpbWUgb2YgbGFzdCByZXBvcnQKKwlKVGV4dEZpZWxkICAgYnVuZGxlRmllbGQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZXMgaW5wdXQgYmFzZSBjbGFzcyBmaWxlCisJSlRleHRGaWVsZCAgIGRpcmVjdG9yeUZpZWxkOyAgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGVzIG91dHB1dCBkaXJlY3RvcnkKKwlKQ2hlY2tCb3ggICAgdGV4dENoZWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyB0ZXh0IHJlcG9ydCBnZW5lcmF0ZWQ/CisJSkNoZWNrQm94ICAgIGh0bWxDaGVjazsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgSFRNTCByZXBvcnQgZ2VuZXJhdGVkPworCUpDaGVja0JveCAgICB4bWxDaGVjazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElzIFhNTCByZXBvcnQgZ2VuZXJhdGVkPworCUpDaGVja0JveCAgICBzY2FuQ2hlY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElzIGNvZGUgc2NhbiBwZXJmb3JtZWQ/CisJSlRleHRGaWVsZCAgIHRleHRGaWVsZDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCByZXBvcnQgZmlsZSBuYW1lCisJSlRleHRGaWVsZCAgIGh0bWxGaWVsZDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRNTCByZXBvcnQgZmlsZSBuYW1lCisJSlRleHRGaWVsZCAgIHhtbEZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MIHJlcG9ydCBmaWxlIG5hbWUKKwlKVGV4dEZpZWxkICAgc2NhbkZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUwgc2Nhbm5lciBmaWxlIGxvY2F0aW9uCisJSkNvbWJvQm94ICAgIHRleHRDb21ibzsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCByZXBvcnQgZGV0YWlsIGxldmVsCisJSkNvbWJvQm94ICAgIGh0bWxDb21ibzsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRNTCByZXBvcnQgZGV0YWlsIGxldmVsCisJSkNvbWJvQm94ICAgIHhtbENvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MIHJlcG9ydCBkZXRhaWwgbGV2ZWwKKwlKUmFkaW9CdXR0b24gc2VxdWVudGlhbFJhZGlvOyAgICAgICAgICAgICAgICAgICAvLyBSZXBvcnQgYXQgc2VxdWVudGlhbCBpbnRlcnZhbD8KKwlKUmFkaW9CdXR0b24gZGVmaW5lZFJhZGlvOyAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBvcnQgYXQgZGVmaW5lZCB0aW1lPworCUpDb21ib0JveCAgICB2YWx1ZUNvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB1bml0cyB0byB3YWl0IGJldHdlZW4gcmVwb3J0cworCUpDb21ib0JveCAgICB1bml0Q29tYm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaXRzIG9mIHRpbWUKKwlKQ29tYm9Cb3ggICAgaG91ckNvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmVkIHRpbWUgdG8gcmVwb3J0IC0tIGhvdXJzCisJSkNvbWJvQm94ICAgIG1pbnV0ZUNvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lZCB0aW1lIHRvIHJlcG9ydCAtLSBtaW51dGVzCisJSkNvbWJvQm94ICAgIGRheUNvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lZCB0aW1lIHRvIHJlcG9ydCAtLSBkYXkKKwkKKwkvLyAqKiBGaWxlIENob29zZXIgKioKKwlKRmlsZUNob29zZXIgYnVuZGxlRmlsZUNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJSkZpbGVDaG9vc2VyIGRpcmVjdG9yeUZpbGVDaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworCUpGaWxlQ2hvb3NlciBzY2FuRmlsZUNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJCisJLy8gKiogREFUQSAqKgorCURhdGUgbGFzdFJlcG9ydCA9IG51bGw7CisJRGF0ZSBuZXh0UmVwb3J0ID0gbnVsbDsKKwlib29sZWFuIHJ1bm5pbmcgPSBmYWxzZTsKKyAgICAvKiogRm9yIGdlbmVyYXRpbmcgYSByZXBvcnQgKi8KKyAgICBSQk1hbmFnZXIgcmJtOworCQorCXByaXZhdGUgUkJSZXBvcnRlcihib29sZWFuIG1ha2VWaXNpYmxlKSB7CisJCXRyeSB7CisJCQkvLyBHZXQgdGhlIGxvb2sgYW5kIGZlZWwgZnJvbSBwcmVmZXJlbmNlcwkKKwkJCXRyeSB7CisJCQkJU3RyaW5nIGxhZiA9IFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvb2thbmRmZWVsIik7CisJCQkJaWYgKCFsYWYuZXF1YWxzKCIiKSkKKwkJCQkJVUlNYW5hZ2VyLnNldExvb2tBbmRGZWVsKGxhZik7CisJCQl9IAorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IAorCQkJfQorCQkJLy8gR2V0IHRoZSBsb2NhbGUgZnJvbSBwcmVmZXJlbmNlcworCQkJaWYgKCFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJsb2NhbGUiKS5lcXVhbHMoIiIpKSB7CisJCQkJU3RyaW5nIGxvY2FsZVN0ciA9IFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvY2FsZSIpOworCQkJCVN0cmluZyBsYW5ndWFnZSA9IFJlc291cmNlcy5nZXRMYW5ndWFnZShsb2NhbGVTdHIpOworCQkJCVN0cmluZyBjb3VudHJ5ID0gUmVzb3VyY2VzLmdldENvdW50cnkobG9jYWxlU3RyKTsKKwkJCQlTdHJpbmcgdmFyaWFudCA9IFJlc291cmNlcy5nZXRWYXJpYW50KGxvY2FsZVN0cik7CisJCQkJaWYgKGxhbmd1YWdlID09IG51bGwgfHwgbGFuZ3VhZ2UuZXF1YWxzKCIiKSB8fCBsYW5ndWFnZS5sZW5ndGgoKSA+IDMpIGxhbmd1YWdlID0gImVuIjsKKwkJCQlpZiAoY291bnRyeSA9PSBudWxsKSBjb3VudHJ5ID0gbmV3IFN0cmluZygpOworCQkJCWlmICh2YXJpYW50ID09IG51bGwpIFJlc291cmNlcy5zZXRMb2NhbGUobmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSkpOworCQkJCWVsc2UgUmVzb3VyY2VzLnNldExvY2FsZShuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KSk7CisJCQl9CisJCQlSZXNvdXJjZXMuaW5pdEJ1bmRsZSgpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlpbml0Q29tcG9uZW50cygpOworCQlzZXRWaXNpYmxlKG1ha2VWaXNpYmxlKTsKKwkJVGhyZWFkIHJlcG9ydFRocmVhZCA9IG5ldyBUaHJlYWQoKXsKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAobmV4dFJlcG9ydCAhPSBudWxsICYmIChuZXh0UmVwb3J0LmNvbXBhcmVUbyhuZXcgRGF0ZSgpKSA8PSAwKSkgeworCQkJCQl0cnkgeyBnZW5lcmF0ZVJlcG9ydHMoKTsgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7fQorCQkJCX0KKwkJCQlpZiAobmV4dFJlcG9ydCA9PSBudWxsKQorCQkJCSAgICBuZXh0UmVwb3J0ID0gZ2VuZXJhdGVOZXh0UmVwb3J0RGF0ZSgpOworCQkJCXVwZGF0ZVN0YXR1c0NvbXBvbmVudHMoKTsKKwkJCQl1cGRhdGVEYXRlRmllbGRzKCk7CisJCQkJd2hpbGUgKHRydWUpIHsKKwkJCQkJaWYgKHJ1bm5pbmcgJiYgKG5leHRSZXBvcnQuY29tcGFyZVRvKG5ldyBEYXRlKCkpIDwgMCkpIHsKKwkJCQkJCXRyeSB7Z2VuZXJhdGVSZXBvcnRzKCk7fQorCQkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsIGlvZS5nZXRNZXNzYWdlKCksCisJCQkJCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLAorCQkJCQkJCQkJCQkJCQkgIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXRyeSB7CisJCQkJCQlzbGVlcCgxMDAwKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCQlyZXBvcnRUaHJlYWQuc3RhcnQoKTsKKwl9CisJCisJLy8gQ2FsbGVkIHdoZW4gYSByZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRG9lcyBub3QgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGdlbmVyYXRlZAorCXByaXZhdGUgdm9pZCBnZW5lcmF0ZVJlcG9ydHMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlIGJhc2VGaWxlID0gbmV3IEZpbGUoYnVuZGxlRmllbGQuZ2V0VGV4dCgpKTsKKwkJaWYgKGJhc2VGaWxlID09IG51bGwgfHwgIWJhc2VGaWxlLmlzRmlsZSgpKQorCQkgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTcGVjaWZpZWQgaW5wdXQgZmlsZSBpcyB1bnVzYWJsZSIpOworCQlGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGRpcmVjdG9yeUZpZWxkLmdldFRleHQoKSk7CisJCXJibSA9IG5ldyBSQk1hbmFnZXIoYmFzZUZpbGUpOworCQkKKwkJaWYgKHJibSA9PSBudWxsKQorCQkgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJVbmFibGUgdG8gbG9hZCB0aGUgcmVzb3VyY2UgYnVuZGxlIGZpbGUiKTsKKwkJaWYgKGRpcmVjdG9yeSA9PSBudWxsIHx8ICFkaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkKKwkJICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3BlY2lmaWVkIG91dHB1dCBkaXJlY3RvcnkgaXMgdW51c2FibGUiKTsKKwkJUkJSZXBvcnRlclNjYW5uZXIgc2Nhbm5lciA9IG51bGw7CisJCWlmIChzY2FuQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQlzY2FubmVyID0gbmV3IFJCUmVwb3J0ZXJTY2FubmVyKChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5lbGVtZW50QXQoMCksCisJCQkJCQkJCQkJICAgIG5ldyBGaWxlKHNjYW5GaWVsZC5nZXRUZXh0KCkpKTsKKwkJCXNjYW5uZXIucGVyZm9ybVNjYW4oKTsKKwkJfQorCQlpZiAodGV4dENoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJRmlsZSB0ZXh0RmlsZSA9IG5ldyBGaWxlKGRpcmVjdG9yeSwgdGV4dEZpZWxkLmdldFRleHQoKSk7CisJCQlTdHJpbmcgdGV4dFJlcG9ydCA9IGdldEFsbExhbmd1YWdlUmVwb3J0cyh0ZXh0Q29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpID09IDApOworCQkJaWYgKHNjYW5DaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCQkvLyBBZGQgZmlsZSBzY2FuIGluZm9ybWF0aW9uCisJCQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCQlidWZmZXIuYXBwZW5kKCJcblxuQ29kZSBTY2FuIFJlc3VsdHM6XG5cbiIpOworCQkJCWJ1ZmZlci5hcHBlbmQoIlxuXHROdW1iZXIgb2YgdW5pcXVlIHJlc291cmNlcyBmb3VuZDogIiArIHNjYW5uZXIuZ2V0TnVtYmVyUmVzb3VyY2VzRm91bmQoKSk7CisJCQkJYnVmZmVyLmFwcGVuZCgiXG5cdE51bWJlciBvZiByZXNvdXJjZXMgbWlzc2luZyBmcm9tIGJ1bmRsZTogIiArIHNjYW5uZXIuZ2V0TnVtYmVyTWlzc2luZ1Jlc291cmNlcygpKTsKKwkJCQkvLyBNaXNzaW5nIHJlc291cmNlcyBmcm9tIHRoZSBidW5kbGUKKwkJCQlidWZmZXIuYXBwZW5kKCJcblx0TWlzc2luZyBSZXNvdXJjZXM6ICIpOworCQkJCVZlY3RvciB2ID0gc2Nhbm5lci5nZXRNaXNzaW5nUmVzb3VyY2VzKCk7CisJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KXYuZWxlbWVudEF0KGkpOworCQkJCQlpZiAodGV4dENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSB7CisJCQkJCQlidWZmZXIuYXBwZW5kKCJcblx0XHQiICsgcmVzdWx0LmdldE5hbWUoKSArICIgKCIgKyByZXN1bHQuZ2V0T2NjdXJhbmNlcygpLnNpemUoKSArICIgT2NjdXJhbmNlcykiKTsKKwkJCQkJCWJ1ZmZlci5hcHBlbmQoIlxuXHRcdFx0IiArIHJlc3VsdC5nZXRPY2N1cmFuY2VzKCkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYnVmZmVyLmFwcGVuZCgoaT09MCA/ICIiIDogIiwgIikgKyByZXN1bHQuZ2V0TmFtZSgpICsgIiAoIiArIHJlc3VsdC5nZXRPY2N1cmFuY2VzKCkuc2l6ZSgpICsgIiBPY2N1cmFuY2VzKSIpOworCQkJCQl9CisJCQkJfQorCQkJCS8vIEJ1bmRsZSByZXNvdXJjZXMgbm90IGZvdW5kIGluIHRoZSBjb2RlCisJCQkJYnVmZmVyLmFwcGVuZCgiXG5cdE51bWJlciBvZiBwb3RlbnRpYWxseSB1bnVzZWQgcmVzb3VyY2VzIGluIGJ1bmRsZTogIiArIHNjYW5uZXIuZ2V0TnVtYmVyVW51c2VkUmVzb3VyY2VzKCkpOworCQkJCXYgPSBzY2FubmVyLmdldFVudXNlZFJlc291cmNlcygpOworCQkJCWZvciAoaW50IGk9MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKwkJCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCl2LmVsZW1lbnRBdChpKTsKKwkJCQkJaWYgKHRleHRDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCkgeworCQkJCQkJYnVmZmVyLmFwcGVuZCgiXG5cdFx0IiArIHJlc3VsdC5nZXROYW1lKCkgKyAiIChHcm91cDogIiArIHJlc3VsdC5nZXRHcm91cE5hbWUoKSArICIpIik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlidWZmZXIuYXBwZW5kKChpPT0wID8gIiIgOiAiLCAiKSArIHJlc3VsdC5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJCXRleHRSZXBvcnQgPSB0ZXh0UmVwb3J0ICsgYnVmZmVyLnRvU3RyaW5nKCk7CisJCQl9CisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIodGV4dEZpbGUpOworCQkJZncud3JpdGUodGV4dFJlcG9ydCk7CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQlpZiAoaHRtbENoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJRmlsZSBodG1sRmlsZSA9IG5ldyBGaWxlKGRpcmVjdG9yeSwgaHRtbEZpZWxkLmdldFRleHQoKSk7CisJCQlEb2N1bWVudCBodG1sUmVwb3J0ID0gZ2V0SFRNTFJlcG9ydHooaHRtbENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKTsKKwkJCWlmIChzY2FuQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQkJLy8gQWRkIGZpbGUgc2NhbiBpbmZvcm1hdGlvbgorCQkJCUVsZW1lbnQgaHRtbF9lbGVtID0gaHRtbFJlcG9ydC5nZXREb2N1bWVudEVsZW1lbnQoKTsKKwkJCQlOb2RlTGlzdCBubCA9IGh0bWxfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQk9EWSIpOworCQkJCUVsZW1lbnQgYm9keV9lbGVtID0gKEVsZW1lbnQpbmwuaXRlbSgwKTsKKwkJCQlFbGVtZW50IGgyX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkgyIik7CisJCQkJVGV4dCAgICBoMl90ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZSgiQ29kZSBTY2FuIFJlc3VsdHMiKTsKKwkJCQlFbGVtZW50IGJsb2NrX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkJMT0NLUVVPVEUiKTsKKwkJCQlFbGVtZW50IHAxX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlAiKTsKKwkJCQlFbGVtZW50IHAyX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlAiKTsKKwkJCQlFbGVtZW50IHAzX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlAiKTsKKwkJCQlUZXh0ICAgIHAxX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKCJOdW1iZXIgb2YgdW5pcXVlIHJlc291cmNlcyBmb3VuZDogIiArCisJCQkJCQkJCQkJCQkJCQlzY2FubmVyLmdldE51bWJlck1pc3NpbmdSZXNvdXJjZXMoKSk7CisJCQkJVGV4dCAgICBwMl90ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZSgiTnVtYmVyIG9mIHJlc291cmNlcyBtaXNzaW5nIGZyb20gYnVuZGxlOiAiICsKKwkJCQkJCQkJCQkJCQkJCXNjYW5uZXIuZ2V0TnVtYmVyTWlzc2luZ1Jlc291cmNlcygpKTsKKwkJCQlUZXh0ICAgIHAzX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKCJOdW1iZXIgb2YgcG90ZW50aWFsbHkgdW51c2VkIHJlc291cmNlcyBpbiBidW5kbGU6ICIgKworCQkJCQkJCQkJCQkJCQkJc2Nhbm5lci5nZXROdW1iZXJVbnVzZWRSZXNvdXJjZXMoKSk7CisJCQkJCisJCQkJaDJfZWxlbS5hcHBlbmRDaGlsZChoMl90ZXh0KTsKKwkJCQlwMV9lbGVtLmFwcGVuZENoaWxkKHAxX3RleHQpOworCQkJCXAyX2VsZW0uYXBwZW5kQ2hpbGQocDJfdGV4dCk7CisJCQkJcDNfZWxlbS5hcHBlbmRDaGlsZChwM190ZXh0KTsKKwkJCQlibG9ja19lbGVtLmFwcGVuZENoaWxkKHAxX2VsZW0pOworCQkJCWJsb2NrX2VsZW0uYXBwZW5kQ2hpbGQocDJfZWxlbSk7CisJCQkJYmxvY2tfZWxlbS5hcHBlbmRDaGlsZChwM19lbGVtKTsKKwkJCQlib2R5X2VsZW0uYXBwZW5kQ2hpbGQoaDJfZWxlbSk7CisJCQkJYm9keV9lbGVtLmFwcGVuZENoaWxkKGJsb2NrX2VsZW0pOworCQkJCQorCQkJCS8vIE1pc3NpbmcgcmVzb3VyY2VzIGZyb20gdGhlIGJ1bmRsZQorCQkJCVRleHQgICBtaXNzaW5nX3RleHQgPSBudWxsOworCQkJCVZlY3RvciB2ID0gc2Nhbm5lci5nZXRNaXNzaW5nUmVzb3VyY2VzKCk7CisJCQkJaWYgKGh0bWxDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCkgeworCQkJCQlFbGVtZW50IHVsX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlVMIik7CisJCQkJCW1pc3NpbmdfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoIk1pc3NpbmcgUmVzb3VyY2VzOiIpOworCQkJCQl1bF9lbGVtLmFwcGVuZENoaWxkKG1pc3NpbmdfdGV4dCk7CisJCQkJCWZvciAoaW50IGk9MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKwkJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCQlFbGVtZW50IGxpX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkxJIik7CisJCQkJCQlFbGVtZW50IGJyX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkJSIik7CisJCQkJCQlUZXh0ICAgIHQxX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKHJlc3VsdC5nZXROYW1lKCkgKyAiICgiICsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJICByZXN1bHQuZ2V0T2NjdXJhbmNlcygpLnNpemUoKSArICIgT2NjdXJhbmNlcykiKTsKKwkJCQkJCVRleHQgICAgdDJfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0LmdldE9jY3VyYW5jZXMoKS50b1N0cmluZygpKTsKKwkJCQkJCWxpX2VsZW0uYXBwZW5kQ2hpbGQodDFfdGV4dCk7CisJCQkJCQlsaV9lbGVtLmFwcGVuZENoaWxkKGJyX2VsZW0pOworCQkJCQkJbGlfZWxlbS5hcHBlbmRDaGlsZCh0Ml90ZXh0KTsKKwkJCQkJCXVsX2VsZW0uYXBwZW5kQ2hpbGQobGlfZWxlbSk7CisJCQkJCX0KKwkJCQkJcDJfZWxlbS5hcHBlbmRDaGlsZCh1bF9lbGVtKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJCQlidWZmZXIuYXBwZW5kKCJNaXNzaW5nIFJlc291cmNlczogIik7CisJCQkJCWZvciAoaW50IGk9MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKwkJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCQlidWZmZXIuYXBwZW5kKChpPT0wID8gIiIgOiAiLCAiKSArIHJlc3VsdC5nZXROYW1lKCkgKyAiICgiICsgcmVzdWx0LmdldE9jY3VyYW5jZXMoKS5zaXplKCkgKyAiIE9jY3VyYW5jZXMpIik7CisJCQkJCX0KKwkJCQkJbWlzc2luZ190ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZShidWZmZXIudG9TdHJpbmcoKSk7CisJCQkJCUVsZW1lbnQgYnJfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKKwkJCQkJcDJfZWxlbS5hcHBlbmRDaGlsZChicl9lbGVtKTsKKwkJCQkJcDJfZWxlbS5hcHBlbmRDaGlsZChtaXNzaW5nX3RleHQpOworCQkJCX0KKwkJCQkvLyBCdW5kbGUgcmVzb3VyY2VzIG5vdCBmb3VuZCBpbiB0aGUgY29kZQorCQkJCVRleHQgICB1bnVzZWRfdGV4dCA9IG51bGw7CisJCQkJdiA9IHNjYW5uZXIuZ2V0VW51c2VkUmVzb3VyY2VzKCk7CisJCQkJaWYgKGh0bWxDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCkgeworCQkJCQlFbGVtZW50IHVsX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlVMIik7CisJCQkJCXVudXNlZF90ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZSgiVW51c2VkIFJlc291cmNlczoiKTsKKwkJCQkJdWxfZWxlbS5hcHBlbmRDaGlsZCh1bnVzZWRfdGV4dCk7CisJCQkJCWZvciAoaW50IGk9MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKwkJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCQlFbGVtZW50IGxpX2VsZW0gPSBodG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkxJIik7CisJCQkJCQlUZXh0ICAgIHQxX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKHJlc3VsdC5nZXROYW1lKCkgKyAiIChHcm91cDogIiArCisJCQkJCQkJCQkJCQkJCQkJCQkJCSAgcmVzdWx0LmdldEdyb3VwTmFtZSgpICsgIikiKTsKKwkJCQkJCWxpX2VsZW0uYXBwZW5kQ2hpbGQodDFfdGV4dCk7CisJCQkJCQl1bF9lbGVtLmFwcGVuZENoaWxkKGxpX2VsZW0pOworCQkJCQl9CisJCQkJCXAzX2VsZW0uYXBwZW5kQ2hpbGQodWxfZWxlbSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCQkJYnVmZmVyLmFwcGVuZCgiVW51c2VkIFJlc291cmNlczogIik7CisJCQkJCWZvciAoaW50IGk9MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKwkJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCQlidWZmZXIuYXBwZW5kKChpPT0wID8gIiIgOiAiLCAiKSArIHJlc3VsdC5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJCXVudXNlZF90ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZShidWZmZXIudG9TdHJpbmcoKSk7CisJCQkJCUVsZW1lbnQgYnJfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKKwkJCQkJcDNfZWxlbS5hcHBlbmRDaGlsZChicl9lbGVtKTsKKwkJCQkJcDNfZWxlbS5hcHBlbmRDaGlsZCh1bnVzZWRfdGV4dCk7CisJCQkJfQorCQkJfQorCQkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGh0bWxGaWxlKTsKKwkJCU91dHB1dEZvcm1hdCBvZiA9IG5ldyBPdXRwdXRGb3JtYXQoaHRtbFJlcG9ydCk7CisJCQlvZi5zZXRJbmRlbnRpbmcodHJ1ZSk7CisJCQlvZi5zZXRFbmNvZGluZygiSVNPLTg4NTktMSIpOworCQkJSFRNTFNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldyBIVE1MU2VyaWFsaXplcihmdywgb2YpOworCQkJc2VyaWFsaXplci5zZXJpYWxpemUoaHRtbFJlcG9ydCk7CisJCX0KKwkJaWYgKHhtbENoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJRmlsZSB4bWxGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCB4bWxGaWVsZC5nZXRUZXh0KCkpOworCQkJRG9jdW1lbnQgeG1sUmVwb3J0ID0gZ2V0WE1MUmVwb3J0eih4bWxDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCk7CisJCQlpZiAoc2NhbkNoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCS8vIEFkZCBmaWxlIHNjYW4gaW5mb3JtYXRpb24KKwkJCQlFbGVtZW50IHJvb3QgPSB4bWxSZXBvcnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisJCQkJRWxlbWVudCBjb2RlX3NjYW5fZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJDT0RFX1NDQU4iKTsKKwkJCQlFbGVtZW50IHVuaXF1ZV9lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlVOSVFVRV9SRVNPVVJDRVMiKTsKKwkJCQlFbGVtZW50IG1pc3NpbmdfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJNSVNTSU5HX1JFU09VUkNFUyIpOworCQkJCUVsZW1lbnQgdW51c2VkX2VsZW0gPSB4bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVU5VU0VEX1JFU09VUkNFUyIpOworCQkJCUVsZW1lbnQgdW5pcXVlX3RvdGFsX2VsZW0gPSB4bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVE9UQUwiKTsKKwkJCQlFbGVtZW50IG1pc3NpbmdfdG90YWxfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJUT1RBTCIpOworCQkJCUVsZW1lbnQgdW51c2VkX3RvdGFsX2VsZW0gPSB4bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVE9UQUwiKTsKKwkJCQlUZXh0ICAgIHVuaXF1ZV90b3RhbF90ZXh0ID0geG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKFN0cmluZy52YWx1ZU9mKHNjYW5uZXIuZ2V0TnVtYmVyTWlzc2luZ1Jlc291cmNlcygpKSk7CisJCQkJVGV4dCAgICBtaXNzaW5nX3RvdGFsX3RleHQgPSB4bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2Yoc2Nhbm5lci5nZXROdW1iZXJNaXNzaW5nUmVzb3VyY2VzKCkpKTsKKwkJCQlUZXh0ICAgIHVudXNlZF90b3RhbF90ZXh0ID0geG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKFN0cmluZy52YWx1ZU9mKHNjYW5uZXIuZ2V0TnVtYmVyVW51c2VkUmVzb3VyY2VzKCkpKTsKKwkJCQkKKwkJCQl1bmlxdWVfdG90YWxfZWxlbS5hcHBlbmRDaGlsZCh1bmlxdWVfdG90YWxfdGV4dCk7CisJCQkJbWlzc2luZ190b3RhbF9lbGVtLmFwcGVuZENoaWxkKG1pc3NpbmdfdG90YWxfdGV4dCk7CisJCQkJdW51c2VkX3RvdGFsX2VsZW0uYXBwZW5kQ2hpbGQodW51c2VkX3RvdGFsX3RleHQpOworCQkJCXVuaXF1ZV9lbGVtLmFwcGVuZENoaWxkKHVuaXF1ZV90b3RhbF9lbGVtKTsKKwkJCQltaXNzaW5nX2VsZW0uYXBwZW5kQ2hpbGQobWlzc2luZ190b3RhbF9lbGVtKTsKKwkJCQl1bnVzZWRfZWxlbS5hcHBlbmRDaGlsZCh1bnVzZWRfdG90YWxfZWxlbSk7CisJCQkJY29kZV9zY2FuX2VsZW0uYXBwZW5kQ2hpbGQodW5pcXVlX2VsZW0pOworCQkJCWNvZGVfc2Nhbl9lbGVtLmFwcGVuZENoaWxkKG1pc3NpbmdfZWxlbSk7CisJCQkJY29kZV9zY2FuX2VsZW0uYXBwZW5kQ2hpbGQodW51c2VkX2VsZW0pOworCQkJCXJvb3QuYXBwZW5kQ2hpbGQoY29kZV9zY2FuX2VsZW0pOworCQkJCS8vIE1pc3NpbmcgcmVzb3VyY2VzIGZyb20gdGhlIGJ1bmRsZQorCQkJCVZlY3RvciB2ID0gc2Nhbm5lci5nZXRNaXNzaW5nUmVzb3VyY2VzKCk7CisJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KXYuZWxlbWVudEF0KGkpOworCQkJCQlFbGVtZW50IGl0ZW1fZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJSRVNPVVJDRSIpOworCQkJCQlpdGVtX2VsZW0uc2V0QXR0cmlidXRlKCJOQU1FIixyZXN1bHQuZ2V0TmFtZSgpKTsKKwkJCQkJaWYgKHhtbENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSB7CisJCQkJCQlWZWN0b3Igb2NjX3YgPSByZXN1bHQuZ2V0T2NjdXJhbmNlcygpOworCQkJCQkJZm9yIChpbnQgaj0wOyBqIDwgb2NjX3Yuc2l6ZSgpOyBqKyspIHsKKwkJCQkJCQlPY2N1cmFuY2Ugb2NjID0gKE9jY3VyYW5jZSlvY2Nfdi5lbGVtZW50QXQoaik7CisJCQkJCQkJRWxlbWVudCBvY2NfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJPQ0NVUkFOQ0UiKTsKKwkJCQkJCQlvY2NfZWxlbS5zZXRBdHRyaWJ1dGUoIkZJTEVfTkFNRSIsIG9jYy5nZXRGaWxlTmFtZSgpKTsKKwkJCQkJCQlvY2NfZWxlbS5zZXRBdHRyaWJ1dGUoIkZJTEVfUEFUSCIsIG9jYy5nZXRGaWxlUGF0aCgpKTsKKwkJCQkJCQlvY2NfZWxlbS5zZXRBdHRyaWJ1dGUoIkxJTkVfTlVNQkVSIiwgU3RyaW5nLnZhbHVlT2Yob2NjLmdldExpbmVOdW1iZXIoKSkpOworCQkJCQkJCWl0ZW1fZWxlbS5hcHBlbmRDaGlsZChvY2NfZWxlbSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJbWlzc2luZ19lbGVtLmFwcGVuZENoaWxkKGl0ZW1fZWxlbSk7CisJCQkJfQorCQkJCS8vIEJ1bmRsZSByZXNvdXJjZXMgbm90IGZvdW5kIGluIHRoZSBjb2RlCisJCQkJdiA9IHNjYW5uZXIuZ2V0VW51c2VkUmVzb3VyY2VzKCk7CisJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KXYuZWxlbWVudEF0KGkpOworCQkJCQlFbGVtZW50IGl0ZW1fZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJSRVNPVVJDRSIpOworCQkJCQlpdGVtX2VsZW0uc2V0QXR0cmlidXRlKCJOQU1FIixyZXN1bHQuZ2V0TmFtZSgpKTsKKwkJCQkJaXRlbV9lbGVtLnNldEF0dHJpYnV0ZSgiR1JPVVAiLHJlc3VsdC5nZXRHcm91cE5hbWUoKSk7CisJCQkJCXVudXNlZF9lbGVtLmFwcGVuZENoaWxkKGl0ZW1fZWxlbSk7CisJCQkJfQorCQkJfQorCQkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKHhtbEZpbGUpOworCQkJT3V0cHV0Rm9ybWF0IG9mID0gbmV3IE91dHB1dEZvcm1hdCh4bWxSZXBvcnQpOworCQkJb2Yuc2V0SW5kZW50aW5nKHRydWUpOworCQkJb2Yuc2V0RW5jb2RpbmcoIklTTy04ODU5LTEiKTsKKwkJCVhNTFNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKGZ3LCBvZik7CisJCQlzZXJpYWxpemVyLnNlcmlhbGl6ZSh4bWxSZXBvcnQpOworCQl9CisJCQorCQlsYXN0UmVwb3J0ID0gbmV3IERhdGUoKTsKKwkJbmV4dFJlcG9ydCA9IGdlbmVyYXRlTmV4dFJlcG9ydERhdGUoKTsKKwkJdXBkYXRlRGF0ZUZpZWxkcygpOworCQlpZiAoIWlzVmlzaWJsZSgpKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJCUmVwb3J0ZXI6IEdlbmVyYXRlZCByZXBvcnQgYXQgIiArIGxhc3RSZXBvcnQudG9TdHJpbmcoKSk7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJCUmVwb3J0ZXI6IE5leHQgcmVwb3J0IGF0ICIgKyBuZXh0UmVwb3J0LnRvU3RyaW5nKCkpOworCQl9CisJfQorCQorCS8vIEFzc3VtZXMgdGhlIGxhc3QgcmVwb3J0IHdhcyBqdXN0IGdlbmVyYXRlZCwgYW5kIGNvbXB1dGVzIHRoZSBuZXh0IHJlcG9ydCB0aW1lIGFjY29yZGluZ2x5CisJcHJpdmF0ZSBEYXRlIGdlbmVyYXRlTmV4dFJlcG9ydERhdGUoKSB7CisJCURhdGUgcmV0RGF0ZSA9IG51bGw7CisJCUdyZWdvcmlhbkNhbGVuZGFyIG5vdyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworCQlpZiAoc2VxdWVudGlhbFJhZGlvLmlzU2VsZWN0ZWQoKSkgeworCQkJaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZUNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQkJaWYgKHVuaXRDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCkgbm93LmFkZChDYWxlbmRhci5NSU5VVEUsIHZhbHVlKTsKKwkJCWVsc2UgaWYgKHVuaXRDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMSkgbm93LmFkZChDYWxlbmRhci5IT1VSLCB2YWx1ZSk7CisJCQllbHNlIGlmICh1bml0Q29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpID09IDIpIG5vdy5hZGQoQ2FsZW5kYXIuREFURSwgdmFsdWUpOworCQkJcmV0RGF0ZSA9IG5vdy5nZXRUaW1lKCk7CisJCX0gZWxzZSBpZiAoZGVmaW5lZFJhZGlvLmlzU2VsZWN0ZWQoKSkgeworCQkJaW50IGhvdXIgPSBJbnRlZ2VyLnBhcnNlSW50KGhvdXJDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJCWludCBtaW51dGUgPSBJbnRlZ2VyLnBhcnNlSW50KG1pbnV0ZUNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQkJaW50IGRheSA9IGRheUNvbWJvLmdldFNlbGVjdGVkSW5kZXgoKTsKKwkJCQorCQkJR3JlZ29yaWFuQ2FsZW5kYXIgdGhlbiA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworCQkJdGhlbi5zZXQoQ2FsZW5kYXIuSE9VUiwgaG91cik7CisJCQl0aGVuLnNldChDYWxlbmRhci5NSU5VVEUsIG1pbnV0ZSk7CisJCQl0aGVuLnNldChDYWxlbmRhci5TRUNPTkQsIDApOworCQkJCisJCQlpZiAodGhlbi5nZXRUaW1lKCkuY29tcGFyZVRvKG5vdy5nZXRUaW1lKCkpIDw9IDApIHRoZW4uYWRkKENhbGVuZGFyLkRBVEUsIDEpOworCQkJaWYgKGRheSA+IDAgJiYgZGF5IDw9IDcpIHsKKwkJCQkvLyBNYWtlIHN1cmUgd2UgYXJlIGF0IHRoZSByaWdodCBkYXkKKwkJCQlib29sZWFuIHJpZ2h0RGF5ID0gZmFsc2U7CisJCQkJd2hpbGUgKCFyaWdodERheSkgeworCQkJCQlpbnQgd2Vla0RheSA9IHRoZW4uZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKTsKKwkJCQkJaWYgKChkYXkgPT0gMSAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLk1PTkRBWSkgfHwKKwkJCQkJCShkYXkgPT0gMiAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLlRVRVNEQVkpIHx8CisJCQkJCQkoZGF5ID09IDMgJiYgd2Vla0RheSA9PSBDYWxlbmRhci5XRURORVNEQVkpIHx8CisJCQkJCQkoZGF5ID09IDQgJiYgd2Vla0RheSA9PSBDYWxlbmRhci5USFVSU0RBWSkgfHwKKwkJCQkJCShkYXkgPT0gNSAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLkZSSURBWSkgfHwKKwkJCQkJCShkYXkgPT0gNiAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLlNBVFVSREFZKSB8fAorCQkJCQkJKGRheSA9PSA3ICYmIHdlZWtEYXkgPT0gQ2FsZW5kYXIuU1VOREFZKSkgcmlnaHREYXkgPSB0cnVlOworCQkJCQllbHNlIHRoZW4uYWRkKENhbGVuZGFyLkRBVEUsIDEpOworCQkJCX0KKwkJCX0KKwkJCXJldERhdGUgPSB0aGVuLmdldFRpbWUoKTsKKwkJfQorCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIk5leHQgRGF0ZTogIiArIHJldERhdGUudG9TdHJpbmcoKSk7CisJCXJldHVybiByZXREYXRlOworCX0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgYmFzZWQgdGV4dCByZXBvcnQgYWJvdXQgYWxsIG9mIHRoZSBsYW5ndWFnZSBmaWxlcyBvbiByZWNvcmQKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldEFsbExhbmd1YWdlUmVwb3J0cyhib29sZWFuIGRldGFpbGVkKSB7CisgICAgICAgIFN0cmluZyByZXRTdHIgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIHJldFN0ciA9ICAgICJSZXNvdXJjZSBCdW5kbGUgUmVwb3J0OiAiICsgcmJtLmdldEJhc2VDbGFzcygpOworICAgICAgICByZXRTdHIgKz0gIlxuUmVwb3J0IEdlbmVyYXRlZDogICAgICAgIiArIChuZXcgRGF0ZSgpKS50b1N0cmluZygpICsgIlxuXG4iOworICAgICAgICBWZWN0b3IgYnVuZGxlcyA9IHJibS5nZXRCdW5kbGVzKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHJldFN0ciArPSBnZXRMYW5ndWFnZVJlcG9ydChkZXRhaWxlZCwgKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKSk7CQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgfQorCQorICAgIHByaXZhdGUgU3RyaW5nIGdldExhbmd1YWdlUmVwb3J0KGJvb2xlYW4gZGV0YWlsZWQsIEJ1bmRsZSBkaWN0KSB7CisgICAgICAgIGlmIChkaWN0ID09IG51bGwpIHJldHVybiAiIjsKKyAgICAgICAgU3RyaW5nIHJldFN0ciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgcmV0U3RyICs9ICJcbkxhbmd1YWdlOiAiICsgKGRpY3QubGFuZ3VhZ2UgPT0gbnVsbCA/IGRpY3QuZW5jb2RpbmcgOiBkaWN0Lmxhbmd1YWdlKTsKKyAgICAgICAgcmV0U3RyICs9IChkaWN0LmNvdW50cnkgPT0gbnVsbCA/ICIiIDogIiAtIENvdW50cnk6ICIgKyBkaWN0LmNvdW50cnkpOworICAgICAgICByZXRTdHIgKz0gKGRpY3QudmFyaWFudCA9PSBudWxsID8gIiIgOiAiIC0gVmFyaWFudDogIiArIGRpY3QudmFyaWFudCk7CisgICAgICAgIHJldFN0ciArPSAiXG4iOworICAgICAgICByZXRTdHIgKz0gIiAgTnVtYmVyIG9mIE5MUyBpdGVtcyBpbiB0aGUgZmlsZTogIiArIGRpY3QuYWxsSXRlbXMuc2l6ZSgpICsgIlxuIjsKKwkJCisgICAgICAgIGludCB1bnRyYW5zbGF0ZWQgPSAwOworICAgICAgICBTdHJpbmcgdW50cmFuc1N0ciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgRW51bWVyYXRpb24gaXRlbXMgPSBkaWN0LmFsbEl0ZW1zLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChpdGVtcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSB0ZW1wSXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAodGVtcEl0ZW0uaXNUcmFuc2xhdGVkKCkpIGNvbnRpbnVlOworICAgICAgICAgICAgdW50cmFuc2xhdGVkKys7CisgICAgICAgICAgICB1bnRyYW5zU3RyICs9ICIgIiArIHRlbXBJdGVtLmdldEtleSgpOworICAgICAgICB9CisgICAgICAgIHJldFN0ciArPSAiICBOdW1iZXIgb2YgTkxTIGl0ZW1zIG5vdCB0cmFuc2xhdGVkOiAiICsgdW50cmFuc2xhdGVkOworICAgICAgICBpZiAoZGV0YWlsZWQpIHsKKyAgICAgICAgICAgIHJldFN0ciArPSAiXG4gIFVudHJhbnNsYXRlZCBOTFMga2V5czogIiArIHVudHJhbnNTdHI7CQorICAgICAgICB9CisJCQorICAgICAgICByZXR1cm4gcmV0U3RyOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIFhIVE1MIGZvcm1hdHRlZCByZXBvcnQgb24gdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCByZXNvdXJjZSBidW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgRG9jdW1lbnQgZ2V0SFRNTFJlcG9ydHooYm9vbGVhbiBkZXRhaWxlZCkgeworICAgICAgICBEb2N1bWVudCBodG1sID0gbmV3IERvY3VtZW50SW1wbCgpOworICAgICAgICBFbGVtZW50IHJvb3QgPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKKyAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgRWxlbWVudCBoZWFkX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkhFQUQiKTsKKyAgICAgICAgRWxlbWVudCB0aXRsZV9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJUSVRMRSIpOworICAgICAgICBUZXh0ICAgIHRpdGxlX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKCJSZXNvdXJjZSBCdW5kbGUgUmVwb3J0IC0gIiArIHJibS5nZXRCYXNlQ2xhc3MoKSk7CisgICAgICAgIEVsZW1lbnQgYm9keV9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJCT0RZIik7CisgICAgICAgIEVsZW1lbnQgY2VudGVyMV9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJDRU5URVIiKTsKKyAgICAgICAgRWxlbWVudCBoMV9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJIMSIpOworICAgICAgICBFbGVtZW50IGNlbnRlcjJfZWxlbSA9IGh0bWwuY3JlYXRlRWxlbWVudCgiQ0VOVEVSIik7CisgICAgICAgIEVsZW1lbnQgaDNfZWxlbSA9IGh0bWwuY3JlYXRlRWxlbWVudCgiSDEiKTsKKyAgICAgICAgVGV4dCAgICB0aXRsZTFfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUoIlJlc291cmNlIEJ1bmRsZSBSZXBvcnQ6ICIgKyByYm0uZ2V0QmFzZUNsYXNzKCkpOworICAgICAgICBUZXh0ICAgIHRpdGxlMl90ZXh0ID0gaHRtbC5jcmVhdGVUZXh0Tm9kZSgiUmVwb3J0IEdlbmVyYXRlZDogIiArIChuZXcgRGF0ZSgpKS50b1N0cmluZygpKTsKKyAgICAgICAgVmVjdG9yIGJ1bmRsZXMgPSByYm0uZ2V0QnVuZGxlcygpOworCQkKKyAgICAgICAgdGl0bGVfZWxlbS5hcHBlbmRDaGlsZCh0aXRsZV90ZXh0KTsKKyAgICAgICAgaGVhZF9lbGVtLmFwcGVuZENoaWxkKHRpdGxlX2VsZW0pOworICAgICAgICBoMV9lbGVtLmFwcGVuZENoaWxkKHRpdGxlMV90ZXh0KTsKKyAgICAgICAgaDNfZWxlbS5hcHBlbmRDaGlsZCh0aXRsZTJfdGV4dCk7CisgICAgICAgIGNlbnRlcjFfZWxlbS5hcHBlbmRDaGlsZChoMV9lbGVtKTsKKyAgICAgICAgY2VudGVyMl9lbGVtLmFwcGVuZENoaWxkKGgzX2VsZW0pOworICAgICAgICBib2R5X2VsZW0uYXBwZW5kQ2hpbGQoY2VudGVyMV9lbGVtKTsKKyAgICAgICAgYm9keV9lbGVtLmFwcGVuZENoaWxkKGNlbnRlcjJfZWxlbSk7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoaGVhZF9lbGVtKTsKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChib2R5X2VsZW0pOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgZ2V0SFRNTExhbmd1YWdlUmVwb3J0eihodG1sLCBib2R5X2VsZW0sIGRldGFpbGVkLCAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBodG1sOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgSFRNTCByZXBvcnQgYXMgYSBTdHJpbmcgb2JqZWN0IG9uIHRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRIVE1MUmVwb3J0KGJvb2xlYW4gZGV0YWlsZWQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPEhUTUw+XG48SEVBRD48VElUTEU+UmVzb3VyY2UgQnVuZGxlIFJlcG9ydCAtICIgKyByYm0uZ2V0QmFzZUNsYXNzKCkgKyAiPC9USVRMRT48L0hFQUQ+XG48Qk9EWT5cbiIpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8Q0VOVEVSPjxIMT5SZXNvdXJjZSBCdW5kbGUgUmVwb3J0OiAiICsgcmJtLmdldEJhc2VDbGFzcygpICsgIjwvSDE+PC9DRU5URVI+XG4iKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPENFTlRFUj48SDM+UmVwb3J0IEdlbmVyYXRlZDogIiArIChuZXcgRGF0ZSgpKS50b1N0cmluZygpICsgIjwvSDM+PC9DRU5URVI+XG4iKTsKKwkJCisgICAgICAgIFZlY3RvciBidW5kbGVzID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChnZXRIVE1MTGFuZ3VhZ2VSZXBvcnQoZGV0YWlsZWQsIChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSkpKTsJCisgICAgICAgIH0KKwkJCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjwvQk9EWT5cbjwvSFRNTD4iKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKwkKKyAgICBwcml2YXRlIHZvaWQgZ2V0SFRNTExhbmd1YWdlUmVwb3J0eihEb2N1bWVudCBodG1sLCBFbGVtZW50IGJvZHlfZWxlbSwgYm9vbGVhbiBkZXRhaWxlZCwgQnVuZGxlIGRpY3QpIHsKKyAgICAgICAgRWxlbWVudCBoMl9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJIMiIpOworICAgICAgICBUZXh0ICAgIGgyX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKCJMYW5ndWFnZTogIiArIChkaWN0Lmxhbmd1YWdlID09IG51bGwgPyBkaWN0LmVuY29kaW5nIDogZGljdC5sYW5ndWFnZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAoZGljdC5jb3VudHJ5ID09IG51bGwgPyAiIiA6ICIgLSBDb3VudHJ5OiAiICsgZGljdC5jb3VudHJ5KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWN0LnZhcmlhbnQgPT0gbnVsbCA/ICIiIDogIiAtIFZhcmlhbnQ6ICIgKyBkaWN0LnZhcmlhbnQpKTsKKyAgICAgICAgRWxlbWVudCBibG9ja19lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJCTE9DS1FVT1RFIik7CisgICAgICAgIEVsZW1lbnQgcF9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJQIik7CisgICAgICAgIFRleHQgICAgcF90ZXh0ID0gaHRtbC5jcmVhdGVUZXh0Tm9kZSgiTnVtYmVyIG9mIE5MUyBpdGVtcyBpbiB0aGUgZmlsZTogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2YoZGljdC5hbGxJdGVtcy5zaXplKCkpKTsKKyAgICAgICAgRWxlbWVudCB1bF9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJVTCIpOworICAgICAgICBUZXh0ICAgIHVsX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKCJVbnRyYW5zbGF0ZWQgTkxTIGtleXM6Iik7CisJCQorICAgICAgICBoMl9lbGVtLmFwcGVuZENoaWxkKGgyX3RleHQpOworICAgICAgICBwX2VsZW0uYXBwZW5kQ2hpbGQocF90ZXh0KTsKKyAgICAgICAgdWxfZWxlbS5hcHBlbmRDaGlsZCh1bF90ZXh0KTsKKyAgICAgICAgYmxvY2tfZWxlbS5hcHBlbmRDaGlsZChwX2VsZW0pOworICAgICAgICBib2R5X2VsZW0uYXBwZW5kQ2hpbGQoaDJfZWxlbSk7CisgICAgICAgIGJvZHlfZWxlbS5hcHBlbmRDaGlsZChibG9ja19lbGVtKTsKKwkJCisgICAgICAgIGludCB1bnRyYW5zbGF0ZWQgPSAwOworICAgICAgICBFbnVtZXJhdGlvbiBpdGVtcyA9IGRpY3QuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGl0ZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIHRlbXBJdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0ZW1wSXRlbS5pc1RyYW5zbGF0ZWQoKSkgY29udGludWU7CisgICAgICAgICAgICB1bnRyYW5zbGF0ZWQrKzsKKyAgICAgICAgICAgIGlmIChkZXRhaWxlZCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgbGlfZWxlbSA9IGh0bWwuY3JlYXRlRWxlbWVudCgiTEkiKTsKKyAgICAgICAgICAgICAgICBUZXh0ICAgIGxpX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKHRlbXBJdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICBsaV9lbGVtLmFwcGVuZENoaWxkKGxpX3RleHQpOworICAgICAgICAgICAgICAgIHVsX2VsZW0uYXBwZW5kQ2hpbGQobGlfZWxlbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRWxlbWVudCBwMl9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJQIik7CisgICAgICAgIFRleHQgICAgcDJfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUoIk51bWJlciBvZiBOTFMgaXRlbXMgbm90IHRyYW5zbGF0ZWQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZih1bnRyYW5zbGF0ZWQpKTsKKyAgICAgICAgcDJfZWxlbS5hcHBlbmRDaGlsZChwMl90ZXh0KTsKKyAgICAgICAgYmxvY2tfZWxlbS5hcHBlbmRDaGlsZChwMl9lbGVtKTsKKyAgICAgICAgaWYgKGRldGFpbGVkKSBibG9ja19lbGVtLmFwcGVuZENoaWxkKHVsX2VsZW0pOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBnZXRIVE1MTGFuZ3VhZ2VSZXBvcnQoYm9vbGVhbiBkZXRhaWxlZCwgQnVuZGxlIGRpY3QpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG48SDI+TGFuZ3VhZ2U6ICIgKyAoZGljdC5sYW5ndWFnZSA9PSBudWxsID8gZGljdC5lbmNvZGluZyA6IGRpY3QubGFuZ3VhZ2UpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkaWN0LmNvdW50cnkgPT0gbnVsbCA/ICIiIDogIiAtIENvdW50cnk6ICIgKyBkaWN0LmNvdW50cnkpOworICAgICAgICBidWZmZXIuYXBwZW5kKGRpY3QudmFyaWFudCA9PSBudWxsID8gIiIgOiAiIC0gVmFyaWFudDogIiArIGRpY3QudmFyaWFudCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjwvSDI+XG4iKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPEJMT0NLUVVPVEU+XG4iKTsKKyAgICAgICAgCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjxQPk51bWJlciBvZiBOTFMgaXRlbXMgaW4gdGhlIGZpbGU6ICIgKyBTdHJpbmcudmFsdWVPZihkaWN0LmFsbEl0ZW1zLnNpemUoKSkgKyAiPC9QPlxuIik7CisgICAgICAgIGludCB1bnRyYW5zbGF0ZWQgPSAwOworICAgICAgICBFbnVtZXJhdGlvbiBpdGVtcyA9IGRpY3QuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGlubmVyQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICB3aGlsZSAoaXRlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gdGVtcEl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHRlbXBJdGVtLmlzVHJhbnNsYXRlZCgpKSBjb250aW51ZTsKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZCsrOworICAgICAgICAgICAgaW5uZXJCdWZmZXIuYXBwZW5kKCI8TEk+IiArIHRlbXBJdGVtLmdldEtleSgpICsgIjwvTEk+XG4iKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuYXBwZW5kKCI8UD5OdW1iZXIgb2YgTkxTIGl0ZW1zIG5vdCB0cmFuc2xhdGVkOiAiICsgU3RyaW5nLnZhbHVlT2YodW50cmFuc2xhdGVkKSArICI8L1A+XG4iKTsKKyAgICAgICAgaWYgKGRldGFpbGVkKSB7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCI8VUw+VW50cmFuc2xhdGVkIE5MUyBrZXlzOlxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlubmVyQnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiPC9VTD5cbiIpOworICAgICAgICB9CisJCQorICAgICAgICBidWZmZXIuYXBwZW5kKCI8L0JMT0NLUVVPVEU+XG4iKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gWE1MIGZvcm1hdHRlZCByZXBvcnQgb24gdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudGx5IG9wZW4gcmVzb3VyY2UgYnVuZGxlCisgICAgICovIAorCQorICAgIHB1YmxpYyBEb2N1bWVudCBnZXRYTUxSZXBvcnR6KGJvb2xlYW4gZGV0YWlsZWQpIHsKKyAgICAgICAgRG9jdW1lbnQgeG1sID0gbmV3IERvY3VtZW50SW1wbCgpOworICAgICAgICBFbGVtZW50IHJvb3QgPSB4bWwuY3JlYXRlRWxlbWVudCgiUkVQT1JUIik7CisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJCQVNFQ0xBU1MiLCByYm0uZ2V0QmFzZUNsYXNzKCkpOworICAgICAgICByb290LnNldEF0dHJpYnV0ZSgiREFURSIsIChuZXcgRGF0ZSgpKS50b1N0cmluZygpKTsKKyAgICAgICAgeG1sLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgICAgIFZlY3RvciBidW5kbGVzID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChnZXRYTUxMYW5ndWFnZVJlcG9ydHooeG1sLCBkZXRhaWxlZCwgKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB4bWw7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gWE1MIGZvcm1hdHRlZCByZXBvcnQgYXMgYSBTdHJpbmcgb2JqZWN0IG9uIHRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnRseSBvcGVuIHJlc291cmNlIGJ1bmRsZQorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0WE1MUmVwb3J0KGJvb2xlYW4gZGV0YWlsZWQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbiIpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8UkVQT1JUIEJBU0VDTEFTUz1cIiIgKyByYm0uZ2V0QmFzZUNsYXNzKCkgKyAiXCIgREFURT1cIiIgKyAobmV3IERhdGUoKSkudG9TdHJpbmcoKSArICJcIj5cbiIpOworCisgICAgICAgIFZlY3RvciBidW5kbGVzID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChnZXRYTUxMYW5ndWFnZVJlcG9ydChkZXRhaWxlZCwgKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKSkpOwkKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuYXBwZW5kKCI8L1JFUE9SVD4iKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKwkKKyAgICBwcml2YXRlIEVsZW1lbnQgZ2V0WE1MTGFuZ3VhZ2VSZXBvcnR6KERvY3VtZW50IHhtbCwgYm9vbGVhbiBkZXRhaWxlZCwgQnVuZGxlIGRpY3QpIHsKKyAgICAgICAgRWxlbWVudCBsYW5nX3JlcG9ydF9lbGVtID0geG1sLmNyZWF0ZUVsZW1lbnQoIkxBTkdVQUdFX1JFUE9SVCIpOworICAgICAgICBFbGVtZW50IGxvY2FsZV9lbGVtID0geG1sLmNyZWF0ZUVsZW1lbnQoIkxPQ0FMRSIpOworICAgICAgICBsb2NhbGVfZWxlbS5zZXRBdHRyaWJ1dGUoIkxBTkdVQUdFIiwgKGRpY3QubGFuZ3VhZ2UgPT0gbnVsbCA/IGRpY3QuZW5jb2RpbmcgOiBkaWN0Lmxhbmd1YWdlKSk7CisgICAgICAgIGxvY2FsZV9lbGVtLnNldEF0dHJpYnV0ZSgiQ09VTlRSWSIsIChkaWN0LmNvdW50cnkgPT0gbnVsbCA/ICIiIDogZGljdC5jb3VudHJ5KSk7CisgICAgICAgIGxvY2FsZV9lbGVtLnNldEF0dHJpYnV0ZSgiVkFSSUFOVCIsIChkaWN0LnZhcmlhbnQgPT0gbnVsbCA/ICIiIDogZGljdC52YXJpYW50KSk7CisgICAgICAgIEVsZW1lbnQgbmxzX3RvdGFsX2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgiTkxTX1RPVEFMIik7CisgICAgICAgIFRleHQgICAgbmxzX3RvdGFsX3RleHQgPSB4bWwuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2YoZGljdC5hbGxJdGVtcy5zaXplKCkpKTsKKyAgICAgICAgRWxlbWVudCB1bnRyYW5zbGF0ZWRfdG90YWxfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJVTlRSQU5TTEFURURfVE9UQUwiKTsKKyAgICAgICAgRWxlbWVudCB1bnRyYW5zbGF0ZWRfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJVTlRSQU5TTEFURUQiKTsKKyAgICAgICAgCisgICAgICAgIG5sc190b3RhbF9lbGVtLmFwcGVuZENoaWxkKG5sc190b3RhbF90ZXh0KTsKKyAgICAgICAgbGFuZ19yZXBvcnRfZWxlbS5hcHBlbmRDaGlsZChsb2NhbGVfZWxlbSk7CisgICAgICAgIGxhbmdfcmVwb3J0X2VsZW0uYXBwZW5kQ2hpbGQobmxzX3RvdGFsX2VsZW0pOworICAgICAgICBsYW5nX3JlcG9ydF9lbGVtLmFwcGVuZENoaWxkKHVudHJhbnNsYXRlZF90b3RhbF9lbGVtKTsKKyAgICAgICAgaWYgKGRldGFpbGVkKSBsYW5nX3JlcG9ydF9lbGVtLmFwcGVuZENoaWxkKHVudHJhbnNsYXRlZF9lbGVtKTsKKwkJCisgICAgICAgIGludCB1bnRyYW5zbGF0ZWQgPSAwOworICAgICAgICBFbnVtZXJhdGlvbiBpdGVtcyA9IGRpY3QuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGl0ZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIHRlbXBJdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0ZW1wSXRlbS5pc1RyYW5zbGF0ZWQoKSkgY29udGludWU7CisgICAgICAgICAgICB1bnRyYW5zbGF0ZWQrKzsKKyAgICAgICAgICAgIEVsZW1lbnQgcmVzb3VyY2VfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJSRVNPVVJDRUtFWSIpOworICAgICAgICAgICAgVGV4dCAgICByZXNvdXJjZV90ZXh0ID0geG1sLmNyZWF0ZVRleHROb2RlKHRlbXBJdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlX2VsZW0uYXBwZW5kQ2hpbGQocmVzb3VyY2VfdGV4dCk7CisgICAgICAgICAgICB1bnRyYW5zbGF0ZWRfZWxlbS5hcHBlbmRDaGlsZChyZXNvdXJjZV9lbGVtKTsKKyAgICAgICAgfQorICAgICAgICBUZXh0IHVudHJhbnNsYXRlZF90b3RhbF90ZXh0ID0geG1sLmNyZWF0ZVRleHROb2RlKFN0cmluZy52YWx1ZU9mKHVudHJhbnNsYXRlZCkpOworICAgICAgICB1bnRyYW5zbGF0ZWRfdG90YWxfZWxlbS5hcHBlbmRDaGlsZCh1bnRyYW5zbGF0ZWRfdG90YWxfdGV4dCk7CisJCQorICAgICAgICByZXR1cm4gbGFuZ19yZXBvcnRfZWxlbTsKKyAgICB9CisJCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0WE1MTGFuZ3VhZ2VSZXBvcnQoYm9vbGVhbiBkZXRhaWxlZCwgQnVuZGxlIGRpY3QpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPExBTkdVQUdFX1JFUE9SVD5cbiIpOworICAgICAgICAKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG5cdDxMT0NBTEUgTEFOR1VBR0U9XCIiICsgKGRpY3QubGFuZ3VhZ2UgPT0gbnVsbCA/IGRpY3QuZW5jb2RpbmcgOiBkaWN0Lmxhbmd1YWdlKSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlwiIENPVU5UUlk9XCIiICsgKGRpY3QuY291bnRyeSA9PSBudWxsID8gIiIgOiBkaWN0LmNvdW50cnkpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXCIgVkFSSUFOVD1cIiIgKyAoZGljdC52YXJpYW50ID09IG51bGwgPyAiIiA6IGRpY3QudmFyaWFudCkgKyAiXCIvPlxuIik7CisJCQorICAgICAgICBidWZmZXIuYXBwZW5kKCJcdDxOTFNfVE9UQUw+IiArIFN0cmluZy52YWx1ZU9mKGRpY3QuYWxsSXRlbXMuc2l6ZSgpKSArICI8L05MU19UT1RBTD5cbiIpOworICAgICAgICBpbnQgdW50cmFuc2xhdGVkID0gMDsKKyAgICAgICAgRW51bWVyYXRpb24gaXRlbXMgPSBkaWN0LmFsbEl0ZW1zLmVsZW1lbnRzKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBpbm5lckJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgd2hpbGUgKGl0ZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIHRlbXBJdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0ZW1wSXRlbS5pc1RyYW5zbGF0ZWQoKSkgY29udGludWU7CisgICAgICAgICAgICB1bnRyYW5zbGF0ZWQrKzsKKyAgICAgICAgICAgIGlubmVyQnVmZmVyLmFwcGVuZCgiXHRcdDxSRVNPVVJDRUtFWT4iICsgdGVtcEl0ZW0uZ2V0S2V5KCkgKyAiPC9SRVNPVVJDRUtFWT5cbiIpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0PFVOVFJBTlNMQVRFRF9UT1RBTD4iICsgU3RyaW5nLnZhbHVlT2YodW50cmFuc2xhdGVkKSArICI8L1VOVFJBTlNMQVRFRF9UT1RBTD5cbiIpOworICAgICAgICBpZiAoZGV0YWlsZWQpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0PFVOVFJBTlNMQVRFRD5cbiIpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChpbm5lckJ1ZmZlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0PC9VTlRSQU5TTEFURUQ+XG4iKTsKKyAgICAgICAgfQorCQkKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPC9MQU5HVUFHRV9SRVBPUlQ+XG4iKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKwkKKwlwcml2YXRlIHZvaWQgdXBkYXRlRGF0ZUZpZWxkcygpIHsKKwkJaWYgKG5leHRSZXBvcnQgPT0gbnVsbCkgbmV4dFJlcG9ydExhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9uZXh0X3JlcG9ydCIsICItLSIpKTsKKwkJZWxzZSBuZXh0UmVwb3J0TGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX25leHRfcmVwb3J0IiwgbmV4dFJlcG9ydC50b1N0cmluZygpKSk7CisJCWlmIChsYXN0UmVwb3J0ID09IG51bGwpIGxhc3RSZXBvcnRMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfbGFzdF9yZXBvcnQiLCAiLS0iKSk7CisJCWVsc2UgbGFzdFJlcG9ydExhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9sYXN0X3JlcG9ydCIsIGxhc3RSZXBvcnQudG9TdHJpbmcoKSkpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgdXBkYXRlU3RhdHVzQ29tcG9uZW50cygpIHsKKwkJaWYgKHJ1bm5pbmcpIHsKKwkJCXN0YXR1c0xhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9zdGF0dXNfcnVubmluZyIpKTsKKwkJCXN0YXR1c0xhYmVsLnNldEZvcmVncm91bmQoQ29sb3IuZ3JlZW4pOworCQkJc3RhdHVzQnV0dG9uLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fc3RvcCIpKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1c0xhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9zdGF0dXNfc3RvcHBlZCIpKTsKKwkJCXN0YXR1c0xhYmVsLnNldEZvcmVncm91bmQoQ29sb3IucmVkKTsKKwkJCXN0YXR1c0J1dHRvbi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfYnV0dG9uX3N0YXJ0IikpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBzZXRDb21wb25lbnRzVG9EZWZhdWx0cygpIHsKKwkJaWYgKChydW5uaW5nICYmIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2VuYWJsZWQiKS5lcXVhbHMoIk5vIikpIHx8CisJCQkoIXJ1bm5pbmcgJiYgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZW5hYmxlZCIpLmVxdWFscygiWWVzIikpKSB0b2dnbGVTdGF0dXMoKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2VuYWJsZWQiKSAhPSBudWxsKQorCQkJdGV4dENoZWNrLnNldFNlbGVjdGVkKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2VuYWJsZWQiKS5lcXVhbHMoIlllcyIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2VuYWJsZWQiKSAhPSBudWxsKQorCQkJaHRtbENoZWNrLnNldFNlbGVjdGVkKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2VuYWJsZWQiKS5lcXVhbHMoIlllcyIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZW5hYmxlZCIpICE9IG51bGwpCisJCQkJeG1sQ2hlY2suc2V0U2VsZWN0ZWQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9lbmFibGVkIikuZXF1YWxzKCJZZXMiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfdGV4dF9maWxlIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2ZpbGUiKS5lcXVhbHMoIiIpKQorCQkJdGV4dEZpZWxkLnNldFRleHQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZmlsZSIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2ZpbGUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZmlsZSIpLmVxdWFscygiIikpCisJCQlodG1sRmllbGQuc2V0VGV4dChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9maWxlIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9maWxlIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZmlsZSIpLmVxdWFscygiIikpCisJCQl4bWxGaWVsZC5zZXRUZXh0KFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZmlsZSIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2RldGFpbCIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfdGV4dF9kZXRhaWwiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZSh0ZXh0Q29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2RldGFpbCIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2RldGFpbCIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9kZXRhaWwiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZShodG1sQ29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2RldGFpbCIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZGV0YWlsIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZGV0YWlsIikuZXF1YWxzKCIiKSkKKwkJCXNlbGVjdENvbWJvVmFsdWUoeG1sQ29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZGV0YWlsIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWwiKS5lcXVhbHMoIlNlcXVlbnRpYWwiKSkKKwkJCXNlcXVlbnRpYWxSYWRpby5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJZWxzZSBkZWZpbmVkUmFkaW8uc2V0U2VsZWN0ZWQodHJ1ZSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3ZhbHVlIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWUiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZSh2YWx1ZUNvbWJvLCBQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3ZhbHVlIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF91bml0cyIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3VuaXRzIikuZXF1YWxzKCIiKSkKKwkJCXNlbGVjdENvbWJvVmFsdWUodmFsdWVDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF91bml0cyIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfaG91ciIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX2hvdXIiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZShob3VyQ29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfaG91ciIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfZGF5IikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfZGF5IikuZXF1YWxzKCIiKSkKKwkJCXNlbGVjdENvbWJvVmFsdWUoZGF5Q29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfZGF5IikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGUiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZShtaW51dGVDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGUiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9zY2FuX2ZpbGUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfc2Nhbl9maWxlIikuZXF1YWxzKCIiKSkKKwkJCXNjYW5GaWVsZC5zZXRUZXh0KFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX3NjYW5fZmlsZSIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX3BlcmZvcm1fc2NhbiIpICE9IG51bGwpCisJCQlzY2FuQ2hlY2suc2V0U2VsZWN0ZWQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfcGVyZm9ybV9zY2FuIikuZXF1YWxzKCJZZXMiKSk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2VsZWN0Q29tYm9WYWx1ZShKQ29tYm9Cb3ggYm94LCBTdHJpbmcgdmFsdWUpIHsKKwkJZm9yIChpbnQgaT0wOyBpIDwgYm94LmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCWlmIChib3guZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzKHZhbHVlKSkgeworCQkJCWJveC5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBzYXZlRGVmYXVsdHMoKSB7CisJCS8vIFNhdmUgZm9ybWF0IG9wdGlvbnMKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZW5hYmxlZCIsICh0ZXh0Q2hlY2suaXNTZWxlY3RlZCgpID8gIlllcyIgOiAiTm8iKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2ZpbGUiLCB0ZXh0RmllbGQuZ2V0VGV4dCgpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZGV0YWlsIiwgdGV4dENvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9lbmFibGVkIiwgKGh0bWxDaGVjay5pc1NlbGVjdGVkKCkgPyAiWWVzIiA6ICJObyIpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZmlsZSIsIGh0bWxGaWVsZC5nZXRUZXh0KCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9kZXRhaWwiLCBodG1sQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF94bWxfZW5hYmxlZCIsICh4bWxDaGVjay5pc1NlbGVjdGVkKCkgPyAiWWVzIiA6ICJObyIpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9maWxlIiwgeG1sRmllbGQuZ2V0VGV4dCgpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWwiLCB4bWxDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfc2Nhbl9maWxlIiwgc2NhbkZpZWxkLmdldFRleHQoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX3BlcmZvcm1fc2NhbiIsIChzY2FuQ2hlY2suaXNTZWxlY3RlZCgpID8gIlllcyIgOiAiTm8iKSk7CisJCS8vIFNhdmUgaW50ZXJ2YWwgb3B0aW9ucworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbCIsIChzZXF1ZW50aWFsUmFkaW8uaXNTZWxlY3RlZCgpID8gIlNlcXVlbnRpYWwiIDogIkRlZmluZWQiKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWUiLCB2YWx1ZUNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3VuaXRzIiwgdW5pdENvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX2hvdXIiLCBob3VyQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfbWludXRlIiwgbWludXRlQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfZGF5IiwgZGF5Q29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCS8vIFNhdmUgc3lzdGVtIG9wdGlvbnMKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZW5hYmxlZCIsIChydW5uaW5nID8gIlllcyIgOiAiTm8iKSk7CisJCS8vIFdyaXRlIHRoZSBwcmVmZXJlbmNlcworCQl0cnkgeworCQkJUHJlZmVyZW5jZXMuc2F2ZVByZWZlcmVuY2VzKCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJLy8gVE9ETzogV2FybiBvZiBlcnJvciB0aHJvdWdoIEpPcHRpb25QYW5lCisJCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHRvZ2dsZVN0YXR1cygpIHsKKwkJaWYgKHJ1bm5pbmcpIHsKKwkJCXJ1bm5pbmcgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCXJ1bm5pbmcgPSB0cnVlOworCQl9CisJCXVwZGF0ZVN0YXR1c0NvbXBvbmVudHMoKTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQkKKwkJLy8gRmlsZSBjaG9vc2VycworCQlidW5kbGVGaWxlQ2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCkgeworCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCWlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworCQkJCQorCQkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQkJaWYgKCEobmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIucHJvcGVydGllcyIpKSkgcmV0dXJuIGZhbHNlOworCQkJCWlmIChuYW1lLmluZGV4T2YoIl8iKSA+IDApIHJldHVybiBmYWxzZTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQkJcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uIik7CisJCQl9CisJCX0pOworCQlidW5kbGVGaWxlQ2hvb3Nlci5zZXRTZWxlY3RlZEZpbGUobmV3IEZpbGUoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfYmFzZV9jbGFzc19maWxlIikpKTsKKwkJCisJCWRpcmVjdG9yeUZpbGVDaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKSB7CisJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQorCQkJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJCQlyZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaXJlY3RvcnkiKTsKKwkJCX0KKwkJfSk7CisJCWRpcmVjdG9yeUZpbGVDaG9vc2VyLnNldFNlbGVjdGVkRmlsZShuZXcgRmlsZShQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5IikpKTsKKwkJCisJCXNjYW5GaWxlQ2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCkgeworCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCWlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworCQkJCWlmIChmLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSByZXR1cm4gdHJ1ZTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCisJCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQkJCXJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbl9zY2FuIik7CisJCQl9CisJCX0pOworCQlzY2FuRmlsZUNob29zZXIuc2V0U2VsZWN0ZWRGaWxlKG5ldyBGaWxlKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX3NjYW5fZmlsZSIpKSk7CisJCQorCQkvLyBOZXcgdG9wIGxldmVsIGNvbXBvbmVudHMKKwkJSlBhbmVsIHN0YXR1c1BhbmVsID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgaW50ZXJ2YWxQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIG9wdGlvbnNQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIGZvcm1hdFBhbmVsID0gbmV3IEpQYW5lbCgpOworCQlCb3ggbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCWludCB3aWR0aCA9IDYwMDsKKwkJaW50IGhlaWdodCA9IDYwMDsKKwkJaW50IGNvbXBIZWlnaHQgPSAyMDsKKwkJRGltZW5zaW9uIG1haW5EaW0gPSBuZXcgRGltZW5zaW9uKHdpZHRoLGhlaWdodCk7CisJCQorCQlzdGF0dXNQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfcGFuZWxfc3RhdHVzIikpKTsKKwkJaW50ZXJ2YWxQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfcGFuZWxfaW50ZXJ2YWwiKSkpOworCQlvcHRpb25zUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3BhbmVsX29wdGlvbnMiKSkpOworCQlmb3JtYXRQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfcGFuZWxfb3V0cHV0X2Zvcm1hdCIpKSk7CisJCQorCQkvLyAqKiBTVEFUVVMgUEFORUwgU0VUVVAgKioKKwkJSkJ1dHRvbiBub3dCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2J1dHRvbl9ub3ciKSk7CisJCUJveCAgICAgc3RhdHVzQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJSlBhbmVsICBzdGF0dXNQYW5lbDEgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgc3RhdHVzUGFuZWwyID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIHN0YXR1c1BhbmVsMyA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBzdGF0dXNQYW5lbDQgPSBuZXcgSlBhbmVsKCk7CisJCXN0YXR1c0J1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfYnV0dG9uX3N0YXJ0IikpOworCQlzdGF0dXNMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9zdGF0dXNfc3RvcHBlZCIpKTsKKwkJbmV4dFJlcG9ydExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX25leHRfcmVwb3J0IiwgIi0tIikpOworCQlsYXN0UmVwb3J0TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfbGFzdF9yZXBvcnQiLCAiLS0iKSk7CisJCXN0YXR1c0xhYmVsLnNldEZvbnQobmV3IEZvbnQoInNlcmlmIixGb250LkJPTEQsMTQpKTsKKwkJc3RhdHVzTGFiZWwuc2V0Rm9yZWdyb3VuZChDb2xvci5yZWQpOworCQlzdGF0dXNQYW5lbDIuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlzdGF0dXNQYW5lbDMuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlzdGF0dXNQYW5lbC5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCisJCW5vd0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQl0cnkgeworCQkJCQlnZW5lcmF0ZVJlcG9ydHMoKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhudWxsLCBlLmdldE1lc3NhZ2UoKSwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLAorCQkJCQkJCQkJCQkJICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGUudG9TdHJpbmcoKSk7CisJCQkJCWlmIChSQk1hbmFnZXJHVUkuZGVidWcpIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCQorCQlzdGF0dXNCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJdG9nZ2xlU3RhdHVzKCk7CisJCQl9CisJCX0pOworCQkKKwkJc3RhdHVzUGFuZWwxLmFkZChzdGF0dXNMYWJlbCk7CisJCXN0YXR1c1BhbmVsMi5hZGQobmV4dFJlcG9ydExhYmVsKTsKKwkJc3RhdHVzUGFuZWwzLmFkZChsYXN0UmVwb3J0TGFiZWwpOworCQlzdGF0dXNQYW5lbDQuYWRkKG5vd0J1dHRvbik7CisJCXN0YXR1c1BhbmVsNC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg3KSk7CisJCXN0YXR1c1BhbmVsNC5hZGQoc3RhdHVzQnV0dG9uKTsKKwkJc3RhdHVzQm94LmFkZChzdGF0dXNQYW5lbDEpOworCQlzdGF0dXNCb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDcpKTsKKwkJLy9zdGF0dXNCb3guYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsR2x1ZSgpKTsKKwkJc3RhdHVzQm94LmFkZChzdGF0dXNQYW5lbDIpOworCQkvL3N0YXR1c0JveC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworCQlzdGF0dXNCb3guYWRkKHN0YXR1c1BhbmVsMyk7CisJCXN0YXR1c0JveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNykpOworCQlzdGF0dXNCb3guYWRkKHN0YXR1c1BhbmVsNCk7CisJCXN0YXR1c1BhbmVsLmFkZChzdGF0dXNCb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkKKwkJLy8gKiogT1BUSU9OUyBQQU5FTCBTRVRVUCAqKgorCQlKTGFiZWwgIGlucHV0TGFiZWwgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfaW5wdXRfYnVuZGxlIikpOworCQlKTGFiZWwgIG91dHB1dExhYmVsICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeSIpKTsKKwkJSkJ1dHRvbiBpbnB1dEJ1dHRvbiAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fY2hvb3NlIikpOworCQlKQnV0dG9uIG91dHB1dEJ1dHRvbiAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2J1dHRvbl9jaG9vc2UiKSk7CisJCUpCdXR0b24gc2NhbkJ1dHRvbiAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfYnV0dG9uX2Nob29zZSIpKTsKKwkJSkJ1dHRvbiBkZWZhdWx0QnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fc2F2ZV9kZWZhdWx0cyIpKTsKKwkJSkxhYmVsICB0ZXh0TGFiZWwgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX291dHB1dF9maWxlIikpOworCQlKTGFiZWwgIGh0bWxMYWJlbCAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfb3V0cHV0X2ZpbGUiKSk7CisJCUpMYWJlbCAgeG1sTGFiZWwgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9vdXRwdXRfZmlsZSIpKTsKKwkJSkxhYmVsICB0ZXh0TGFiZWwyICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2RldGFpbF9sZXZlbCIpKTsKKwkJSkxhYmVsICBodG1sTGFiZWwyICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2RldGFpbF9sZXZlbCIpKTsKKwkJSkxhYmVsICB4bWxMYWJlbDIgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2RldGFpbF9sZXZlbCIpKTsKKwkJSlBhbmVsICBvcHRpb25zUGFuZWwxID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIG9wdGlvbnNQYW5lbDIgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgb3B0aW9uc1BhbmVsQSA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBvcHRpb25zUGFuZWwzID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIG9wdGlvbnNQYW5lbDQgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgb3B0aW9uc1BhbmVsNSA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBvcHRpb25zUGFuZWw2ID0gbmV3IEpQYW5lbCgpOworCQlCb3ggICAgIG9wdGlvbnNCb3ggICAgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlCb3ggICAgIG91dHB1dEJveCAgICAgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkKKwkJYnVuZGxlRmllbGQgICAgPSBuZXcgSlRleHRGaWVsZChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9iYXNlX2NsYXNzX2ZpbGUiKSk7CisJCWRpcmVjdG9yeUZpZWxkID0gbmV3IEpUZXh0RmllbGQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeSIpKTsKKwkJdGV4dENoZWNrICAgICAgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZm9ybWF0X3RleHQiKSk7CisJCWh0bWxDaGVjayAgICAgID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2Zvcm1hdF9odG1sIikpOworCQl4bWxDaGVjayAgICAgICA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9mb3JtYXRfeG1sIikpOworCQlzY2FuQ2hlY2sgICAgICA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9wZXJmb3JtX3NjYW4iKSwgZmFsc2UpOworCQl0ZXh0RmllbGQgICAgICA9IG5ldyBKVGV4dEZpZWxkKCJyZXBvcnQudHh0Iik7CisJCWh0bWxGaWVsZCAgICAgID0gbmV3IEpUZXh0RmllbGQoInJlcG9ydC5odG1sIik7CisJCXhtbEZpZWxkICAgICAgID0gbmV3IEpUZXh0RmllbGQoInJlcG9ydC54bWwiKTsKKwkJc2NhbkZpZWxkICAgICAgPSBuZXcgSlRleHRGaWVsZCgpOworCQlTdHJpbmcgW10gZGV0YWlsTGV2ZWxzID0ge1Jlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZGV0YWlsX2hpZ2giKSwKKwkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2RldGFpbF9ub3JtYWwiKX07CisJCXRleHRDb21ibyAgICAgID0gbmV3IEpDb21ib0JveChkZXRhaWxMZXZlbHMpOworCQlodG1sQ29tYm8gICAgICA9IG5ldyBKQ29tYm9Cb3goZGV0YWlsTGV2ZWxzKTsKKwkJeG1sQ29tYm8gICAgICAgPSBuZXcgSkNvbWJvQm94KGRldGFpbExldmVscyk7CisJCQorCQlidW5kbGVGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJZGlyZWN0b3J5RmllbGQuc2V0Q29sdW1ucygzMCk7CisJCXNjYW5GaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJdGV4dEZpZWxkLnNldENvbHVtbnMoMTUpOworCQlodG1sRmllbGQuc2V0Q29sdW1ucygxNSk7CisJCXhtbEZpZWxkLnNldENvbHVtbnMoMTUpOworCQlEaW1lbnNpb24gY2hlY2tEaW0gPSBuZXcgRGltZW5zaW9uKDU1LGNvbXBIZWlnaHQpOworCQl0ZXh0Q2hlY2suc2V0UHJlZmVycmVkU2l6ZShjaGVja0RpbSk7CisJCWh0bWxDaGVjay5zZXRQcmVmZXJyZWRTaXplKGNoZWNrRGltKTsKKwkJeG1sQ2hlY2suc2V0UHJlZmVycmVkU2l6ZShjaGVja0RpbSk7CisJCW9wdGlvbnNQYW5lbDEuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuUklHSFQpKTsKKwkJb3B0aW9uc1BhbmVsMi5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5SSUdIVCkpOworCQlvcHRpb25zUGFuZWxBLnNldExheW91dChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LlJJR0hUKSk7CisJCQorCQlpbnB1dEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlzZXRJbnB1dEJ1bmRsZSgpOworCQkJfQorCQl9KTsKKwkJCisJCW91dHB1dEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlzZXRPdXRwdXRCdW5kbGUoKTsKKwkJCX0KKwkJfSk7CisJCQorCQlzY2FuQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJc2V0U2NhbkZpbGUoKTsKKwkJCX0KKwkJfSk7CisJCQorCQlkZWZhdWx0QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXNhdmVEZWZhdWx0cygpOworCQkJfQorCQl9KTsKKwkJCisJCW9wdGlvbnNQYW5lbDYuYWRkKGRlZmF1bHRCdXR0b24pOworCQlvcHRpb25zUGFuZWwzLmFkZCh0ZXh0Q2hlY2spOworCQlvcHRpb25zUGFuZWwzLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQodGV4dExhYmVsKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDMuYWRkKHRleHRGaWVsZCk7CisJCW9wdGlvbnNQYW5lbDMuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwzLmFkZCh0ZXh0TGFiZWwyKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDMuYWRkKHRleHRDb21ibyk7CisJCW9wdGlvbnNQYW5lbDQuYWRkKGh0bWxDaGVjayk7CisJCW9wdGlvbnNQYW5lbDQuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw0LmFkZChodG1sTGFiZWwpOworCQlvcHRpb25zUGFuZWw0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoaHRtbEZpZWxkKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDQuYWRkKGh0bWxMYWJlbDIpOworCQlvcHRpb25zUGFuZWw0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoaHRtbENvbWJvKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoeG1sQ2hlY2spOworCQlvcHRpb25zUGFuZWw1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoeG1sTGFiZWwpOworCQlvcHRpb25zUGFuZWw1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoeG1sRmllbGQpOworCQlvcHRpb25zUGFuZWw1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoeG1sTGFiZWwyKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDUuYWRkKHhtbENvbWJvKTsKKwkJb3V0cHV0Qm94LmFkZChvcHRpb25zUGFuZWwzKTsKKwkJb3V0cHV0Qm94LmFkZChvcHRpb25zUGFuZWw0KTsKKwkJb3V0cHV0Qm94LmFkZChvcHRpb25zUGFuZWw1KTsKKwkJZm9ybWF0UGFuZWwuYWRkKG91dHB1dEJveCk7CisJCW9wdGlvbnNQYW5lbDEuYWRkKGlucHV0TGFiZWwpOworCQlvcHRpb25zUGFuZWwxLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsMS5hZGQoYnVuZGxlRmllbGQpOworCQlvcHRpb25zUGFuZWwxLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsMS5hZGQoaW5wdXRCdXR0b24pOworCQlvcHRpb25zUGFuZWwyLmFkZChvdXRwdXRMYWJlbCk7CisJCW9wdGlvbnNQYW5lbDIuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwyLmFkZChkaXJlY3RvcnlGaWVsZCk7CisJCW9wdGlvbnNQYW5lbDIuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwyLmFkZChvdXRwdXRCdXR0b24pOworCQlvcHRpb25zUGFuZWxBLmFkZChzY2FuQ2hlY2spOworCQlvcHRpb25zUGFuZWxBLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsQS5hZGQoc2NhbkZpZWxkKTsKKwkJb3B0aW9uc1BhbmVsQS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbEEuYWRkKHNjYW5CdXR0b24pOworCQlvcHRpb25zQm94LmFkZChvcHRpb25zUGFuZWwxKTsKKwkJb3B0aW9uc0JveC5hZGQob3B0aW9uc1BhbmVsMik7CisJCW9wdGlvbnNCb3guYWRkKG9wdGlvbnNQYW5lbEEpOworCQlvcHRpb25zQm94LmFkZChmb3JtYXRQYW5lbCk7CisJCW9wdGlvbnNCb3guYWRkKG9wdGlvbnNQYW5lbDYpOworCQlvcHRpb25zUGFuZWwuYWRkKG9wdGlvbnNCb3gpOworCQkKKwkJLy8gKiogSU5URVJWQUwgUEFORUwgU0VUVVAgKioKKwkJU3RyaW5nIGJveEFycmF5MVtdID0geyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxNSIsIjIwIiwiMjQiLCIyNSIsIjMwIn07CisJCVN0cmluZyBib3hBcnJheTJbXSA9IHtSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfbWludXRlcyIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX2hvdXJzIiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfZGF5cyIpfTsKKwkJU3RyaW5nIGJveEFycmF5M1tdID0geyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLAorCQkJCQkJCSAgIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIwIn07CisJCVN0cmluZyBib3hBcnJheTRbXSA9IHsiMDAiLCIxNSIsIjMwIiwiNDUifTsKKwkJU3RyaW5nIGJveEFycmF5NVtdID0ge1Jlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV9ldmVyeWRheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX21vbmRheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX3R1ZXNkYXkiKSwKKwkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV93ZWRuZXNkYXkiKSwKKwkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV90aHVyc2RheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX2ZyaWRheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX3NhdHVyZGF5IiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfc3VuZGF5Iil9OworCQkKKwkJSkxhYmVsIGNvbG9uTGFiZWwgPSBuZXcgSkxhYmVsKCI6Iik7CisJCXNlcXVlbnRpYWxSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsIikpOworCQlkZWZpbmVkUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZCIpLCB0cnVlKTsKKwkJdmFsdWVDb21ibyA9IG5ldyBKQ29tYm9Cb3goYm94QXJyYXkxKTsKKwkJdW5pdENvbWJvID0gbmV3IEpDb21ib0JveChib3hBcnJheTIpOworCQlob3VyQ29tYm8gPSBuZXcgSkNvbWJvQm94KGJveEFycmF5Myk7CisJCW1pbnV0ZUNvbWJvID0gbmV3IEpDb21ib0JveChib3hBcnJheTQpOworCQlkYXlDb21ibyA9IG5ldyBKQ29tYm9Cb3goYm94QXJyYXk1KTsKKwkJSlBhbmVsIGludGVydmFsUGFuZWwxID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgaW50ZXJ2YWxQYW5lbDIgPSBuZXcgSlBhbmVsKCk7CisJCWludGVydmFsUGFuZWwxLnNldExheW91dChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkxFRlQpKTsKKwkJaW50ZXJ2YWxQYW5lbDIuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlCb3ggaW50ZXJ2YWxCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlpbnRlcnZhbFBhbmVsLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQkKKwkJQnV0dG9uR3JvdXAgYmcgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKwkJYmcuYWRkKHNlcXVlbnRpYWxSYWRpbyk7CisJCWJnLmFkZChkZWZpbmVkUmFkaW8pOworCQkKKwkJaW50ZXJ2YWxQYW5lbDEuYWRkKHNlcXVlbnRpYWxSYWRpbyk7CisJCWludGVydmFsUGFuZWwxLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJaW50ZXJ2YWxQYW5lbDEuYWRkKHZhbHVlQ29tYm8pOworCQlpbnRlcnZhbFBhbmVsMS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCWludGVydmFsUGFuZWwxLmFkZCh1bml0Q29tYm8pOworCQlpbnRlcnZhbFBhbmVsMi5hZGQoZGVmaW5lZFJhZGlvKTsKKwkJaW50ZXJ2YWxQYW5lbDIuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlpbnRlcnZhbFBhbmVsMi5hZGQoaG91ckNvbWJvKTsKKwkJaW50ZXJ2YWxQYW5lbDIuYWRkKGNvbG9uTGFiZWwpOworCQlpbnRlcnZhbFBhbmVsMi5hZGQobWludXRlQ29tYm8pOworCQlpbnRlcnZhbFBhbmVsMi5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCWludGVydmFsUGFuZWwyLmFkZChkYXlDb21ibyk7CisJCWludGVydmFsQm94LmFkZChpbnRlcnZhbFBhbmVsMSk7CisJCWludGVydmFsQm94LmFkZChpbnRlcnZhbFBhbmVsMik7CisJCWludGVydmFsUGFuZWwuYWRkKGludGVydmFsQm94LCBCb3JkZXJMYXlvdXQuV0VTVCk7CisJCQorCQkvLyAqKiBNQUlOQk9YIFNFVFVQICoqCisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCW1haW5Cb3guYWRkKHN0YXR1c1BhbmVsKTsKKwkJbWFpbkJveC5hZGQoaW50ZXJ2YWxQYW5lbCk7CisJCW1haW5Cb3guYWRkKG9wdGlvbnNQYW5lbCk7CisJCQorCQkvLyAqKiBNQUlOIEZSQU1FIFNFVFVQICoqCisJCXNldExvY2F0aW9uKG5ldyBqYXZhLmF3dC5Qb2ludCgyNSwgMjUpKTsKKwkJc2V0U2l6ZShtYWluRGltKTsKKwkJLy8oKEpDb21wb25lbnQpZ2V0Q29udGVudFBhbmUoKSkuc2V0TWF4aW11bVNpemUoZGltTWFpbk1heCk7CisJCS8vKChKQ29tcG9uZW50KWdldENvbnRlbnRQYW5lKCkpLnNldE1pbmltdW1TaXplKGRpbU1haW5NaW4pOworCQkvL3NldEpNZW51QmFyKGpNZW51QmFyTWFpbik7CisJCWdldENvbnRlbnRQYW5lKCkuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCWdldENvbnRlbnRQYW5lKCkucmVtb3ZlQWxsKCk7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQlzZXRUaXRsZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlc291cmNlX2J1bmRsZV9yZXBvcnRlciIpKTsKKwkJLy92YWxpZGF0ZVRyZWUoKTsKKwkJc2V0Q29tcG9uZW50c1RvRGVmYXVsdHMoKTsKKwkJbmV4dFJlcG9ydCA9IGdlbmVyYXRlTmV4dFJlcG9ydERhdGUoKTsKKwkJdXBkYXRlRGF0ZUZpZWxkcygpOworCQlyZXBhaW50KCk7CisJCQorCQlhZGRXaW5kb3dMaXN0ZW5lcihuZXcgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcigpIHsKKwkJCXB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQgZXYpIHsKKwkJCQl0aGlzV2luZG93Q2xvc2luZyhldik7CisJCQl9CisJCX0pOworCX0KKwkKKwlwdWJsaWMgdm9pZCB0aGlzV2luZG93Q2xvc2luZyhXaW5kb3dFdmVudCBldikgeworCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJZGlzcG9zZSgpOworCQlTeXN0ZW0uZXhpdCgwKTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldElucHV0QnVuZGxlKCkgeworCQlpbnQgcmVzdWx0ID0gYnVuZGxlRmlsZUNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7CisJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQlGaWxlIGYgPSBidW5kbGVGaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCWlmIChmICE9IG51bGwpIHsKKwkJCQlidW5kbGVGaWVsZC5zZXRUZXh0KGYuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2Jhc2VfY2xhc3NfZmlsZSIsZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJdHJ5IHtQcmVmZXJlbmNlcy5zYXZlUHJlZmVyZW5jZXMoKTt9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldE91dHB1dEJ1bmRsZSgpIHsKKwkJaW50IHJlc3VsdCA9IGRpcmVjdG9yeUZpbGVDaG9vc2VyLnNob3dPcGVuRGlhbG9nKHRoaXMpOworCQlpZiAocmVzdWx0ID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworCQkJRmlsZSBmID0gZGlyZWN0b3J5RmlsZUNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisJCQlpZiAoIWYuaXNEaXJlY3RvcnkoKSkgZiA9IG5ldyBGaWxlKGYuZ2V0UGFyZW50KCkpOworCQkJaWYgKGYgIT0gbnVsbCkgeworCQkJCWRpcmVjdG9yeUZpZWxkLnNldFRleHQoZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeSIsZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJdHJ5IHtQcmVmZXJlbmNlcy5zYXZlUHJlZmVyZW5jZXMoKTt9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldFNjYW5GaWxlKCkgeworCQlpbnQgcmVzdWx0ID0gc2NhbkZpbGVDaG9vc2VyLnNob3dPcGVuRGlhbG9nKHRoaXMpOworCQlpZiAocmVzdWx0ID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworCQkJRmlsZSBmID0gc2NhbkZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworCQkJaWYgKGYgIT0gbnVsbCkgeworCQkJCXNjYW5GaWVsZC5zZXRUZXh0KGYuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX3NjYW5fZmlsZSIsZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJdHJ5IHtQcmVmZXJlbmNlcy5zYXZlUHJlZmVyZW5jZXMoKTt9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFVzYWdlKCkgeworCQlyZXR1cm4gIlxuUkJSZXBvcnRlciBDb21tYW5kIExpbmUgVXNhZ2U6XG5cbiIgKworCQkJICAgIkRlZmF1bHQgVXNhZ2UgKEdVSSk6ICAgamF2YSBjb20uaWJtLnJibS5SQlJlcG9ydGVyXG4iICsKKwkJCSAgICJPcHRpb25zIFVzYWdlOiAgICAgICAgIGphdmEgY29tLmlibS5yYm0uUkJSZXBvcnRlciBbLWd1aSB8IC1ub3cgfCAtbGluZV1cblxuIiArIAorCQkJICAgIk9wdGlvbnM6ICAgICAgICAgICAgICAgLWd1aSAgICAgUnVuIHRoZSBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VcbiIgKworCQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgLW5vdyAgICAgRXhlY3V0ZSB0aGUgUmVwb3J0IEdlbmVyYXRpb24gSW1tZWRpYXRlbHlcbiIgKworCQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgLWxpbmUgICAgUnVuIHRoZSBSZXBvcnRlciB3aXRob3V0IHRoZSBHVUkiOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisJICAgIFJCUmVwb3J0ZXIgcmVwb3J0ZXI7CisJCWlmIChhcmdzLmxlbmd0aCA9PSAxKSB7CisJCQlpZiAoYXJnc1swXS5lcXVhbHMoIi1ndWkiKSkgeworCQkJICAgIHJlcG9ydGVyID0gbmV3IFJCUmVwb3J0ZXIodHJ1ZSk7CQorCQkJfSBlbHNlIGlmIChhcmdzWzBdLmVxdWFscygiLW5vdyIpKSB7CisJCQkJcmVwb3J0ZXIgPSBuZXcgUkJSZXBvcnRlcihmYWxzZSk7CisJCQkJdHJ5IHsKKwkJCQkJcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkJSZXBvcnRlcjogR2VuZXJhdGlvbiBvZiByZXBvcnRzIHN1Y2Nlc3NmdWwuICIgKyBuZXcgRGF0ZSgpKTsKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGVyZSB3YXMgYW4gZXJyb3IgZ2VuZXJhdGluZyB0aGUgcmVwb3J0cy4uLlxuXG5cdCIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKKwkJCQl9CisJCQkJcmVwb3J0ZXIudGhpc1dpbmRvd0Nsb3NpbmcobnVsbCk7CisJCQl9IGVsc2UgaWYgKGFyZ3NbMF0uZXF1YWxzKCItbGluZSIpKSB7CisJCQkJcmVwb3J0ZXIgPSBuZXcgUkJSZXBvcnRlcihmYWxzZSk7CisJCQkJaWYgKCFyZXBvcnRlci5ydW5uaW5nKQorCQkJCSAgICByZXBvcnRlci50b2dnbGVTdGF0dXMoKTsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJCUmVwb3J0ZXI6IE5leHQgUmVwb3J0IGF0ICIgKyByZXBvcnRlci5uZXh0UmVwb3J0LnRvU3RyaW5nKCkpOworCQkJfSBlbHNlIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0VXNhZ2UoKSk7CisJCQl9CisJCX0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJcmVwb3J0ZXIgPSBuZXcgUkJSZXBvcnRlcih0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRVc2FnZSgpKTsKKwkJfQorCX0KKwkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlclNjYW5uZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyU2Nhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTdkZTkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlclNjYW5uZXIuamF2YQpAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlcjsKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworaW1wb3J0IG9yZy54bWwuc2F4Lio7CisKKy8qKgorICogUkJSZXBvcnRlclNjYW5lciBpcyBhIHV0aWxpdHkgY2xhc3MgZm9yIFJCUmVwb3J0ZXIuIEl0IGNyZWF0ZXMgYSByZXBvcnQgZnJvbSBhbiB4bWwgc2V0dGluZ3MKKyAqIGZpbGUgdGhhdCBzY2FucyBjb2RlIGZvciByZXNvdXJjZXMgYW5kIGNvbXBhcmVzIHRoZW0gYWdhaW5zdCBhIHJlc291cmNlIGJ1bmRsZS4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIKKyAqLworcHVibGljIGNsYXNzIFJCUmVwb3J0ZXJTY2FubmVyIHsKKwlwcml2YXRlIEJ1bmRsZSAgICAgICBidW5kbGU7CisJcHJpdmF0ZSBEb2N1bWVudCAgICAgY29uZmlnOworCXByaXZhdGUgSGFzaHRhYmxlICAgIGZpbGVSdWxlczsKKwlwcml2YXRlIEhhc2h0YWJsZSAgICBwYXJzZVJ1bGVzOworCXByaXZhdGUgSGFzaHRhYmxlICAgIHJlc3VsdHM7CisJcHJpdmF0ZSBIYXNodGFibGUgICAgbWlzc2luZzsKKwlwcml2YXRlIGJvb2xlYW4gICAgICByZXN1bHRzRm91bmQ7CisJCisJcHJvdGVjdGVkIFJCUmVwb3J0ZXJTY2FubmVyKEJ1bmRsZSBidW5kbGUsIEZpbGUgY29uZmlnRmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmVzdWx0c0ZvdW5kID0gZmFsc2U7CisJCXRoaXMuYnVuZGxlID0gYnVuZGxlOworCQkKKwkJdHJ5IHsKKwkJCUlucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKG5ldyBGaWxlSW5wdXRTdHJlYW0oY29uZmlnRmlsZSkpOworCQkJRE9NUGFyc2VyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKwkJCXBhcnNlci5wYXJzZShpcyk7CisJCQljb25maWcgPSBwYXJzZXIuZ2V0RG9jdW1lbnQoKTsKKwkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIHNheGUpIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiSWxsZWdhbCBYTUwgRG9jdW1lbnQ6ICIgKyBzYXhlLmdldE1lc3NhZ2UoKSk7CisJCX0KKwkJCisJCUVsZW1lbnQgcm9vdCA9IGNvbmZpZy5nZXREb2N1bWVudEVsZW1lbnQoKTsKKwkJZmlsZVJ1bGVzID0gZ2V0RmlsZVJ1bGVzKHJvb3QpOworCQlwYXJzZVJ1bGVzID0gZ2V0UGFyc2VSdWxlcyhyb290KTsKKwkJCisJCXJlc3VsdHMgPSBuZXcgSGFzaHRhYmxlKCk7CisJCUVudW1lcmF0aW9uIGtleXMgPSBidW5kbGUuYWxsSXRlbXMua2V5cygpOworCQl3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworCQkJQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pYnVuZGxlLmFsbEl0ZW1zLmdldChrZXkpOworCQkJcmVzdWx0cy5wdXQoa2V5LCBuZXcgU2NhblJlc3VsdChpdGVtKSk7CisJCX0KKwkJCisJCW1pc3NpbmcgPSBuZXcgSGFzaHRhYmxlKCk7CisJfQorCQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyUmVzb3VyY2VzRm91bmQoKSB7CisJCXJldHVybiByZXN1bHRzLnNpemUoKTsKKwl9CisJCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJNaXNzaW5nUmVzb3VyY2VzKCkgeworCQlyZXR1cm4gbWlzc2luZy5zaXplKCk7CisJfQorCQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyVW51c2VkUmVzb3VyY2VzKCkgeworCQlpbnQgY291bnQgPSAwOworCQlFbnVtZXJhdGlvbiBlbGVtcyA9IHJlc3VsdHMuZWxlbWVudHMoKTsKKwkJd2hpbGUgKGVsZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KWVsZW1zLm5leHRFbGVtZW50KCk7CisJCQlpZiAocmVzdWx0LmdldE9jY3VyYW5jZXMoKS5zaXplKCkgPCAxKSBjb3VudCsrOworCQl9CisJCXJldHVybiBjb3VudDsKKwl9CisJCisJcHJvdGVjdGVkIFZlY3RvciBnZXRNaXNzaW5nUmVzb3VyY2VzKCkgeworCQlFbnVtZXJhdGlvbiBlbGVtcyA9IG1pc3NpbmcuZWxlbWVudHMoKTsKKwkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisJCXdoaWxlIChlbGVtcy5oYXNNb3JlRWxlbWVudHMoKSkKKwkJCXYuYWRkRWxlbWVudChlbGVtcy5uZXh0RWxlbWVudCgpKTsKKwkJcmV0dXJuIHY7CisJfQorCQorCXByb3RlY3RlZCBWZWN0b3IgZ2V0VW51c2VkUmVzb3VyY2VzKCkgeworCQlFbnVtZXJhdGlvbiBlbGVtcyA9IHJlc3VsdHMuZWxlbWVudHMoKTsKKwkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisJCXdoaWxlIChlbGVtcy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCllbGVtcy5uZXh0RWxlbWVudCgpOworCQkJaWYgKHJlc3VsdC5nZXRPY2N1cmFuY2VzKCkuc2l6ZSgpIDwgMSkgeworCQkJCXYuYWRkRWxlbWVudChyZXN1bHQpOworCQkJfQorCQl9CisJCXJldHVybiB2OworCX0KKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBwZXJmb3JtU2NhbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJlc3VsdHNGb3VuZCA9IGZhbHNlOworCQkKKwkJRWxlbWVudCByb290ID0gY29uZmlnLmdldERvY3VtZW50RWxlbWVudCgpOworCQlOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNjYW4iKTsKKwkJaWYgKG5sLmdldExlbmd0aCgpIDwgMSkgcmV0dXJuIHJlc3VsdHNGb3VuZDsKKwkJRWxlbWVudCBzY2FuX2VsZW0gPSAoRWxlbWVudClubC5pdGVtKDApOworCQlubCA9IHNjYW5fZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRGlyZWN0b3J5Iik7CisJCWZvciAoaW50IGk9MDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZGlyX2VsZW0gPSAoRWxlbWVudClubC5pdGVtKGkpOworCQkJRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShkaXJfZWxlbS5nZXRBdHRyaWJ1dGUoImxvY2F0aW9uIikpOworCQkJYm9vbGVhbiByZWN1cnNlID0gZGlyX2VsZW0uZ2V0QXR0cmlidXRlKCJyZWN1cnNlX2RpcmVjdG9yaWVzIikuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpOworCQkJTm9kZUxpc3QgcnVsZXNfbGlzdCA9IGRpcl9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJSdWxlcyIpOworCQkJaWYgKHJ1bGVzX2xpc3QuZ2V0TGVuZ3RoKCkgPCAxKSBjb250aW51ZTsKKwkJCUVsZW1lbnQgcnVsZXNfZWxlbSA9IChFbGVtZW50KXJ1bGVzX2xpc3QuaXRlbSgwKTsKKwkJCU5vZGVMaXN0IGZydWxlc19saXN0ID0gcnVsZXNfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQXBwbHlGaWxlUnVsZSIpOworCQkJLy8gRm9yIGVhY2ggZmlsZSBydWxlCisJCQlmb3IgKGludCBqPTA7IGogPCBmcnVsZXNfbGlzdC5nZXRMZW5ndGgoKTsgaisrKSB7CisJCQkJRWxlbWVudCBmcnVsZV9lbGVtID0gKEVsZW1lbnQpZnJ1bGVzX2xpc3QuaXRlbShqKTsKKwkJCQlGaWxlUnVsZSBmcnVsZSA9IChGaWxlUnVsZSlmaWxlUnVsZXMuZ2V0KGZydWxlX2VsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikpOworCQkJCWlmIChmcnVsZSA9PSBudWxsKSBjb250aW51ZTsKKwkJCQlOb2RlTGlzdCBwcnVsZXNfbGlzdCA9IGZydWxlX2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFwcGx5UGFyc2VSdWxlIik7CisJCQkJVmVjdG9yIHBydWxlc192ID0gbmV3IFZlY3RvcigpOworCQkJCS8vIEZvciBlYWNoIHBhcnNlIHJ1bGUKKwkJCQlmb3IgKGludCBrPTA7IGsgPCBwcnVsZXNfbGlzdC5nZXRMZW5ndGgoKTsgaysrKSB7CisJCQkJCUVsZW1lbnQgcHJ1bGVfZWxlbSA9IChFbGVtZW50KXBydWxlc19saXN0Lml0ZW0oayk7CisJCQkJCVBhcnNlUnVsZSBwcnVsZSA9IChQYXJzZVJ1bGUpcGFyc2VSdWxlcy5nZXQocHJ1bGVfZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7CisJCQkJCWlmIChwcnVsZSA9PSBudWxsKSBjb250aW51ZTsKKwkJCQkJcHJ1bGVzX3YuYWRkRWxlbWVudChwcnVsZSk7CisJCQkJfQorCQkJCWlmIChwcnVsZXNfdi5zaXplKCkgPCAxKSBjb250aW51ZTsKKwkJCQlzY2FuRGlyZWN0b3J5KGRpcmVjdG9yeSwgZnJ1bGUsIHBydWxlc192LCByZWN1cnNlKTsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIHJlc3VsdHNGb3VuZDsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNjYW5EaXJlY3RvcnkoRmlsZSBkaXJlY3RvcnksIEZpbGVSdWxlIGZydWxlLCBWZWN0b3IgcHJ1bGVzLCBib29sZWFuIHJlY3Vyc2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQorCQkvLyBSZWN1cnNpb24gc3RlcAorCQlpZiAocmVjdXJzZSkgeworCQkJRmlsZSBjaGlsZHJlbltdID0gZGlyZWN0b3J5Lmxpc3RGaWxlcyhuZXcgamF2YS5pby5GaWxlRmlsdGVyKCl7CisJCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCQlyZXR1cm4gZi5pc0RpcmVjdG9yeSgpOworCQkJCX0KKwkJCQkKKwkJCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQkJCQlyZXR1cm4gIiI7CisJCQkJfQorCQkJfSk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworCQkJCUZpbGUgbmV3X2RpcmVjdG9yeSA9IGNoaWxkcmVuW2ldOworCQkJCXNjYW5EaXJlY3RvcnkobmV3X2RpcmVjdG9yeSwgZnJ1bGUsIHBydWxlcywgcmVjdXJzZSk7CisJCQl9CisJCX0KKwkJLy8gR28gdGhyb3VnaCBlYWNoIGFjY2VwdGFibGUgZmlsZQorCQlGaWxlIGNoaWxkcmVuW10gPSBkaXJlY3RvcnkubGlzdEZpbGVzKCk7CisJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisJCQlGaWxlIGYgPSBjaGlsZHJlbltpXTsKKwkJCWlmIChmLmlzRGlyZWN0b3J5KCkgfHwgIShmcnVsZS5hcHBseVJ1bGUoZi5nZXROYW1lKCkpKSkgY29udGludWU7CisJCQlGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZik7CisJCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7CisJCQlTdHJpbmcgbGluZSA9IG51bGw7CisJCQlpbnQgbGluZV9jb3VudCA9IDA7CisJCQkvLyBSZWFkIHRoZSBmaWxlIGxpbmUgYnkgbGluZQorCQkJd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkJCWxpbmVfY291bnQrKzsKKwkJCQlWZWN0b3IgZmluZGluZ3MgPSBuZXcgVmVjdG9yKCk7CisJCQkJLy8gQXBwbHkgYWxsIHBhcnNlIHJ1bGVzIHRvIGVhY2ggbGluZQorCQkJCWZvciAoaW50IGo9MDsgaiA8IHBydWxlcy5zaXplKCk7IGorKykgeworCQkJCQlQYXJzZVJ1bGUgcHJ1bGUgPSAoUGFyc2VSdWxlKXBydWxlcy5lbGVtZW50QXQoaik7CisJCQkJCVZlY3RvciB0ZW1wX3Jlc3VsdHMgPSBwcnVsZS5hcHBseVJ1bGUobGluZSk7CisJCQkJCWZvciAoaW50IGs9MDsgayA8IHRlbXBfcmVzdWx0cy5zaXplKCk7IGsrKykgeworCQkJCQkJZmluZGluZ3MuYWRkRWxlbWVudCh0ZW1wX3Jlc3VsdHMuZWxlbWVudEF0KGspKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlmb3IgKGludCBqPTA7IGogPCBmaW5kaW5ncy5zaXplKCk7IGorKykgeworCQkJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpZmluZGluZ3MuZWxlbWVudEF0KGopOworCQkJCQlPY2N1cmFuY2Ugb2NjID0gbmV3IE9jY3VyYW5jZShmLmdldE5hbWUoKSwgZi5nZXRBYnNvbHV0ZVBhdGgoKSwgbGluZV9jb3VudCk7CisJCQkJCS8vIElmIHRoZSBuYW1lIGlzIGZvdW5kIGluIHRoZSByZXNvdXJjZSBidW5kbGVzIGRlcml2ZWQgaGFzaHRhYmxlCisJCQkJCWlmIChyZXN1bHRzLmNvbnRhaW5zS2V5KG5hbWUpKSB7CisJCQkJCQlTY2FuUmVzdWx0IHNjYW5fcmVzID0gKFNjYW5SZXN1bHQpcmVzdWx0cy5nZXQobmFtZSk7CisJCQkJCQlzY2FuX3Jlcy5hZGRPY2N1cmFuY2Uob2NjKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vIEFkZCBpdCB0byB0aGUgbWlzc2luZyByZXN1bHRzCisJCQkJCQlTY2FuUmVzdWx0IHNjYW5fcmVzID0gbmV3IFNjYW5SZXN1bHQobmV3IEJ1bmRsZUl0ZW0obnVsbCwgbmFtZSwgIip1bmtub3duKiIpKTsKKwkJCQkJCXNjYW5fcmVzLmFkZE9jY3VyYW5jZShvY2MpOworCQkJCQkJbWlzc2luZy5wdXQobmFtZSwgc2Nhbl9yZXMpOworCQkJCQkJcmVzdWx0cy5wdXQobmFtZSwgc2Nhbl9yZXMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCXByaXZhdGUgSGFzaHRhYmxlIGdldEZpbGVSdWxlcyhFbGVtZW50IHJvb3QpIHsKKwkJSGFzaHRhYmxlIHJlc3VsdCA9IG5ldyBIYXNodGFibGUoKTsKKwkJTm9kZUxpc3QgZnJ1bGVzX2xpc3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJGaWxlUnVsZXMiKTsKKwkJRWxlbWVudCBmcnVsZXNfZWxlbSA9IG51bGw7CisJCWlmIChmcnVsZXNfbGlzdC5nZXRMZW5ndGgoKSA+IDApIGZydWxlc19lbGVtID0gKEVsZW1lbnQpZnJ1bGVzX2xpc3QuaXRlbSgwKTsKKwkJaWYgKGZydWxlc19lbGVtID09IG51bGwpIHJldHVybiByZXN1bHQ7CisJCWZydWxlc19saXN0ID0gZnJ1bGVzX2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZpbGVSdWxlIik7CisJCWZvciAoaW50IGk9MDsgaSA8IGZydWxlc19saXN0LmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWxlbSA9IChFbGVtZW50KWZydWxlc19saXN0Lml0ZW0oaSk7CisJCQlGaWxlUnVsZSBmcnVsZSA9IG5ldyBGaWxlUnVsZShlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpLCBlbGVtLmdldEF0dHJpYnV0ZSgic3RhcnRzX3dpdGgiKSwKKwkJCQkJCQkJCQkgIGVsZW0uZ2V0QXR0cmlidXRlKCJlbmRzX3dpdGgiKSwgZWxlbS5nZXRBdHRyaWJ1dGUoImNvbnRhaW5zIikpOworCQkJcmVzdWx0LnB1dChlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpLCBmcnVsZSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJpdmF0ZSBIYXNodGFibGUgZ2V0UGFyc2VSdWxlcyhFbGVtZW50IHJvb3QpIHsKKwkJSGFzaHRhYmxlIHJlc3VsdCA9IG5ldyBIYXNodGFibGUoKTsKKwkJTm9kZUxpc3QgcHJ1bGVzX2xpc3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJQYXJzZVJ1bGVzIik7CisJCUVsZW1lbnQgcHJ1bGVzX2VsZW0gPSBudWxsOworCQlpZiAocHJ1bGVzX2xpc3QuZ2V0TGVuZ3RoKCkgPiAwKQorCQkJcHJ1bGVzX2VsZW0gPSAoRWxlbWVudClwcnVsZXNfbGlzdC5pdGVtKDApOworCQlpZiAocHJ1bGVzX2VsZW0gPT0gbnVsbCkKKwkJCXJldHVybiByZXN1bHQ7CisJCXBydWxlc19saXN0ID0gcHJ1bGVzX2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcnNlUnVsZSIpOworCQlmb3IgKGludCBpPTA7IGkgPCBwcnVsZXNfbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7CisJCQlFbGVtZW50IGVsZW0gPSAoRWxlbWVudClwcnVsZXNfbGlzdC5pdGVtKGkpOworCQkJUGFyc2VSdWxlIHBydWxlID0gbmV3IFBhcnNlUnVsZShlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpLCBlbGVtLmdldEF0dHJpYnV0ZSgiZm9sbG93cyIpLAorCQkJCQkJCQkJCQllbGVtLmdldEF0dHJpYnV0ZSgicHJlY2VkZXMiKSk7CisJCQlyZXN1bHQucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIiksIHBydWxlKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KK30KKworY2xhc3MgRmlsZVJ1bGUgeworCVN0cmluZyBuYW1lOworCVN0cmluZyBzdGFydHNfd2l0aDsKKwlTdHJpbmcgZW5kc193aXRoOworCVN0cmluZyBjb250YWluczsKKwkKKwlGaWxlUnVsZShTdHJpbmcgbmFtZSwgU3RyaW5nIHN0YXJ0c193aXRoLCBTdHJpbmcgZW5kc193aXRoLCBTdHJpbmcgY29udGFpbnMpIHsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5zdGFydHNfd2l0aCA9IHN0YXJ0c193aXRoOworCQl0aGlzLmVuZHNfd2l0aCA9IGVuZHNfd2l0aDsKKwkJdGhpcy5jb250YWlucyA9IGNvbnRhaW5zOworCX0KKwkKKwlib29sZWFuIGFwcGx5UnVsZShTdHJpbmcgc291cmNlKSB7CisJCWJvb2xlYW4gYWNjZXB0ID0gdHJ1ZTsKKwkJaWYgKHN0YXJ0c193aXRoICE9IG51bGwgJiYgc3RhcnRzX3dpdGgubGVuZ3RoKCkgPiAwICYmICEoc291cmNlLnN0YXJ0c1dpdGgoc3RhcnRzX3dpdGgpKSkgYWNjZXB0ID0gZmFsc2U7CisJCWlmIChlbmRzX3dpdGggIT0gbnVsbCAmJiBlbmRzX3dpdGgubGVuZ3RoKCkgPiAwICYmICEoc291cmNlLmVuZHNXaXRoKGVuZHNfd2l0aCkpKSBhY2NlcHQgPSBmYWxzZTsKKwkJaWYgKGNvbnRhaW5zICE9IG51bGwgJiYgY29udGFpbnMubGVuZ3RoKCkgPiAwICYmIHNvdXJjZS5pbmRleE9mKGNvbnRhaW5zKSA8IDApIGFjY2VwdCA9IGZhbHNlOworCQlyZXR1cm4gYWNjZXB0OworCX0KK30KKworY2xhc3MgUGFyc2VSdWxlIHsKKwlTdHJpbmcgbmFtZTsKKwlTdHJpbmcgYmVmb3JlOworCVN0cmluZyBhZnRlcjsKKwkKKwlQYXJzZVJ1bGUoU3RyaW5nIG5hbWUsIFN0cmluZyBiZWZvcmUsIFN0cmluZyBhZnRlcikgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmJlZm9yZSA9IGJlZm9yZTsKKwkJdGhpcy5hZnRlciA9IGFmdGVyOworCX0KKwkKKwkvLyByZXR1cm5zIHRoZSB2ZWN0b3Igb2Ygc3RyaW5ncyBmb3VuZCBhZnRlciBiZWZvcmUgYW5kIGJlZm9yZSBhZnRlcgorCQorCVZlY3RvciBhcHBseVJ1bGUoU3RyaW5nIHNvdXJjZSkgeworCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKwkJaWYgKGJlZm9yZSAhPSBudWxsICYmIGJlZm9yZS5sZW5ndGgoKSA+IDApIHsKKwkJCWlmIChhZnRlciAhPSBudWxsICYmIGFmdGVyLmxlbmd0aCgpID4gMCkgeworCQkJCS8vIEJvdGggYmVmb3JlIGFuZCBhZnRlciBub24tZW1wdHkKKwkJCQlpbnQgYmVmb3JlX2luZGV4ID0gLTE7CisJCQkJaW50IGFmdGVyX2luZGV4ID0gLTE7CisJCQkJd2hpbGUgKChiZWZvcmVfaW5kZXggPSBzb3VyY2UuaW5kZXhPZihiZWZvcmUsICsrYmVmb3JlX2luZGV4KSkgPj0gMCkgeworCQkJCQkvL2JlZm9yZV9pbmRleCA9IHNvdXJjZS5pbmRleE9mKGJlZm9yZSwgYmVmb3JlX2luZGV4KTsKKwkJCQkJYWZ0ZXJfaW5kZXggPSAtMTsKKwkJCQkJYWZ0ZXJfaW5kZXggPSBzb3VyY2UuaW5kZXhPZihhZnRlciwgYmVmb3JlX2luZGV4ICsgYmVmb3JlLmxlbmd0aCgpKzEpOworCQkJCQlpZiAoYWZ0ZXJfaW5kZXggPCAwIHx8IGJlZm9yZV9pbmRleCA8IDAgfHwgYmVmb3JlLmxlbmd0aCgpIDwgMCkgeworCQkJCQkgICAgYnJlYWs7CisJCQkJCX0KKwkJCQkJdi5hZGRFbGVtZW50KHNvdXJjZS5zdWJzdHJpbmcoYmVmb3JlX2luZGV4ICsgYmVmb3JlLmxlbmd0aCgpLCBhZnRlcl9pbmRleCkpOworCQkJCQliZWZvcmVfaW5kZXggPSBhZnRlcl9pbmRleDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8vIEJlZm9yZSBub24tZW1wdHksIGFmdGVyIGVtcHR5CisJCQkJaW50IGluZGV4ID0gLTE7CisJCQkJd2hpbGUgKHNvdXJjZS5pbmRleE9mKGJlZm9yZSwgKytpbmRleCkgPj0gMCkgeworCQkJCQlpbmRleCA9IHNvdXJjZS5pbmRleE9mKGJlZm9yZSwgaW5kZXgpOworCQkJCQlTdHJpbmcgcmVzdWx0ID0gc291cmNlLnN1YnN0cmluZyhpbmRleCArIGJlZm9yZS5sZW5ndGgoKSwgc291cmNlLmxlbmd0aCgpKTsKKwkJCQkJaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdC5sZW5ndGgoKSA+IDApIHYuYWRkRWxlbWVudChyZXN1bHQpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChhZnRlciAhPSBudWxsICYmIGFmdGVyLmxlbmd0aCgpID4gMCkgeworCQkJLy8gQmVmb3JlIGVtcHR5LCBhZnRlciBub3QKKwkJCWludCBpbmRleCA9IC0xOworCQkJd2hpbGUgKHNvdXJjZS5pbmRleE9mKGFmdGVyLCArK2luZGV4KSA+PSAwKSB7CisJCQkJaW5kZXggPSBzb3VyY2UuaW5kZXhPZihiZWZvcmUsIGluZGV4KTsKKwkJCQlTdHJpbmcgcmVzdWx0ID0gc291cmNlLnN1YnN0cmluZygwLCBpbmRleCk7CisJCQkJaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdC5sZW5ndGgoKSA+IDApIHYuYWRkRWxlbWVudChyZXN1bHQpOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gQmVmb3JlIGFuZCBhZnRlciBlbXB0eQorCQkJdi5hZGRFbGVtZW50KHNvdXJjZSk7CisJCX0KKwkJcmV0dXJuIHY7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEV4cG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJUTVhFeHBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYWVkYWEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJUTVhFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuKjsKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBwbHVnLWluIHRvIFJCTWFuYWdlciB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBleHBvcnQgUmVzb3VyY2UgQnVuZGxlcworICogYWxvbmcgd2l0aCBzb21lIG9mIHRoZSBtZXRhLWRhdGEgYXNzb2NpYXRlZCBieSBSQk1hbmFnZXIgdG8gdGhlIFRNWCBzcGVjaWZpY2F0aW9uLgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVE1YIHZpc2l0IHRoZSB3ZWIgc2l0ZSA8YSBocmVmPSJodHRwOi8vd3d3Lmxpc2Eub3JnL3RteC8iPmh0dHA6Ly93d3cubGlzYS5vcmcvdG14LzwvYT4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJUTVhFeHBvcnRlciBleHRlbmRzIFJCRXhwb3J0ZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gIjAuNWEiOworCQorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBUTVggZXhwb3J0ZXIuCisgICAgICovCisgICAgICAgIAorICAgIHB1YmxpYyBSQlRNWEV4cG9ydGVyKCkgeworICAgICAgICBzdXBlcigpOworCQkKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmlsZSBjaG9vc2VyIGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiAoY2hvb3NlciA9PSBudWxsKSB7CisgICAgICAgICAgICBjaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJUTVggRmlsZXMiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZi5nZXROYW1lKCkuZW5kc1dpdGgoIi50bXgiKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICB9CisJCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvSVNPKERhdGUgZCkgeworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBnYyA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBnYy5zZXRUaW1lKGQpOworICAgICAgICByZXR1cm4gY29udmVydFRvSVNPKGdjKTsKKyAgICB9CisJCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvSVNPKEdyZWdvcmlhbkNhbGVuZGFyIGdjKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoZ2MuZ2V0KENhbGVuZGFyLllFQVIpKSk7CisgICAgICAgIGludCBtb250aCA9IGdjLmdldChDYWxlbmRhci5NT05USCkrMTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgoKG1vbnRoIDwgMTApID8gIjAiIDogIiIpICsgU3RyaW5nLnZhbHVlT2YobW9udGgpKTsKKyAgICAgICAgaW50IGRheSA9IGdjLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworICAgICAgICBidWZmZXIuYXBwZW5kKCgoZGF5IDwgMTApID8gIjAiIDogIiIpICsgU3RyaW5nLnZhbHVlT2YoZGF5KSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlQiKTsKKyAgICAgICAgaW50IGhvdXIgPSBnYy5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICBidWZmZXIuYXBwZW5kKCgoaG91ciA8IDEwKSA/ICIwIiA6ICIiKSArIFN0cmluZy52YWx1ZU9mKGhvdXIpKTsKKyAgICAgICAgaW50IG1pbnV0ZSA9IGdjLmdldChDYWxlbmRhci5NSU5VVEUpOworICAgICAgICBidWZmZXIuYXBwZW5kKCgobWludXRlIDwgMTApID8gIjAiIDogIiIpICsgU3RyaW5nLnZhbHVlT2YobWludXRlKSk7CisgICAgICAgIGludCBzZWNvbmQgPSBnYy5nZXQoQ2FsZW5kYXIuU0VDT05EKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgoKHNlY29uZCA8IDEwKSA/ICIwIiA6ICIiKSArIFN0cmluZy52YWx1ZU9mKHNlY29uZCkpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJaIik7CisgICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKyAgICB9CisJCisgICAgcHJpdmF0ZSBTdHJpbmcgY29udmVydEVuY29kaW5nKEJ1bmRsZUl0ZW0gaXRlbSkgeworICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSAhPSBudWxsICYmIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkuZ2V0TGFuZ3VhZ2VFbmNvZGluZygpOworICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkuZ2V0Q291bnRyeUVuY29kaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKS5nZXRWYXJpYW50RW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmIChsYW5ndWFnZSAhPSBudWxsICYmICFsYW5ndWFnZS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgLy9sYW5ndWFnZSA9IGxhbmd1YWdlLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgaWYgKGNvdW50cnkgIT0gbnVsbCAmJiAhY291bnRyeS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vY291bnRyeSA9IGNvdW50cnkudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQgIT0gbnVsbCAmJiAhdmFyaWFudC5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhcmlhbnQgPSB2YXJpYW50LnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2UgKyAiLSIgKyBjb3VudHJ5ICsgIi0iICsgdmFyaWFudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2UgKyAiLSIgKyBjb3VudHJ5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKwkKKyAgICBwcml2YXRlIHZvaWQgYXBwZW5kVFVWKERvY3VtZW50IHhtbCwgRWxlbWVudCB0dSwgQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgICAgIEVsZW1lbnQgdHV2ID0geG1sLmNyZWF0ZUVsZW1lbnQoInR1diIpOworICAgICAgICB0dXYuc2V0QXR0cmlidXRlKCJsYW5nIiwgY29udmVydEVuY29kaW5nKGl0ZW0pKTsKKyAgICAgICAgdHV2LnNldEF0dHJpYnV0ZSgiY3JlYXRpb25kYXRlIixjb252ZXJ0VG9JU08oaXRlbS5nZXRDcmVhdGVkRGF0ZSgpKSk7CisgICAgICAgIHR1di5zZXRBdHRyaWJ1dGUoImNyZWF0aW9uaWQiLGl0ZW0uZ2V0Q3JlYXRvcigpKTsKKyAgICAgICAgdHV2LnNldEF0dHJpYnV0ZSgiY2hhbmdlZGF0ZSIsY29udmVydFRvSVNPKGl0ZW0uZ2V0TW9kaWZpZWREYXRlKCkpKTsKKyAgICAgICAgdHV2LnNldEF0dHJpYnV0ZSgiY2hhbmdlaWQiLGl0ZW0uZ2V0TW9kaWZpZXIoKSk7CisgICAgICAgIGl0ZW0uZ2V0Q29tbWVudCgpOworICAgICAgICBpdGVtLmlzVHJhbnNsYXRlZCgpOworCQkKKyAgICAgICAgRWxlbWVudCBjb21tZW50X3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworICAgICAgICBjb21tZW50X3Byb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKGl0ZW0uZ2V0Q29tbWVudCgpKSk7CisgICAgICAgIGNvbW1lbnRfcHJvcC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ4LUNvbW1lbnQiKTsKKyAgICAgICAgdHV2LmFwcGVuZENoaWxkKGNvbW1lbnRfcHJvcCk7CisgICAgICAgIAorICAgICAgICBFbGVtZW50IHRyYW5zbGF0ZWRfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgIHRyYW5zbGF0ZWRfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2YoaXRlbS5pc1RyYW5zbGF0ZWQoKSkpKTsKKyAgICAgICAgdHJhbnNsYXRlZF9wcm9wLnNldEF0dHJpYnV0ZSgidHlwZSIsIngtVHJhbnNsYXRlZCIpOworICAgICAgICB0dXYuYXBwZW5kQ2hpbGQodHJhbnNsYXRlZF9wcm9wKTsKKwkJCisgICAgICAgIEhhc2h0YWJsZSBsb29rdXBzID0gaXRlbS5nZXRMb29rdXBzKCk7CisgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBsb29rdXBzLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IChTdHJpbmcpbG9va3Vwcy5nZXQoa2V5KTsKKyAgICAgICAgICAgIEVsZW1lbnQgbG9va3VwX3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworICAgICAgICAgICAgbG9va3VwX3Byb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKGtleSArICI9IiArIHZhbHVlKSk7CisgICAgICAgICAgICBsb29rdXBfcHJvcC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ4LUxvb2t1cCIpOworICAgICAgICAgICAgdHV2LmFwcGVuZENoaWxkKGxvb2t1cF9wcm9wKTsKKyAgICAgICAgfQorCQkKKyAgICAgICAgRWxlbWVudCBzZWcgPSB4bWwuY3JlYXRlRWxlbWVudCgic2VnIik7CisgICAgICAgIHNlZy5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRUcmFuc2xhdGlvbigpKSk7CisgICAgICAgIHR1di5hcHBlbmRDaGlsZChzZWcpOworCQkKKyAgICAgICAgdHUuYXBwZW5kQ2hpbGQodHV2KTsKKyAgICB9CisJCisgICAgcHVibGljIHZvaWQgZXhwb3J0KFJCTWFuYWdlciByYm0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChyYm0gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICAvLyBPcGVuIHRoZSBTYXZlIERpYWxvZworICAgICAgICBpbnQgcmV0X3ZhbCA9IGNob29zZXIuc2hvd1NhdmVEaWFsb2cobnVsbCk7CisgICAgICAgIGlmIChyZXRfdmFsICE9IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgcmV0dXJuOworICAgICAgICAvLyBSZXRyaWV2ZSBiYXNpYyBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgIEZpbGUgZmlsZSA9IGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7ICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpbGUocykgd2Ugd2lsbCBiZSB3b3JraW5nIHdpdGgKKyAgICAgICAgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShmaWxlLmdldFBhcmVudCgpKTsgICAgICAgICAgICAvLyBUaGUgZGlyZWN0b3J5IHdlIHdpbGwgYmUgd3JpdGluZyB0bworICAgICAgICBTdHJpbmcgYmFzZV9uYW1lID0gZmlsZS5nZXROYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpbGVzIHdlIHdpbGwgd3JpdGUKKyAgICAgICAgaWYgKGJhc2VfbmFtZSA9PSBudWxsIHx8IGJhc2VfbmFtZS5lcXVhbHMoIiIpKSBiYXNlX25hbWUgPSByYm0uZ2V0QmFzZUNsYXNzKCk7CisgICAgICAgIGlmIChiYXNlX25hbWUuZW5kc1dpdGgoIi50bXgiKSkgYmFzZV9uYW1lID0gYmFzZV9uYW1lLnN1YnN0cmluZygwLGJhc2VfbmFtZS5sZW5ndGgoKS00KTsKKwkJCisgICAgICAgIFN0cmluZyBmaWxlX25hbWUgPSBiYXNlX25hbWUgKyAiLnRteCI7CisgICAgICAgIAorICAgICAgICBWZWN0b3IgYnVuZGxlX3YgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBCdW5kbGUgbWFpbl9idW5kbGUgPSAoQnVuZGxlKWJ1bmRsZV92LmVsZW1lbnRBdCgwKTsKKyAgICAgICAgCisgICAgICAgIERvY3VtZW50IHhtbCA9IG5ldyBEb2N1bWVudEltcGwoKTsKKyAgICAgICAgRWxlbWVudCByb290ID0geG1sLmNyZWF0ZUVsZW1lbnQoInRteCIpOworICAgICAgICByb290LnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjIiKTsKKyAgICAgICAgeG1sLmFwcGVuZENoaWxkKHJvb3QpOworCQkKKyAgICAgICAgRWxlbWVudCBoZWFkZXIgPSB4bWwuY3JlYXRlRWxlbWVudCgiaGVhZGVyIik7CisgICAgICAgIEVsZW1lbnQgbm90ZSA9IHhtbC5jcmVhdGVFbGVtZW50KCJub3RlIik7CisgICAgICAgIG5vdGUuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3VtZW50IHdhcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgUkJNYW5hZ2VyIikpOworICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQobm90ZSk7CisgICAgICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoImNyZWF0aW9udG9vbCIsICJSQk1hbmFnZXIiKTsKKyAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgiY3JlYXRpb250b29sdmVyc2lvbiIsIFZFUlNJT04pOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJkYXRhdHlwZSIsICJQbGFpblRleHQiKTsKKyAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgic2VndHlwZSIsICJzZW50YW5jZSIpOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJhZG1pbmxhbmciLCAiZW4tdXMiKTsKKyAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgic3JjbGFuZyIsICJFTiIpOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJvLXRtZiIsICJub25lIik7CisgICAgICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoImNyZWF0aW9uZGF0ZSIsIGNvbnZlcnRUb0lTTyhuZXcgRGF0ZSgpKSk7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKKwkJCisgICAgICAgIEVsZW1lbnQgYm9keSA9IHhtbC5jcmVhdGVFbGVtZW50KCJib2R5Iik7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoYm9keSk7CisJCQorICAgICAgICBWZWN0b3IgZ3JvdXBfdiA9IG1haW5fYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGJ1bmRsZSBncm91cCBpbiBtYWluX2J1bmRsZQorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBncm91cF92LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGVHcm91cCBtYWluX2dyb3VwID0gKEJ1bmRsZUdyb3VwKWdyb3VwX3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgLy8gR2F0aGVyIGEgZ3JvdXAgb2YgZ3JvdXBzIG9mIHRoZSBzYW1lIG5hbWUgYXMgbWFpbl9ncm91cAorICAgICAgICAgICAgVmVjdG9yIGFsbF9ncm91cHNfdiA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGo9MTsgaiA8IGJ1bmRsZV92LnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlX3YuZWxlbWVudEF0KGopOworICAgICAgICAgICAgICAgIGlmIChidW5kbGUuaGFzR3JvdXAobWFpbl9ncm91cC5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvciBncm91cHMgPSBidW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgZ3JvdXBzLnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGVHcm91cCBncm91cCA9IChCdW5kbGVHcm91cClncm91cHMuZWxlbWVudEF0KGspOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmdldE5hbWUoKS5lcXVhbHMobWFpbl9ncm91cC5nZXROYW1lKCkpKSBhbGxfZ3JvdXBzX3YuYWRkRWxlbWVudChncm91cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBqCisgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBpdGVtIGluIG1haW5fZ3JvdXAKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IG1haW5fZ3JvdXAuZ2V0SXRlbUNvdW50KCk7IGorKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gbWFpbl9pdGVtID0gbWFpbl9ncm91cC5nZXRCdW5kbGVJdGVtKGopOworICAgICAgICAgICAgICAgIEVsZW1lbnQgdHUgPSB4bWwuY3JlYXRlRWxlbWVudCgidHUiKTsKKyAgICAgICAgICAgICAgICB0dS5zZXRBdHRyaWJ1dGUoInR1aWQiLG1haW5faXRlbS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgdHUuc2V0QXR0cmlidXRlKCJkYXRhdHlwZSIsIlRleHQiKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGdyb3VwIG5hbWUgZm9yIHRoZSBpdGVtCisgICAgICAgICAgICAgICAgRWxlbWVudCBncm91cF9wcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgICAgICAgICBncm91cF9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShtYWluX2dyb3VwLmdldE5hbWUoKSkpOworICAgICAgICAgICAgICAgIGdyb3VwX3Byb3Auc2V0QXR0cmlidXRlKCJ0eXBlIiwgIngtR3JvdXAiKTsKKyAgICAgICAgICAgICAgICB0dS5hcHBlbmRDaGlsZChncm91cF9wcm9wKTsKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG1haW5faXRlbSB0byB0aGUgeG1sCisgICAgICAgICAgICAgICAgYXBwZW5kVFVWKHhtbCwgdHUsIG1haW5faXRlbSk7CisgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBncm91cHMgb2YgdGhlIHNhbWUgbmFtZSBhcyBtYWluX2dyb3VwCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgYWxsX2dyb3Vwc192LnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWFsbF9ncm91cHNfdi5lbGVtZW50QXQoayk7CisgICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgaXRlbXMgaW4gZWFjaCBncm91cAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBsPTA7IGwgPCBncm91cC5nZXRJdGVtQ291bnQoKTsgbCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSBncm91cC5nZXRCdW5kbGVJdGVtKGwpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0S2V5KCkuZXF1YWxzKG1haW5faXRlbS5nZXRLZXkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUVVYoeG1sLCB0dSwgaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGwKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBrCisgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZCh0dSk7CisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBqCisgICAgICAgIH0gLy8gZW5kIGZvciAtIGkKKyAgICAgICAgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG5ldyBGaWxlKGRpcmVjdG9yeSxmaWxlX25hbWUpKTsKKyAgICAgICAgT3V0cHV0Rm9ybWF0IG9mID0gbmV3IE91dHB1dEZvcm1hdCh4bWwpOworICAgICAgICBvZi5zZXRJbmRlbnRpbmcodHJ1ZSk7CisgICAgICAgIG9mLnNldEVuY29kaW5nKCJJU08tODg1OS0xIik7CisgICAgICAgIFhNTFNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldyBYTUxTZXJpYWxpemVyKGZ3LCBvZik7CisgICAgICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHhtbCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEltcG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJUTVhJbXBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzhkNjMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJUTVhJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOworCitpbXBvcnQgb3JnLnczYy5kb20uKjsKK2ltcG9ydCBvcmcueG1sLnNheC4qOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIHN1cGVyIGNsYXNzIGZvciBhbGwgaW1wb3J0ZXIgcGx1Zy1pbiBjbGFzc2VzLiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIG1ldGhvZHMKKyAqIGFuZCBmdW5jdGlvbmFsaXR5IGNvbW1vbiB0byBhbGwgaW1wb3J0ZXJzLiBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdXAgdGhlIG9wdGlvbnMgZGlhbG9nIGFuZAorICogZGlzcGxheWluZyBpdCB0byB0aGUgdXNlciwgcGVyZm9ybWluZyB0aGUgYWN0dWFsIGluc2VydGlvbnMgaW50byB0aGUgcmVzb3VyY2UgYnVuZGxlIG1hbmFnZXIsCisgKiBhbmQgbWFuYWdpbmcgYW55IGltcG9ydCBjb25mbGljdHMuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJCVE1YSW1wb3J0ZXIgZXh0ZW5kcyBSQkltcG9ydGVyIHsKKwkKKyAgICBEb2N1bWVudCB0bXhfeG1sID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEJhc2ljIGNvbnN0cnVjdG9yIGZvciB0aGUgVE1YIGltcG9ydGVyIGZyb20gdGhlIHBhcmVudCBSQk1hbmFnZXIgZGF0YSBhbmQgYSBEaWFsb2cgdGl0bGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIFJCVE1YSW1wb3J0ZXIoU3RyaW5nIHRpdGxlLCBSQk1hbmFnZXIgcmJtLCBSQk1hbmFnZXJHVUkgZ3VpKSB7CisgICAgICAgIHN1cGVyKHRpdGxlLCByYm0sIGd1aSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIHNldHVwRmlsZUNob29zZXIoKSB7CisgICAgICAgIGNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChmLmdldE5hbWUoKS5lbmRzV2l0aCgiLnRteCIpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfVE1YX2ZpbGVfZGVzY3JpcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIGJlZ2luSW1wb3J0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuYmVnaW5JbXBvcnQoKTsKKyAgICAgICAgRmlsZSB0bXhfZmlsZSA9IGdldENob3NlbkZpbGUoKTsKKwkJCisgICAgICAgIHRyeSB7CisgICAgICAgIAlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSh0bXhfZmlsZSk7CisgICAgICAgICAgICBJbnB1dFNvdXJjZSBpcyA9IG5ldyBJbnB1dFNvdXJjZShmaXMpOworICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisgICAgICAgIAl0bXhfeG1sID0gYnVpbGRlci5wYXJzZShpcyk7CisgICAgICAgICAgICBmaXMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICAJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG14X3htbCA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW1wb3J0RG9jKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBpbXBvcnREb2MoKSB7CisgICAgICAgIGlmICh0bXhfeG1sID09IG51bGwpCisgICAgICAgIAlyZXR1cm47CisgICAgICAgIEVsZW1lbnQgcm9vdCA9IHRteF94bWwuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIE5vZGUgbm9kZSA9IHJvb3QuZ2V0Rmlyc3RDaGlsZCgpOworICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIChub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUgfHwgIShub2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiaGVhZGVyIikpKSkgeworICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAvL0VsZW1lbnRJbXBsIGhlYWRlciA9IChFbGVtZW50SW1wbClub2RlOworICAgICAgICBub2RlID0gcm9vdC5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhKG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJib2R5IikpKSkgeworICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBFbGVtZW50IGJvZHkgPSAoRWxlbWVudClub2RlOworICAgICAgICByZXNvbHZlRW5jb2RpbmdzKGdldEVuY29kaW5nc1ZlY3Rvcihib2R5KSk7CisJCQorICAgICAgICAvLyBOb3cgZG8gdGhlIGFjdHVhbCBpbXBvcnQgcmVzb3VyY2UgYnkgcmVzb3VyY2UKKyAgICAgICAgTm9kZUxpc3QgdHVfbGlzdCA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInR1Iik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHR1X2xpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgRWxlbWVudCB0dV9lbGVtID0gKEVsZW1lbnQpdHVfbGlzdC5pdGVtKGkpOworICAgICAgICAgICAgLy8gR2V0IHRoZSBrZXkgdmFsdWUKKyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdHVfZWxlbS5nZXRBdHRyaWJ1dGUoInR1aWQiKTsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpCisgICAgICAgICAgICAJY29udGludWU7CisgICAgICAgICAgICAvLyBHZXQgdGhlIGdyb3VwIGlmIGl0IGV4aXN0cworICAgICAgICAgICAgU3RyaW5nIGdyb3VwID0gbnVsbDsKKyAgICAgICAgICAgIE5vZGVMaXN0IHByb3BfbGlzdCA9IHR1X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByb3AiKTsKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IHByb3BfbGlzdC5nZXRMZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wX2VsZW0gPSAoRWxlbWVudClwcm9wX2xpc3QuaXRlbShqKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHByb3BfZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGUuZXF1YWxzKCJ4LUdyb3VwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcF9lbGVtLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlTGlzdCB0ZXh0X2xpc3QgPSBwcm9wX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9saXN0LmdldExlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBUZXh0IHRleHRfZWxlbSA9IChUZXh0KXRleHRfbGlzdC5pdGVtKDApOworICAgICAgICAgICAgICAgICAgICBncm91cCA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCB8fCBncm91cC5sZW5ndGgoKSA8IDEpIGdyb3VwID0gZ2V0RGVmYXVsdEdyb3VwKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVMaXN0IHR1dl9saXN0ID0gdHVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHV2Iik7CisgICAgICAgICAgICAvLyBGb3IgZWFjaCB0dXYgZWxlbWVudAorICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgdHV2X2xpc3QuZ2V0TGVuZ3RoKCk7IGorKykgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgdHV2X2VsZW0gPSAoRWxlbWVudCl0dXZfbGlzdC5pdGVtKGopOworICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IHR1dl9lbGVtLmdldEF0dHJpYnV0ZSgibGFuZyIpOworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBlbmNvZGluZworICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyIGFycmF5W10gPSBlbmNvZGluZy50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgayA8IGFycmF5Lmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheVtrXSA9PSAnLScpCisgICAgICAgICAgICAgICAgICAgIAlhcnJheVtrXSA9ICdfJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcudmFsdWVPZihhcnJheSk7CisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB0cmFuc2xhdGlvbiB2YWx1ZQorICAgICAgICAgICAgICAgIE5vZGVMaXN0IHNlZ19saXN0ID0gdHV2X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlZyIpOworICAgICAgICAgICAgICAgIGlmIChzZWdfbGlzdC5nZXRMZW5ndGgoKSA8IDEpCisgICAgICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgICAgIEVsZW1lbnQgc2VnX2VsZW0gPSAoRWxlbWVudClzZWdfbGlzdC5pdGVtKDApOworICAgICAgICAgICAgICAgIHNlZ19lbGVtLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIE5vZGVMaXN0IHRleHRfbGlzdCA9IHNlZ19lbGVtLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dF9saXN0LmdldExlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgICAgICAJY29udGludWU7CisgICAgICAgICAgICAgICAgVGV4dCB0ZXh0X2VsZW0gPSAoVGV4dCl0ZXh0X2xpc3QuaXRlbSgwKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGJ1bmRsZSBpdGVtCisgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0obnVsbCwgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIC8vIEdldCBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uIHZhbHVlcworICAgICAgICAgICAgICAgIGl0ZW0uc2V0Q3JlYXRlZERhdGUodHV2X2VsZW0uZ2V0QXR0cmlidXRlKCJjcmVhdGlvbmRhdGUiKSk7CisgICAgICAgICAgICAgICAgaXRlbS5zZXRNb2RpZmllZERhdGUodHV2X2VsZW0uZ2V0QXR0cmlidXRlKCJjaGFuZ2VkYXRlIikpOworICAgICAgICAgICAgICAgIGlmICh0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNoYW5nZWlkIikgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAJaXRlbS5zZXRNb2RpZmllcih0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNoYW5nZWlkIikpOworICAgICAgICAgICAgICAgIGlmICh0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNyZWF0aW9uaWQiKSAhPSBudWxsKQorICAgICAgICAgICAgICAgIAlpdGVtLnNldENyZWF0b3IodHV2X2VsZW0uZ2V0QXR0cmlidXRlKCJjcmVhdGlvbmlkIikpOworICAgICAgICAgICAgICAgIC8vIEdldCBwcm9wZXJ0aWVzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHByb3BfbGlzdCA9IHR1dl9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcm9wIik7CisgICAgICAgICAgICAgICAgSGFzaHRhYmxlIGxvb2t1cHMgPSBudWxsOworICAgICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgayA8IHByb3BfbGlzdC5nZXRMZW5ndGgoKTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgcHJvcF9lbGVtID0gKEVsZW1lbnQpcHJvcF9saXN0Lml0ZW0oayk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0eXBlID0gcHJvcF9lbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGUuZXF1YWxzKCJ4LUNvbW1lbnQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb21tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2xpc3QgPSBwcm9wX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfbGlzdC5nZXRMZW5ndGgoKSA8IDEpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9lbGVtID0gKFRleHQpdGV4dF9saXN0Lml0ZW0oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tbWVudCA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwgJiYgY29tbWVudC5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAJaXRlbS5zZXRDb21tZW50KGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCAmJiB0eXBlLmVxdWFscygieC1UcmFuc2xhdGVkIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdHJhbnNsYXRlZCBmbGFnIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2xpc3QgPSBwcm9wX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfbGlzdC5nZXRMZW5ndGgoKSA8IDEpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9lbGVtID0gKFRleHQpdGV4dF9saXN0Lml0ZW0oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaXRlbS5zZXRUcmFuc2xhdGVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJmYWxzZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpdGVtLnNldFRyYW5zbGF0ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaXRlbS5zZXRUcmFuc2xhdGVkKGdldERlZmF1bHRUcmFuc2xhdGVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgCWl0ZW0uc2V0VHJhbnNsYXRlZChnZXREZWZhdWx0VHJhbnNsYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5lcXVhbHMoIngtTG9va3VwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIGxvb2t1cCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9lbGVtLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9saXN0ID0gcHJvcF9lbGVtLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0X2xpc3QuZ2V0TGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9lbGVtID0gKFRleHQpdGV4dF9saXN0Lml0ZW0oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmRleE9mKCI9IikgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va3VwcyA9PSBudWxsKSBsb29rdXBzID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxrZXkgPSB0ZXh0LnN1YnN0cmluZygwLHRleHQuaW5kZXhPZigiPSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsdmFsdWUgPSB0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoIj0iKSsxLHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3Vwcy5wdXQobGtleSwgbHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7IC8qIFN0cmluZyBvdXQgb2YgYm91bmRzIC0gSWdub3JlIGFuZCBnbyBvbiAqLyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgCWl0ZW0uc2V0VHJhbnNsYXRlZChnZXREZWZhdWx0VHJhbnNsYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobG9va3VwcyAhPSBudWxsKSBpdGVtLnNldExvb2t1cHMobG9va3Vwcyk7CisgICAgICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2UoaXRlbSwgZW5jb2RpbmcsIGdyb3VwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBwcml2YXRlIFZlY3RvciBnZXRFbmNvZGluZ3NWZWN0b3IoRWxlbWVudCBib2R5KSB7CisgICAgICAgIFN0cmluZyBlbXB0eSA9ICIiOworICAgICAgICBpZiAoYm9keSA9PSBudWxsKQorICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIEhhc2h0YWJsZSBoYXNoID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBOb2RlTGlzdCB0dV9saXN0ID0gYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHUiKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdHVfbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBFbGVtZW50IHR1X2VsZW0gPSAoRWxlbWVudCl0dV9saXN0Lml0ZW0oaSk7CisgICAgICAgICAgICBOb2RlTGlzdCB0dXZfbGlzdCA9IHR1X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInR1diIpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgdHV2X2xpc3QuZ2V0TGVuZ3RoKCk7IGorKykgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgdHV2X2VsZW0gPSAoRWxlbWVudCl0dXZfbGlzdC5pdGVtKGopOworICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IHR1dl9lbGVtLmdldEF0dHJpYnV0ZSgibGFuZyIpOworICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKQorICAgICAgICAgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyIGFycmF5W10gPSBlbmNvZGluZy50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgayA8IGFycmF5Lmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheVtrXSA9PSAnLScpCisgICAgICAgICAgICAgICAgICAgIAlhcnJheVtrXSA9ICdfJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcudmFsdWVPZihhcnJheSk7CisgICAgICAgICAgICAgICAgaWYgKCEoaGFzaC5jb250YWluc0tleShlbmNvZGluZykpKQorICAgICAgICAgICAgICAgIAloYXNoLnB1dChlbmNvZGluZyxlbXB0eSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBoYXNoLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgCXYuYWRkRWxlbWVudChrZXlzLm5leHRFbGVtZW50KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2OworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJ4bGlmZkV4cG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJ4bGlmZkV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlN2I2YgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQnhsaWZmRXhwb3J0ZXIuamF2YQpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEudGV4dC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uKjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS4qOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLio7CisKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBwbHVnLWluIHRvIFJCTWFuYWdlciB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBleHBvcnQgUmVzb3VyY2UgQnVuZGxlcworICogYWxvbmcgd2l0aCBzb21lIG9mIHRoZSBtZXRhLWRhdGEgYXNzb2NpYXRlZCBieSBSQk1hbmFnZXIgdG8gdGhlIFhMSUZGIHNwZWNpZmljYXRpb24uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBYTElGRiB2aXNpdCB0aGUgd2ViIHNpdGUKKyAqIDxhIGhyZWY9Imh0dHA6Ly93d3cubGlzYS5vcmcveGxpZmYvIj5odHRwOi8vd3d3Lmxpc2Eub3JnL3hsaWZmLzwvYT4KKyAqIAorICogQGF1dGhvciBHZW9yZ2UgUmhvdGVuCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJ4bGlmZkV4cG9ydGVyIGV4dGVuZHMgUkJFeHBvcnRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT04gPSAiMC43IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWExJRkZfRFREID0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy94bGlmZi9kb2N1bWVudHMveGxpZmYuZHRkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWExJRkZfUFVCTElDX05BTUUgPSAiLS8vWExJRkYvL0RURCBYTElGRi8vRU4iOworICAgIHByaXZhdGUgU2ltcGxlRGF0ZUZvcm1hdCBkYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKKwkKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgWExJRkYgZXhwb3J0ZXIuCisgICAgICovCisgICAgICAgIAorICAgIHB1YmxpYyBSQnhsaWZmRXhwb3J0ZXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisJCQorICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBmaWxlIGNob29zZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChjaG9vc2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisgICAgICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlhMSUZGIEZpbGVzIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGYuaXNEaXJlY3RvcnkoKSB8fCBmLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhsZiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBjb252ZXJ0VG9JU08oRGF0ZSBkKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIGdjLnNldFRpbWUoZCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9JU08oZ2MpOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBjb252ZXJ0VG9JU08oR3JlZ29yaWFuQ2FsZW5kYXIgZ2MpIHsKKyAgICAJZGF0ZUZvcm1hdC5zZXRDYWxlbmRhcihnYyk7CisgICAgICAgIHJldHVybiBkYXRlRm9ybWF0LmZvcm1hdChnYy5nZXRUaW1lKCkpOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBnZXRMb2NhbGUoQnVuZGxlIGl0ZW0pIHsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gaXRlbS5nZXRMYW5ndWFnZUVuY29kaW5nKCk7CisgICAgICAgIGlmIChsYW5ndWFnZSAhPSBudWxsICYmICFsYW5ndWFnZS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAvL2xhbmd1YWdlID0gbGFuZ3VhZ2UudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gaXRlbS5nZXRDb3VudHJ5RW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmIChjb3VudHJ5ICE9IG51bGwgJiYgIWNvdW50cnkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIC8vY291bnRyeSA9IGNvdW50cnkudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFyaWFudCA9IGl0ZW0uZ2V0VmFyaWFudEVuY29kaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQgIT0gbnVsbCAmJiAhdmFyaWFudC5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vdmFyaWFudCA9IHZhcmlhbnQudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlICsgIi0iICsgY291bnRyeSArICItIiArIHZhcmlhbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZSArICItIiArIGNvdW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGdldFBhcmVudExvY2FsZShTdHJpbmcgbG9jYWxlKSB7CisgICAgCQorICAgIAlpbnQgdHJ1bmNJbmRleCA9IGxvY2FsZS5sYXN0SW5kZXhPZignLScpOworICAgIAlpZiAodHJ1bmNJbmRleCA+IDApIHsKKyAgICAJCWxvY2FsZSA9IGxvY2FsZS5zdWJzdHJpbmcoMCwgdHJ1bmNJbmRleCk7CisgICAgCX0KKyAgICAJZWxzZSB7CisgICAgCQlsb2NhbGUgPSAiIjsKKyAgICAJfQorICAgIAlyZXR1cm4gbG9jYWxlOworICAgIH0KKwkKKyAgICBwcml2YXRlIHZvaWQgYWRkVHJhbnNVbml0KERvY3VtZW50IHhtbCwgRWxlbWVudCBncm91cEVsZW0sIEJ1bmRsZUl0ZW0gaXRlbSwgQnVuZGxlSXRlbSBwYXJlbnRfaXRlbSkgeworICAgICAgICBFbGVtZW50IHRyYW5zVW5pdCA9IHhtbC5jcmVhdGVFbGVtZW50KCJ0cmFucy11bml0Iik7CisgICAgICAgIHRyYW5zVW5pdC5zZXRBdHRyaWJ1dGUoImRhdGUiLGNvbnZlcnRUb0lTTyhpdGVtLmdldE1vZGlmaWVkRGF0ZSgpKSk7CisgICAgICAgIHRyYW5zVW5pdC5zZXRBdHRyaWJ1dGUoImlkIixpdGVtLmdldEtleSgpKTsKKwkJCisgICAgICAgIFN0cmluZyBzb3VyY2VPclRhcmdldCA9ICJ0YXJnZXQiOworICAgICAgICBpZiAocGFyZW50X2l0ZW0gPT0gbnVsbCkgeworICAgICAgICAJc291cmNlT3JUYXJnZXQgPSAic291cmNlIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVsZW1lbnQgc291cmNlID0geG1sLmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpOworICAgICAgICAgICAgc291cmNlLnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKyAgICAgICAgICAgIHNvdXJjZS5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUocGFyZW50X2l0ZW0uZ2V0VHJhbnNsYXRpb24oKSkpOworICAgICAgICAgICAgdHJhbnNVbml0LmFwcGVuZENoaWxkKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICAgICAgRWxlbWVudCB0YXJnZXQgPSB4bWwuY3JlYXRlRWxlbWVudChzb3VyY2VPclRhcmdldCk7CisgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgCS8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHRyYW5zbGF0ZSBhdHRyaWJ1dGUKKyAgICAgICAgaWYgKGl0ZW0uaXNUcmFuc2xhdGVkKCkpIHsKKyAgICAgICAgCS8vIFRPRE8gSGFuZGxlIHRoZSBvdGhlciBzdGF0ZXMgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgCXRyYW5zVW5pdC5zZXRBdHRyaWJ1dGUoInN0YXRlIiwgInRyYW5zbGF0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSkpOworICAgICAgICB0cmFuc1VuaXQuYXBwZW5kQ2hpbGQodGFyZ2V0KTsKKwkJCisgICAgICAgIGlmIChpdGVtLmdldENvbW1lbnQoKSAhPSBudWxsICYmIGl0ZW0uZ2V0Q29tbWVudCgpLmxlbmd0aCgpID4gMSkgeworCSAgICAgICAgRWxlbWVudCBjb21tZW50X3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgibm90ZSIpOworCSAgICAgICAgY29tbWVudF9wcm9wLnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKwkgICAgICAgIGNvbW1lbnRfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRDb21tZW50KCkpKTsKKwkgICAgICAgIHRyYW5zVW5pdC5hcHBlbmRDaGlsZChjb21tZW50X3Byb3ApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKGl0ZW0uZ2V0Q3JlYXRvcigpICE9IG51bGwgJiYgaXRlbS5nZXRDcmVhdG9yKCkubGVuZ3RoKCkgPiAxKQorICAgICAgICAJfHwgKGl0ZW0uZ2V0TW9kaWZpZXIoKSAhPSBudWxsICYmIGl0ZW0uZ2V0TW9kaWZpZXIoKS5sZW5ndGgoKSA+IDEpKQorICAgICAgICB7CisgICAgICAgICAgICBFbGVtZW50IHRyYW5zVW5pdF9wcm9wX2dyb3VwX2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcC1ncm91cCIpOworCisgICAgICAgICAgICBpZiAoaXRlbS5nZXRDcmVhdG9yKCkgIT0gbnVsbCAmJiBpdGVtLmdldENyZWF0b3IoKS5sZW5ndGgoKSA+IDEpIHsKKwkgICAgICAgICAgICBFbGVtZW50IGNyZWF0b3JfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisJICAgICAgICAgICAgY3JlYXRvcl9wcm9wLnNldEF0dHJpYnV0ZSgicHJvcC10eXBlIiwiY3JlYXRvciIpOworCSAgICAgICAgICAgIGNyZWF0b3JfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRDcmVhdG9yKCkpKTsKKwkJICAgICAgICB0cmFuc1VuaXRfcHJvcF9ncm91cF9lbGVtLmFwcGVuZENoaWxkKGNyZWF0b3JfcHJvcCk7CisgICAgICAgICAgICB9CisJICAgICAgICAKKyAgICAgICAgICAgIGlmIChpdGVtLmdldENyZWF0b3IoKSAhPSBudWxsICYmIGl0ZW0uZ2V0Q3JlYXRvcigpLmxlbmd0aCgpID4gMSkgeworCSAgICAgICAgICAgIEVsZW1lbnQgY3JlYXRlZF9wcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKwkgICAgICAgICAgICBjcmVhdGVkX3Byb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJjcmVhdGVkIik7CisJICAgICAgICAgICAgY3JlYXRlZF9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShjb252ZXJ0VG9JU08oaXRlbS5nZXRDcmVhdGVkRGF0ZSgpKSkpOworCQkgICAgICAgIHRyYW5zVW5pdF9wcm9wX2dyb3VwX2VsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlZF9wcm9wKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIAorICAgICAgICAJaWYgKGl0ZW0uZ2V0TW9kaWZpZXIoKSAhPSBudWxsICYmIGl0ZW0uZ2V0TW9kaWZpZXIoKS5sZW5ndGgoKSA+IDEpIHsKKwkJICAgICAgICBFbGVtZW50IG1vZGlmaWVyX3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworCQkgICAgICAgIG1vZGlmaWVyX3Byb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJtb2RpZmllciIpOworCQkgICAgICAgIG1vZGlmaWVyX3Byb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKGl0ZW0uZ2V0TW9kaWZpZXIoKSkpOworCQkgICAgICAgIHRyYW5zVW5pdF9wcm9wX2dyb3VwX2VsZW0uYXBwZW5kQ2hpbGQobW9kaWZpZXJfcHJvcCk7CisgICAgICAgIAl9CisJICAgICAgICAKKwkgICAgICAgIHRyYW5zVW5pdC5hcHBlbmRDaGlsZCh0cmFuc1VuaXRfcHJvcF9ncm91cF9lbGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIGdyb3VwRWxlbS5hcHBlbmRDaGlsZCh0cmFuc1VuaXQpOworICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJibSA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAvLyBPcGVuIHRoZSBTYXZlIERpYWxvZworICAgICAgICBpbnQgcmV0X3ZhbCA9IGNob29zZXIuc2hvd1NhdmVEaWFsb2cobnVsbCk7CisgICAgICAgIGlmIChyZXRfdmFsICE9IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgLy8gUmV0cmlldmUgYmFzaWMgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICBGaWxlIGZpbGUgPSBjaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOyAgICAgICAgICAgICAgLy8gVGhlIGZpbGUocykgd2Ugd2lsbCBiZSB3b3JraW5nIHdpdGgKKyAgICAgICAgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShmaWxlLmdldFBhcmVudCgpKTsgICAgICAgIC8vIFRoZSBkaXJlY3Rvcnkgd2Ugd2lsbCBiZSB3cml0aW5nIHRvCisgICAgICAgIFN0cmluZyBiYXNlX25hbWUgPSBmaWxlLmdldE5hbWUoKTsgICAgICAgICAgICAgICAgICAvLyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBmaWxlcyB3ZSB3aWxsIHdyaXRlCisgICAgICAgIGlmIChiYXNlX25hbWUgPT0gbnVsbCB8fCBiYXNlX25hbWUuZXF1YWxzKCIiKSkKKyAgICAgICAgCWJhc2VfbmFtZSA9IHJibS5nZXRCYXNlQ2xhc3MoKTsKKyAgICAgICAgaWYgKGJhc2VfbmFtZS5lbmRzV2l0aCgiLnhsZiIpKQorICAgICAgICAJYmFzZV9uYW1lID0gYmFzZV9uYW1lLnN1YnN0cmluZygwLGJhc2VfbmFtZS5sZW5ndGgoKS00KTsKKwkJCisgICAgICAgIFN0cmluZyBmaWxlX25hbWUgPSBiYXNlX25hbWUgKyAiLnhsZiI7CisgICAgICAgIAorICAgICAgICBWZWN0b3IgYnVuZGxlX3YgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBFbnVtZXJhdGlvbiBidW5kbGVJdGVyID0gYnVuZGxlX3YuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGJ1bmRsZUl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgCWV4cG9ydEZpbGUocmJtLCBkaXJlY3RvcnksIGJhc2VfbmFtZSwgKEJ1bmRsZSlidW5kbGVJdGVyLm5leHRFbGVtZW50KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBhZGRIZWFkZXJQcm9wZXJ0aWVzKERvY3VtZW50IHhtbCwgRWxlbWVudCBoZWFkZXIsIEJ1bmRsZSBtYWluX2J1bmRsZSkgeworICAgICAgICBpZiAobWFpbl9idW5kbGUuY29tbWVudCAhPSBudWxsICYmIG1haW5fYnVuZGxlLmNvbW1lbnQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICBFbGVtZW50IG5vdGUgPSB4bWwuY3JlYXRlRWxlbWVudCgibm90ZSIpOworICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKG5vdGUpOworICAgICAgICAgICAgbm90ZS5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUobWFpbl9idW5kbGUuY29tbWVudCkpOworICAgICAgICAgICAgbm90ZS5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChtYWluX2J1bmRsZS5uYW1lICE9IG51bGwgJiYgbWFpbl9idW5kbGUubmFtZS5sZW5ndGgoKSA+IDApCisgICAgCQl8fCAobWFpbl9idW5kbGUubWFuYWdlciAhPSBudWxsICYmIG1haW5fYnVuZGxlLm1hbmFnZXIubGVuZ3RoKCkgPiAwKQorICAgICAgICAJfHwgKG1haW5fYnVuZGxlLmxhbmd1YWdlICE9IG51bGwgJiYgbWFpbl9idW5kbGUubGFuZ3VhZ2UubGVuZ3RoKCkgPiAwKQorCQkJfHwgKG1haW5fYnVuZGxlLmNvdW50cnkgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS5jb3VudHJ5Lmxlbmd0aCgpID4gMCkKKwkJCXx8IChtYWluX2J1bmRsZS52YXJpYW50ICE9IG51bGwgJiYgbWFpbl9idW5kbGUudmFyaWFudC5sZW5ndGgoKSA+IDApKQorICAgICAgICB7CisgICAgICAgICAgICBFbGVtZW50IHByb3BfZ3JvdXAgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcC1ncm91cCIpOworICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKHByb3BfZ3JvdXApOworICAgICAgICAgICAgaWYgKG1haW5fYnVuZGxlLm5hbWUgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS5uYW1lLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJuYW1lIik7CisgICAgICAgICAgICAJcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUobWFpbl9idW5kbGUubmFtZSkpOworICAgICAgICAgICAgCXByb3BfZ3JvdXAuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWFpbl9idW5kbGUubWFuYWdlciAhPSBudWxsICYmIG1haW5fYnVuZGxlLm1hbmFnZXIubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsIm1hbmFnZXIiKTsKKyAgICAgICAgICAgIAlwcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShtYWluX2J1bmRsZS5tYW5hZ2VyKSk7CisgICAgICAgICAgICAJcHJvcF9ncm91cC5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWluX2J1bmRsZS5sYW5ndWFnZSAhPSBudWxsICYmIG1haW5fYnVuZGxlLmxhbmd1YWdlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJsYW5ndWFnZSIpOworICAgICAgICAgICAgCXByb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKG1haW5fYnVuZGxlLmxhbmd1YWdlKSk7CisgICAgICAgICAgICAJcHJvcF9ncm91cC5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWluX2J1bmRsZS5jb3VudHJ5ICE9IG51bGwgJiYgbWFpbl9idW5kbGUuY291bnRyeS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50IHByb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworICAgICAgICAgICAgCWhlYWRlci5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIAlwcm9wLnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKyAgICAgICAgICAgIAlwcm9wLnNldEF0dHJpYnV0ZSgicHJvcC10eXBlIiwiY291bnRyeSIpOworICAgICAgICAgICAgCXByb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKG1haW5fYnVuZGxlLmNvdW50cnkpKTsKKyAgICAgICAgICAgIAlwcm9wX2dyb3VwLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1haW5fYnVuZGxlLnZhcmlhbnQgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS52YXJpYW50Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJ2YXJpYW50Iik7CisgICAgICAgICAgICAJcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUobWFpbl9idW5kbGUudmFyaWFudCkpOworICAgICAgICAgICAgCXByb3BfZ3JvdXAuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGV4cG9ydEZpbGUoUkJNYW5hZ2VyIHJibSwgRmlsZSBkaXJlY3RvcnksIFN0cmluZyBiYXNlX25hbWUsIEJ1bmRsZSBtYWluX2J1bmRsZSkKKyAgICAJdGhyb3dzIElPRXhjZXB0aW9uCisgICAgeworICAgICAgICBCdW5kbGUgcGFyZW50X2J1bmRsZSA9IG51bGw7CisgICAgICAgIFN0cmluZyBwYXJlbnRfYnVuZGxlX25hbWUgPSBudWxsOworICAgICAgICBpZiAoIWdldExvY2FsZShtYWluX2J1bmRsZSkuZXF1YWxzKCIiKSkgeworICAgICAgICAJLy8gSWYgdGhpcyBpc24ndCB0aGUgcm9vdCBsb2NhbGUsIGZpbmQgdGhlIHBhcmVudAorICAgICAgICAgICAgcGFyZW50X2J1bmRsZV9uYW1lID0gZ2V0UGFyZW50TG9jYWxlKGdldExvY2FsZShtYWluX2J1bmRsZSkpOworCSAgICAgICAgZG8geworCSAgICAgICAgCXBhcmVudF9idW5kbGUgPSByYm0uZ2V0QnVuZGxlKHBhcmVudF9idW5kbGVfbmFtZSk7CisJICAgICAgICAJaWYgKHBhcmVudF9idW5kbGUgIT0gbnVsbCkgeworCSAgICAgICAgCQlicmVhazsKKwkgICAgICAgIAl9CisJICAgICAgICAgICAgcGFyZW50X2J1bmRsZV9uYW1lID0gZ2V0UGFyZW50TG9jYWxlKHBhcmVudF9idW5kbGVfbmFtZSk7CisJICAgICAgICB9IHdoaWxlICghcGFyZW50X2J1bmRsZV9uYW1lLmVxdWFscygiIikpOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyOworICAgICAgICB0cnkgeworICAgICAgICAJYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpIHsKKyAgICAgICAgCXRocm93IG5ldyBJT0V4Y2VwdGlvbihwY2UuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBkb2N1bWVudAorICAgICAgICBEb2N1bWVudCB4bWwgPSBidWlsZGVyLmdldERPTUltcGxlbWVudGF0aW9uKCkuY3JlYXRlRG9jdW1lbnQobnVsbCwgInhsaWZmIiwgbnVsbCk7CisgICAgICAgICAKKyAgICAgICAgLy8gRmlsbCB0aGUgZG9jdW1lbnQKKyAgICAgICAgRWxlbWVudCByb290ID0geG1sLmdldERvY3VtZW50RWxlbWVudCgpOworICAgICAgICByb290LnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjEiKTsKKyAgICAgICAgLy9yb290LmFwcGVuZENoaWxkKHJvb3QpOworICAgICAgICAKKyAgICAgICAgRWxlbWVudCBmaWxlX2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgiZmlsZSIpOworICAgICAgICBTdHJpbmcgbWFpbkxvY2FsZSA9IGdldExvY2FsZShtYWluX2J1bmRsZSk7CisgICAgICAgIEJ1bmRsZSBwYXJlbnRCdW5kbGUgPSBudWxsOworICAgICAgICBpZiAobWFpbkxvY2FsZS5lcXVhbHMoIiIpKSB7CisgICAgICAgIAlmaWxlX2VsZW0uc2V0QXR0cmlidXRlKCJzb3VyY2UtbGFuZ3VhZ2UiLCBnZXRMb2NhbGUobWFpbl9idW5kbGUpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgCWZpbGVfZWxlbS5zZXRBdHRyaWJ1dGUoInNvdXJjZS1sYW5ndWFnZSIsIHBhcmVudF9idW5kbGVfbmFtZSk7CisgICAgICAgIAlmaWxlX2VsZW0uc2V0QXR0cmlidXRlKCJ0YXJnZXQtbGFuZ3VhZ2UiLCBnZXRMb2NhbGUobWFpbl9idW5kbGUpKTsKKyAgICAgICAgfQorICAgICAgICBmaWxlX2VsZW0uc2V0QXR0cmlidXRlKCJkYXRhdHlwZSIsICJwbGFpbnRleHQiKTsKKyAgICAgICAgZmlsZV9lbGVtLnNldEF0dHJpYnV0ZSgiZGF0ZSIsIGNvbnZlcnRUb0lTTyhuZXcgRGF0ZSgpKSk7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZmlsZV9lbGVtKTsKKwkJCisgICAgICAgIEVsZW1lbnQgaGVhZGVyID0geG1sLmNyZWF0ZUVsZW1lbnQoImhlYWRlciIpOworICAgICAgICBFbGVtZW50IHRvb2wgPSB4bWwuY3JlYXRlRWxlbWVudCgidG9vbCIpOworICAgICAgICB0b29sLnNldEF0dHJpYnV0ZSgidG9vbC1uYW1lIiwgIlJCTWFuYWdlciIpOworICAgICAgICB0b29sLnNldEF0dHJpYnV0ZSgidG9vbC1pZCIsICJSQk1hbmFnZXIiKTsKKyAgICAgICAgdG9vbC5zZXRBdHRyaWJ1dGUoInRvb2wtdmVyc2lvbiIsIFZFUlNJT04pOworICAgICAgICAvLyBUT0RPIEFkZCBmaWxlIGF0dHJpYnV0ZQorICAgICAgICAvL2hlYWRlci5zZXRBdHRyaWJ1dGUoImZpbGUiLCAiIik7CisgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0b29sKTsKKyAgICAgICAgYWRkSGVhZGVyUHJvcGVydGllcyh4bWwsIGhlYWRlciwgbWFpbl9idW5kbGUpOworICAgICAgICBmaWxlX2VsZW0uYXBwZW5kQ2hpbGQoaGVhZGVyKTsKKwkJCisgICAgICAgIEVsZW1lbnQgYm9keSA9IHhtbC5jcmVhdGVFbGVtZW50KCJib2R5Iik7CisgICAgICAgIGZpbGVfZWxlbS5hcHBlbmRDaGlsZChib2R5KTsKKwkJCisgICAgICAgIFZlY3RvciBncm91cF92ID0gbWFpbl9idW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKyAgICAgICAgVmVjdG9yIHBhcmVudF9ncm91cF92ID0gbnVsbDsKKyAgICAgICAgaWYgKHBhcmVudF9idW5kbGUgIT0gbnVsbCkgeworICAgICAgICAJcGFyZW50X2dyb3VwX3YgPSBwYXJlbnRfYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggYnVuZGxlIGdyb3VwIGluIG1haW5fYnVuZGxlCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGdyb3VwX3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGN1cnJfZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBfdi5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBCdW5kbGVHcm91cCBwYXJlbnRfZ3JvdXAgPSBudWxsOworICAgICAgICAgICAgaWYgKHBhcmVudF9ncm91cF92ICE9IG51bGwpIHsgCisJICAgICAgICAgICAgRW51bWVyYXRpb24gcGFyZW50R3JvdXBJdGVyID0gcGFyZW50X2dyb3VwX3YuZWxlbWVudHMoKTsKKwkgICAgICAgICAgICAKKwkgICAgICAgICAgICB3aGlsZSAocGFyZW50R3JvdXBJdGVyLmhhc01vcmVFbGVtZW50cygpKSB7CisJICAgICAgICAgICAgCUJ1bmRsZUdyb3VwIGdyb3VwVG9GaW5kID0gKEJ1bmRsZUdyb3VwKXBhcmVudEdyb3VwSXRlci5uZXh0RWxlbWVudCgpOworCSAgICAgICAgICAgIAlpZiAoZ3JvdXBUb0ZpbmQuZ2V0TmFtZSgpLmVxdWFscyhjdXJyX2dyb3VwLmdldE5hbWUoKSkpIHsKKwkgICAgICAgICAgICAJCXBhcmVudF9ncm91cCA9IGdyb3VwVG9GaW5kOworCSAgICAgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAgICAgCX0KKwkgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbGVtZW50IGdyb3VwX2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgiZ3JvdXAiKTsKKyAgICAgICAgICAgIGdyb3VwX2VsZW0uc2V0QXR0cmlidXRlKCJpZCIsIGN1cnJfZ3JvdXAuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChjdXJyX2dyb3VwLmdldENvbW1lbnQoKSAhPSBudWxsICYmIGN1cnJfZ3JvdXAuZ2V0Q29tbWVudCgpLmxlbmd0aCgpID4gMSkgeworICAgIAkgICAgICAgIEVsZW1lbnQgY29tbWVudF9wcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoIm5vdGUiKTsKKyAgICAJICAgICAgICBjb21tZW50X3Byb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgIAkgICAgICAgIGNvbW1lbnRfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoY3Vycl9ncm91cC5nZXRDb21tZW50KCkpKTsKKyAgICAJICAgICAgICBncm91cF9lbGVtLmFwcGVuZENoaWxkKGNvbW1lbnRfcHJvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvciBncm91cF9pdGVtcyA9IGN1cnJfZ3JvdXAuZ2V0SXRlbXNBc1ZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgZ3JvdXBfaXRlbXMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIAlCdW5kbGVJdGVtIG1haW5faXRlbSA9IChCdW5kbGVJdGVtKWdyb3VwX2l0ZW1zLmdldChqKTsKKyAgICAgICAgICAgIAlCdW5kbGVJdGVtIHBhcmVudF9pdGVtID0gbnVsbDsKKyAgICAgICAgICAgIAlpZiAocGFyZW50X2dyb3VwICE9IG51bGwpIHsKKwkgICAgICAgICAgICAJRW51bWVyYXRpb24gcGFyZW50SXRlciA9IHBhcmVudF9ncm91cC5nZXRJdGVtc0FzVmVjdG9yKCkuZWxlbWVudHMoKTsKKwkgICAgICAgICAgICAJQnVuZGxlSXRlbSBpdGVtVG9GaW5kID0gbnVsbDsKKwkgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkgICAgICAgICAgICAgICAgCWl0ZW1Ub0ZpbmQgPSAoQnVuZGxlSXRlbSlwYXJlbnRJdGVyLm5leHRFbGVtZW50KCk7CisJICAgICAgICAgICAgICAgIAlpZiAoaXRlbVRvRmluZC5nZXRLZXkoKS5lcXVhbHMobWFpbl9pdGVtLmdldEtleSgpKSkgeworCSAgICAgICAgICAgICAgICAJCXBhcmVudF9pdGVtID0gaXRlbVRvRmluZDsKKwkgICAgICAgICAgICAgICAgCQlicmVhazsKKwkgICAgICAgICAgICAgICAgCX0KKwkgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICBhZGRUcmFuc1VuaXQoeG1sLCBncm91cF9lbGVtLCBtYWluX2l0ZW0sIHBhcmVudF9pdGVtKTsKKyAgICAgICAgICAgICAgICAvL2dyb3VwX2VsZW0uYXBwZW5kQ2hpbGQodHUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChncm91cF9lbGVtKTsKKyAgICAgICAgfSAvLyBlbmQgZm9yIC0gaQorICAgICAgICBTdHJpbmcgc3VmZml4ID0gbWFpbkxvY2FsZTsKKyAgICAgICAgaWYgKCFzdWZmaXguZXF1YWxzKCIiKSkgeworICAgICAgICAJc3VmZml4ID0gJ18nICsgc3VmZml4OworICAgICAgICB9CisgICAgICAgIGNoYXIgYXJyYXlbXSA9IHN1ZmZpeC50b0NoYXJBcnJheSgpOworICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBhcnJheS5sZW5ndGg7IGsrKykgeworICAgICAgICAgICAgaWYgKGFycmF5W2tdID09ICctJykKKyAgICAgICAgICAgICAgICBhcnJheVtrXSA9ICdfJzsKKyAgICAgICAgfQorICAgICAgICBzdWZmaXggPSBTdHJpbmcudmFsdWVPZihhcnJheSk7CisgICAgICAgIAorICAgICAgICAvLyBzZXJpYWxpemUgZG9jdW1lbnQKKyAgICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgIAkJbmV3IEZpbGVPdXRwdXRTdHJlYW0obmV3IEZpbGUoZGlyZWN0b3J5LCBiYXNlX25hbWUgKyBzdWZmaXggKyAiLnhsZiIpKSwgIlVURi04Iik7CisgICAgICAgIHRyeSB7CisJCQlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7CisJCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk1FVEhPRCwgInhtbCIpOworCQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKKwkJCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7CisJCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkRPQ1RZUEVfU1lTVEVNLCBYTElGRl9EVEQpOworCQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5ET0NUWVBFX1BVQkxJQywgWExJRkZfUFVCTElDX05BTUUpOworCQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi04Iik7CisJCQl0cmFuc2Zvcm1lci50cmFuc2Zvcm0obmV3IERPTVNvdXJjZSh4bWwpLCBuZXcgU3RyZWFtUmVzdWx0KG9zdykpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiB0ZSkgeworICAgICAgICAJdGhyb3cgbmV3IElPRXhjZXB0aW9uKHRlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9zdy5jbG9zZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQnhsaWZmSW1wb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQnhsaWZmSW1wb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWVjNDMwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCeGxpZmZJbXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworaW1wb3J0IG9yZy54bWwuc2F4Lio7CitpbXBvcnQgb3JnLnczYy5kb20uKjsKKworLyoqCisgKiBUaGlzIGltcG9ydHMgWExJRkYgZmlsZXMgaW50byBSQk1hbmFnZXIuCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKKyAqIDxhIGhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy94bGlmZi9kb2N1bWVudHMveGxpZmYtc3BlY2lmaWNhdGlvbi5odG0iPgorICogaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL3hsaWZmL2RvY3VtZW50cy94bGlmZi1zcGVjaWZpY2F0aW9uLmh0bTwvYT4KKyAqIAorICogQGF1dGhvciBHZW9yZ2UgUmhvdGVuCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJ4bGlmZkltcG9ydGVyIGV4dGVuZHMgUkJJbXBvcnRlciB7CisJCisgICAgRG9jdW1lbnQgeGxmX3htbCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBCYXNpYyBjb25zdHJ1Y3RvciBmb3IgdGhlIFhMSUZGIGltcG9ydGVyIGZyb20gdGhlIHBhcmVudCBSQk1hbmFnZXIgZGF0YSBhbmQgYSBEaWFsb2cgdGl0bGUuCisgICAgICovCisgICAgcHVibGljIFJCeGxpZmZJbXBvcnRlcihTdHJpbmcgdGl0bGUsIFJCTWFuYWdlciByYm0sIFJCTWFuYWdlckdVSSBndWkpIHsKKyAgICAgICAgc3VwZXIodGl0bGUsIHJibSwgZ3VpKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBGaWxlQ2hvb3NlcigpIHsKKyAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChmLmlzRGlyZWN0b3J5KCkgfHwgZi5nZXROYW1lKCkuZW5kc1dpdGgoIi54bGYiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfWExGX2ZpbGVfZGVzY3JpcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIGJlZ2luSW1wb3J0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuYmVnaW5JbXBvcnQoKTsKKyAgICAgICAgRmlsZSB4bGZfZmlsZSA9IGdldENob3NlbkZpbGUoKTsKKwkJCisgICAgICAgIHRyeSB7CisgICAgICAgIAlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSh4bGZfZmlsZSk7CisgICAgICAgICAgICBJbnB1dFNvdXJjZSBpcyA9IG5ldyBJbnB1dFNvdXJjZShmaXMpOworICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisgICAgICAgICAgICB4bGZfeG1sID0gYnVpbGRlci5wYXJzZShpcyk7CisgICAgICAgICAgICBmaXMuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICAJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpIHsKKyAgICAgICAgICAgIHBjZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIAl0aHJvdyBuZXcgSU9FeGNlcHRpb24ocGNlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhsZl94bWwgPT0gbnVsbCkKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgCisgICAgICAgIGltcG9ydERvYygpOworICAgICAgICAKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGltcG9ydERvYygpIHsKKyAgICAgICAgaWYgKHhsZl94bWwgPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gIiI7CisgICAgICAgIFN0cmluZyBidW5kbGVfbm90ZSA9IG51bGw7CisgICAgCVN0cmluZyBidW5kbGVfbmFtZSA9IG51bGw7CisgICAgCVN0cmluZyBtYW5hZ2VyX25hbWUgPSBudWxsOworICAgIAlTdHJpbmcgbGFuZ3VhZ2VfbmFtZSA9IG51bGw7CisgICAgCVN0cmluZyBjb3VudHJ5X25hbWUgPSBudWxsOworICAgIAlTdHJpbmcgdmFyaWFudF9uYW1lID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgcm9vdCA9IHhsZl94bWwuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIE5vZGUgZmlsZU5vZGUgPSByb290LmdldEZpcnN0Q2hpbGQoKTsKKyAgICAgICAgTm9kZSBoZWFkZXIgPSBudWxsOworICAgICAgICBOb2RlIG5vZGUgPSBudWxsOworICAgICAgICB3aGlsZSAoZmlsZU5vZGUgIT0gbnVsbCAmJiAhKGZpbGVOb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBmaWxlTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImZpbGUiKSkpIHsKKyAgICAgICAgICAgIGZpbGVOb2RlID0gZmlsZU5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBoZWFkZXIgPSBmaWxlTm9kZS5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgIHdoaWxlIChoZWFkZXIgIT0gbnVsbAorICAgICAgICAJCSYmICEoaGVhZGVyLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUKKyAgICAgICAgCQkmJiAoaGVhZGVyLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiaGVhZGVyIikKKwkJCQl8fCBoZWFkZXIuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJib2R5IikpKSkKKyAgICAgICAgeworICAgICAgICAJaGVhZGVyID0gaGVhZGVyLmdldE5leHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhlYWRlci5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImhlYWRlciIpKSB7CisgICAgICAgIAkvLyBHZXQgdGhlIG5vdGVzIGlmIGZyb20gdGhlIGhlYWRlciBpZiB0aGV5IGV4aXN0LgorICAgICAgICAgICAgTm9kZUxpc3QgaGVhZGVyX25vdGVfbGlzdCA9ICgoRWxlbWVudCloZWFkZXIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJub3RlIik7CisgICAgICAgICAgICBpZiAoaGVhZGVyX25vdGVfbGlzdC5nZXRMZW5ndGgoKSA+IDApIHsKKwkgICAgICAgICAgICBUZXh0IHRleHRfZWxlbSA9IChUZXh0KWhlYWRlcl9ub3RlX2xpc3QuaXRlbSgwKS5nZXRDaGlsZE5vZGVzKCkuaXRlbSgwKTsKKwkgICAgICAgICAgICBpZiAodGV4dF9lbGVtICE9IG51bGwpIHsKKwkJICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworCQkgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGgoKSA+IDApIHsKKwkJICAgICAgICAgICAgCWJ1bmRsZV9ub3RlID0gdmFsdWU7CisJCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBOb2RlIHByb3BfZ3JvdXBfbGlzdCA9ICgoRWxlbWVudCloZWFkZXIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcm9wLWdyb3VwIikuaXRlbSgwKTsKKyAgICAgICAgICAgIE5vZGVMaXN0IHByb3BfbGlzdCA9IHByb3BfZ3JvdXBfbGlzdC5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgIAlpbnQgcHJvcGVydHlOdW0gPSBwcm9wX2xpc3QuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocHJvcGVydHlOdW0gPiAwKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcHJvcCA9IDA7IHByb3AgPCBwcm9wZXJ0eU51bTsgcHJvcCsrKSB7CisgICAgICAgICAgICAgICAgCWlmIChwcm9wX2xpc3QuaXRlbShwcm9wKSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAJICAgICAgICAgICAgCUVsZW1lbnQgcHJvcGVydHlfZWxlbSA9IChFbGVtZW50KXByb3BfbGlzdC5pdGVtKHByb3ApOworICAgIAkgICAgICAgICAgICAJU3RyaW5nIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5X2VsZW0uZ2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiKTsKKyAgICAJICAgICAgICAgICAgCWlmIChwcm9wZXJ0eVR5cGUgIT0gbnVsbCkgeworICAgIAkJCSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5X2VsZW0uZ2V0Q2hpbGROb2RlcygpLml0ZW0oMCkuZ2V0Tm9kZVZhbHVlKCk7CisgICAgCQkJICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoKCkgPiAwKSB7CisgICAgCQkJICAgICAgICAgICAgCWlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJuYW1lIikpIHsKKyAgICAJCQkJICAgICAgICAgICAgCWJ1bmRsZV9uYW1lID0gdmFsdWU7CisgICAgCQkJICAgICAgICAgICAgCX0KKyAgICAJCQkgICAgICAgICAgICAJZWxzZSBpZiAocHJvcGVydHlUeXBlLmVxdWFscygibWFuYWdlciIpKSB7CisgICAgCQkJCSAgICAgICAgICAgIAltYW5hZ2VyX25hbWUgPSB2YWx1ZTsKKyAgICAJCQkgICAgICAgICAgICAJfQorICAgIAkJCSAgICAgICAgICAgIAllbHNlIGlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJsYW5ndWFnZSIpKSB7CisgICAgCQkJCSAgICAgICAgICAgIAlsYW5ndWFnZV9uYW1lID0gdmFsdWU7CisgICAgCQkJICAgICAgICAgICAgCX0KKyAgICAJCQkgICAgICAgICAgICAJZWxzZSBpZiAocHJvcGVydHlUeXBlLmVxdWFscygiY291bnRyeSIpKSB7CisgICAgCQkJICAgICAgICAgICAgCQljb3VudHJ5X25hbWUgPSB2YWx1ZTsKKyAgICAJCQkgICAgICAgICAgICAJfQorICAgIAkJCSAgICAgICAgICAgIAllbHNlIGlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJ2YXJpYW50IikpIHsKKyAgICAJCQkgICAgICAgICAgICAJCXZhcmlhbnRfbmFtZSA9IHZhbHVlOworICAgIAkJCSAgICAgICAgICAgIAl9CisgICAgCQkJICAgICAgICAgICAgfQorICAgIAkgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5vZGUgPSBoZWFkZXIuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJib2R5IikpKSB7CisgICAgICAgICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFbGVtZW50IGJvZHkgPSAoRWxlbWVudClub2RlOworICAgICAgICAvL3Jlc29sdmVFbmNvZGluZ3MoZ2V0RW5jb2RpbmdzVmVjdG9yKGJvZHkpKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBzb3VyY2VMb2NhbGUgPSAoKEVsZW1lbnQpZmlsZU5vZGUpLmdldEF0dHJpYnV0ZSgic291cmNlLWxhbmd1YWdlIik7CisgICAgICAgIFN0cmluZyB0YXJnZXRMb2NhbGUgPSAoKEVsZW1lbnQpZmlsZU5vZGUpLmdldEF0dHJpYnV0ZSgidGFyZ2V0LWxhbmd1YWdlIik7CisgICAgICAgIGlmICghc291cmNlTG9jYWxlLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIGxhbmd1YWdlID0gc291cmNlTG9jYWxlOworICAgICAgICB9CisgICAgICAgIGlmICghdGFyZ2V0TG9jYWxlLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgbGFuZ3VhZ2UgaXMgdGhlIHJlYWwgZGF0YS4gVGhlIHNvdXJjZSBpcyBvbmx5IGZvciByZWZlcmVuY2UuCisgICAgICAgICAgICAvLyBXZSBjb3VsZCBkbyB2ZXJpZmljYXRpb24gdGhhdCBhbGwgdGhlIGRhdGEgaXMgdHJhbnNsYXRlZCB0aGUgc2FtZSB0aG91Z2guCisgICAgICAgICAgICBsYW5ndWFnZSA9IHRhcmdldExvY2FsZTsKKyAgICAgICAgfQorCQkKKyAgICAgICAgLy8gTm93IGRvIHRoZSBhY3R1YWwgaW1wb3J0IHJlc291cmNlIGJ5IHJlc291cmNlCisgICAgICAgIE5vZGVMaXN0IHR1X2xpc3QgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJncm91cCIpOworICAgICAgICBpbnQgYm9keV9ub2Rlc19sZW5ndGggPSBib2R5LmdldENoaWxkTm9kZXMoKS5nZXRMZW5ndGgoKTsKKyAgICAgICAgTm9kZUxpc3QgYm9keV9saXN0ID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgIGludCBncm91cENvdW50ID0gMCwgZWxlbWVudENvdW50ID0gMDsKKyAgICAgICAgTm9kZSBsYXN0X2dyb3VwX25vZGUgPSBudWxsOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBib2R5X25vZGVzX2xlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBOb2RlIGJvZHlfZWxlbSA9IGJvZHlfbGlzdC5pdGVtKGkpOworCSAgICAgICAgaWYgKGJvZHlfZWxlbS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisJICAgICAgICAgICAgaWYgKGJvZHlfZWxlbS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImdyb3VwIikpIHsKKwkJICAgICAgICAgICAgZ3JvdXBDb3VudCsrOworCQkgICAgICAgICAgICBsYXN0X2dyb3VwX25vZGUgPSBib2R5X2VsZW07CisJCSAgICAgICAgfQorCSAgICAgICAgICAgIGVsZW1lbnRDb3VudCsrOworCSAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBncm91cENvdW50ID09IDEpIHsKKwkgICAgICAgIC8vIElDVSBzdHlsZSBncm91cCB3aGVyZSB0aGUgdG9wIGdyb3VwIGlzIGp1c3QgdGhlIGxvY2FsZS4KKwkgICAgICAgIEVsZW1lbnQgbG9jYWxlTm9kZSA9IChFbGVtZW50KWxhc3RfZ3JvdXBfbm9kZTsgCisJICAgICAgICB0dV9saXN0ID0gbGFzdF9ncm91cF9ub2RlLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgIFN0cmluZyByb290R3JvdXBOYW1lID0gbG9jYWxlTm9kZS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICBpZiAocm9vdEdyb3VwTmFtZSAhPSBudWxsICYmIHJvb3RHcm91cE5hbWUuZXF1YWxzKCJyb290IikpIHsKKyAgICAgICAgICAgICAgICByb290R3JvdXBOYW1lID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJdCdzIGRvbmUgdGhpcyB3YXkgYmVjYXVzZSBJQ1UgaGFuZGxlcyByZmMzMDY2YmlzICh0aGUgc3VjY2Vzc29yIG9mIHJmYzMwNjYpCisgICAgICAgICAgICAvLyBYTElGRiByZXF1aXJlcyByZmMzMDY2LCB3aGljaCBkb2Vzbid0IGhhbmRsZSBzY3JpcHRzLgorICAgICAgICAgICAgbGFuZ3VhZ2UgPSByb290R3JvdXBOYW1lOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGxvY2FsZSBpZiBuZWVkZWQsIGFuZCBub3JtYWxpemUgaXQgdG8gdGhlIGNvcnJlY3QgZm9ybWF0LgorICAgICAgICBWZWN0b3IgbG9jYWxlTmFtZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGNoYXIgYXJyYXlbXSA9IGxhbmd1YWdlLnRvQ2hhckFycmF5KCk7CisgICAgICAgIGZvciAoaW50IGs9MDsgayA8IGFycmF5Lmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlba10gPT0gJy0nKQorICAgICAgICAgICAgICAgIGFycmF5W2tdID0gJ18nOworICAgICAgICB9CisgICAgICAgIGxhbmd1YWdlID0gU3RyaW5nLnZhbHVlT2YoYXJyYXkpOworICAgICAgICBsb2NhbGVOYW1lcy5hZGQobGFuZ3VhZ2UpOworICAgICAgICByZXNvbHZlRW5jb2RpbmdzKGxvY2FsZU5hbWVzKTsKKyAgICAgICAgQnVuZGxlIG1haW5fYnVuZGxlID0gcmJtLmdldEJ1bmRsZShsYW5ndWFnZSk7CisJCW1haW5fYnVuZGxlLm5hbWUgPSBidW5kbGVfbmFtZTsKKwkJbWFpbl9idW5kbGUuY29tbWVudCA9IGJ1bmRsZV9ub3RlOworCQltYWluX2J1bmRsZS5tYW5hZ2VyID0gbWFuYWdlcl9uYW1lOworCQltYWluX2J1bmRsZS5sYW5ndWFnZSA9IGxhbmd1YWdlX25hbWU7CisJCW1haW5fYnVuZGxlLmNvdW50cnkgPSBjb3VudHJ5X25hbWU7CisJCW1haW5fYnVuZGxlLnZhcmlhbnQgPSB2YXJpYW50X25hbWU7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdHVfbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoISh0dV9saXN0Lml0ZW0oaSkgaW5zdGFuY2VvZiBFbGVtZW50KSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRWxlbWVudCB0dV9lbGVtID0gKEVsZW1lbnQpdHVfbGlzdC5pdGVtKGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBHZXQgdGhlIGtleSB2YWx1ZQorICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0dV9lbGVtLmdldEF0dHJpYnV0ZSgiaWQiKTsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBHZXQgdGhlIGdyb3VwIGlmIGl0IGV4aXN0cworICAgICAgICAgICAgU3RyaW5nIGdyb3VwID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0dV9lbGVtLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiZ3JvdXAiKSkgeworICAgICAgICAgICAgICAgIGdyb3VwID0gbmFtZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBDb21tZW50ID0gIiI7CisgICAgICAgICAgICAgICAgTm9kZUxpc3Qgbm90ZXNfbGlzdCA9IHR1X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm5vdGUiKTsKKyAgICAgICAgICAgICAgICBpZiAobm90ZXNfbGlzdC5nZXRMZW5ndGgoKSA+IDApIHsKKyAgICAJICAgICAgICAgICAgVGV4dCB0ZXh0X2VsZW0gPSAoVGV4dClub3Rlc19saXN0Lml0ZW0oMCkuZ2V0Q2hpbGROb2RlcygpLml0ZW0oMCk7CisgICAgCSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAJICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoKCkgPiAwKSB7CisgICAgCSAgICAgICAgICAgIAlncm91cENvbW1lbnQgPSB2YWx1ZTsKKyAgICAJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByYm0uY3JlYXRlR3JvdXAoZ3JvdXAsIGdyb3VwQ29tbWVudCk7CisgICAgICAgICAgICAgICAgLy9Ob2RlTGlzdCBncm91cF9saXN0ID0gdHVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZ3JvdXAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGdyb3VwID09IG51bGwgfHwgZ3JvdXAubGVuZ3RoKCkgPCAxKSB7CisgICAgICAgICAgICAgICAgZ3JvdXAgPSBnZXREZWZhdWx0R3JvdXAoKTsKKyAgICAgICAgICAgICAgICBwYXJzZVRyYW5zbGF0aW9uVW5pdChsYW5ndWFnZSwgZ3JvdXAsIHR1X2VsZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlTGlzdCB0cmFuc191bml0X2xpc3QgPSB0dV9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0cmFucy11bml0Iik7CisgICAgICAgICAgICAvLyBGb3IgZWFjaCB0cmFucy11bml0IGVsZW1lbnQKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IHRyYW5zX3VuaXRfbGlzdC5nZXRMZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgcGFyc2VUcmFuc2xhdGlvblVuaXQobGFuZ3VhZ2UsIGdyb3VwLCAoRWxlbWVudCl0cmFuc191bml0X2xpc3QuaXRlbShqKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcGFyc2VUcmFuc2xhdGlvblVuaXQoU3RyaW5nIGxhbmd1YWdlLCBTdHJpbmcgZ3JvdXAsIEVsZW1lbnQgdHJhbnNfdW5pdF9lbGVtKSB7CisgICAgICAgIC8vIEdldCB0aGUgdHJhbnNsYXRpb24gdmFsdWUKKyAgICAJTm9kZSB0YXJnZXRfZWxlbSA9IHRyYW5zX3VuaXRfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFyZ2V0IikuaXRlbSgwKTsKKyAgICAgICAgaWYgKHRhcmdldF9lbGVtID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1wbGF0ZSwgb3IgYSBza2VsZXRvbgorICAgICAgICAgICAgdGFyZ2V0X2VsZW0gPSB0cmFuc191bml0X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNvdXJjZSIpLml0ZW0oMCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzb3VyY2Ugb3IgdGFyZ2V0LCBldmVuIGlmIGVtcHR5LCBpdCBtdXN0IGJlIHBhcnNlZC4KKyAgICAgICAgaWYgKHRhcmdldF9lbGVtID09IG51bGwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhcmdldF9lbGVtLm5vcm1hbGl6ZSgpOworICAgICAgICBOb2RlTGlzdCB0ZXh0X2xpc3QgPSB0YXJnZXRfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgIGlmICh0ZXh0X2xpc3QuZ2V0TGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBUZXh0IHRleHRfZWxlbSA9IChUZXh0KXRleHRfbGlzdC5pdGVtKDApOworICAgICAgICBTdHJpbmcgdHJhbnNWYWx1ZSA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgaWYgKHRyYW5zVmFsdWUgPT0gbnVsbCB8fCB0cmFuc1ZhbHVlLmxlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLypOYW1lZE5vZGVNYXAgYXR0cmliTWFwID0gdHJhbnNfdW5pdF9lbGVtLmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhdHRyaWJNYXAuZ2V0TGVuZ3RoKCk7IGsrKykgeworICAgICAgICAgICAgU3RyaW5nIGF0dHJpYk1hcE5hbWUgPSBhdHRyaWJNYXAuaXRlbShrKS5nZXROb2RlTmFtZSgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGF0dHJpYk1hcE5hbWUpOworICAgICAgICB9Ki8KKyAgICAgICAgU3RyaW5nIG5hbWUgPSB0cmFuc191bml0X2VsZW0uZ2V0QXR0cmlidXRlKCJpZCIpOworICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBDcmVhdGUgdGhlIGJ1bmRsZSBpdGVtCisgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG5ldyBCdW5kbGVJdGVtKG51bGwsIG5hbWUsIHRyYW5zVmFsdWUpOworICAgICAgICAvLyBHZXQgY3JlYXRpb24sIG1vZGlmaWNhdGlvbiB2YWx1ZXMKKworICAgICAgICBTdHJpbmcgc3RhdGUgPSB0cmFuc191bml0X2VsZW0uZ2V0QXR0cmlidXRlKCJzdGF0ZSIpOworICAgICAgICBpZiAoc3RhdGUgIT0gbnVsbCAmJiBzdGF0ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIGl0ZW0uc2V0VHJhbnNsYXRlZChzdGF0ZS5lcXVhbHNJZ25vcmVDYXNlKCJ0cmFuc2xhdGVkIikpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGRhdGUgPSB0cmFuc191bml0X2VsZW0uZ2V0QXR0cmlidXRlKCJkYXRlIik7CisgICAgICAgIGlmIChkYXRlICE9IG51bGwgJiYgZGF0ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIGl0ZW0uc2V0TW9kaWZpZWREYXRlKGRhdGUpOworICAgICAgICB9CisKKyAgICAgICAgRWxlbWVudCBub3RlX2VsZW0gPSAoRWxlbWVudCl0cmFuc191bml0X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm5vdGUiKS5pdGVtKDApOworICAgICAgICBpZiAobm90ZV9lbGVtICE9IG51bGwpIHsKKyAgICAgICAgICAgIE5vZGVMaXN0IG5vdGVfbGlzdCA9IG5vdGVfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICBpZiAobm90ZV9saXN0LmdldExlbmd0aCgpID4gMCkgeworCSAgICAgICAgICAgIFRleHQgbm90ZV90ZXh0X2VsZW0gPSAoVGV4dClub3RlX2xpc3QuaXRlbSgwKTsKKwkgICAgICAgICAgICBTdHJpbmcgY29tbWVudCA9IG5vdGVfdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworCSAgICAgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwgJiYgY29tbWVudC5sZW5ndGgoKSA+IDApIHsKKwkgICAgICAgICAgICAJaXRlbS5zZXRDb21tZW50KGNvbW1lbnQpOworCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEVsZW1lbnQgcHJvcF9ncm91cF9lbGVtID0gKEVsZW1lbnQpdHJhbnNfdW5pdF9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcm9wLWdyb3VwIikuaXRlbSgwKTsKKyAgICAgICAgaWYgKHByb3BfZ3JvdXBfZWxlbSAhPSBudWxsKSB7CisgICAgICAgICAgICBOb2RlTGlzdCBwcm9wX2xpc3QgPSBwcm9wX2dyb3VwX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAJaW50IHByb3BlcnR5TGVuID0gcHJvcF9saXN0LmdldExlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgcHJvcCA9IDA7IHByb3AgPCBwcm9wZXJ0eUxlbjsgcHJvcCsrKSB7CisgICAgICAgICAgICAJaWYgKHByb3BfbGlzdC5pdGVtKHByb3ApIGluc3RhbmNlb2YgRWxlbWVudCkgeworCSAgICAgICAgICAgIAlFbGVtZW50IHByb3BlcnR5X2VsZW0gPSAoRWxlbWVudClwcm9wX2xpc3QuaXRlbShwcm9wKTsKKwkgICAgICAgICAgICAJU3RyaW5nIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5X2VsZW0uZ2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiKTsKKwkgICAgICAgICAgICAJaWYgKHByb3BlcnR5VHlwZSAhPSBudWxsKSB7CisJCQkgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eV9lbGVtLmdldENoaWxkTm9kZXMoKS5pdGVtKDApLmdldE5vZGVWYWx1ZSgpOworCQkJICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoKCkgPiAwKSB7CisJCQkgICAgICAgICAgICAJaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoImNyZWF0b3IiKSkgeworCQkJCSAgICAgICAgICAgIAlpdGVtLnNldENyZWF0b3IodmFsdWUpOworCQkJICAgICAgICAgICAgCX0KKwkJCSAgICAgICAgICAgIAllbHNlIGlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJjcmVhdGVkIikpIHsKKwkJCQkgICAgICAgICAgICAJaXRlbS5zZXRDcmVhdGVkRGF0ZSh2YWx1ZSk7CisJCQkgICAgICAgICAgICAJfQorCQkJICAgICAgICAgICAgCWVsc2UgaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoIm1vZGlmaWVyIikpIHsKKwkJCQkgICAgICAgICAgICAJaXRlbS5zZXRNb2RpZmllcih2YWx1ZSk7CisJCQkgICAgICAgICAgICAJfQorCQkJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKy8vICAgICAgICBpZiAobG9va3VwcyAhPSBudWxsKQorLy8gICAgICAgICAgICBpdGVtLnNldExvb2t1cHMobG9va3Vwcyk7CisgICAgICAgIGltcG9ydFJlc291cmNlKGl0ZW0sIGxhbmd1YWdlLCBncm91cCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1Jlc291cmNlcy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1Jlc291cmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDk3NmEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUmVzb3VyY2VzLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5KYXJVUkxDb25uZWN0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworCisvKioKKyAqIEEgY2xhc3Mgbm90IHRvIGJlIGluc3RhbnRpYXRlZC4gUHJvdmlkZXMgbWV0aG9kcyBmb3IgdHJhbnNsYXRpbmcgaXRlbXMgZnJvbSBhIHJlc291cmNlIGJ1bmRsZS4gVG8gdXNlIHRoaXMgY2xhc3MKKyAqIG1ha2Ugc3VyZSB5b3UgZmlyc3QgY2FsbCBpbml0QnVuZGxlKCkuIE9uY2UgdGhpcyBpcyBkb25lLCBjYWxsaW5nIGFueSBvZiB0aGUgZ2V0VHJhbnNsYXRpb24oKSBtZXRob2RzIHdpbGwgcmV0dXJuCisgKiB0aGUgYXBwcm9wcmlhdGUgU3RyaW5nLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSZXNvdXJjZXMgeworICAgIHByaXZhdGUgc3RhdGljIFJlc291cmNlQnVuZGxlIHJlc291cmNlX2J1bmRsZTsKKyAgICBwcml2YXRlIHN0YXRpYyBMb2NhbGUgbG9jYWxlOworCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHJlc291cmNlIGJ1bmRsZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgb25jZSBiZWZvcmUgYW55CisgICAgICogb3RoZXIgbWV0aG9kIGNhbiBiZSBjYWxsZWQgKHVubGVzcyB0aGF0IG1ldGhvZCBwZXJmb3JtcyBhIGNoZWNrIHRoYXQgY2FsbHMgdGhpcyBtZXRob2QpLiBUaGlzIGlzCisgICAgICogYWxzbyB0aGUgbWV0aG9kIHRvIHVzZSBpbiBjYXNlIHRoZSByZXNvdXJjZSBkYXRhIG9uIHRoZSBkYXRhIHN0b3JlIGhhcyBjaGFuZ2VkIGFuZCB0aG9zZSBjaGFuZ2VzCisgICAgICogbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gZnV0dXJlIHVzZSBvZiB0aGlzIGNsYXNzLgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0QnVuZGxlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGxvY2FsZSA9PSBudWxsKSBsb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgcmVzb3VyY2VfYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyIiwgbG9jYWxlKTsKKyAgICAgICAgfSBjYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgUmVzb3VyY2UgZm9yIGRlZmF1bHQgbG9jYWxlLCAiICsgTG9jYWxlLmdldERlZmF1bHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIG1yZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0IHRoZSBsb2NhbGUgdG8gYmUgdXNlZCB3aGVuIG1ha2luZyBhIHF1ZXJ5IG9uIHRoZSByZXNvdXJjZQorICAgICAqLworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgUmVzb3VyY2VzLmxvY2FsZSA9IGxvY2FsZTsKKyAgICAgICAgICAgIFJlc291cmNlcy5yZXNvdXJjZV9idW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIiLCBsb2NhbGUpOworICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgUmVzb3VyY2UgZm9yIGxvY2FsZSwgIiArIGxvY2FsZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIG1yZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2V0IExvY2FsZXMgb2JqZWN0LgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlIGdldExvY2FsZSgpIHsKKyAgICAgICAgaWYgKFJlc291cmNlcy5sb2NhbGUgPT0gbnVsbCkgUmVzb3VyY2VzLmluaXRCdW5kbGUoKTsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlcy5sb2NhbGU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcgKGUuZy4gJ2VuX1VTJywgJ2RlJywgZXRjLikKKyAgICAgKiBvZiB0aGUgbG9jYWxlcyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZS4gVGhlc2UgYXJlIGFsbCBvZiB0aGUgbG9jYWxlcyBmb3IKKyAgICAgKiB3aGljaCB1bmlxdWUgdHJhbnNsYXRpb24gb2YgcmVzb3VyY2UgYnVuZGxlIGl0ZW1zIGFyZSBwb3NzaWJsZS4gSWYgYSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgICAgKiB1c2VkIHRvIHF1ZXJ5IG9uIHRoYXQgaXMgbm90IGluIHRoaXMgYXJyYXksIHRoZSBiYXNlIGNsYXNzIHRyYW5zbGF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBdmFpbGFibGVMb2NhbGVzKCkgeworICAgICAgICAvL0xvY2FsZSBsb2NbXSA9IG51bGw7CisgICAgICAgIFN0cmluZyBsaXN0W10gPSBuZXcgU3RyaW5nWzBdOworICAgICAgICBWZWN0b3IgbG9jVmVjdCA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFVSTCByZXNVUkwgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZSgiY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlci5wcm9wZXJ0aWVzIik7CisgICAgICAgICAgICBKYXJVUkxDb25uZWN0aW9uIHJlc0Nvbm5lY3Rpb24gPSAoSmFyVVJMQ29ubmVjdGlvbilyZXNVUkwub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIEVudW1lcmF0aW9uIGVudW1SZXMgPSByZXNDb25uZWN0aW9uLmdldEphckZpbGUoKS5lbnRyaWVzKCk7CisgICAgICAgICAgICBTdHJpbmcgYmFzZU5hbWUgPSAiY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlciI7CisgICAgICAgICAgICB3aGlsZSAoZW51bVJlcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBlbnRyeU5hbWUgPSAoKFppcEVudHJ5KWVudW1SZXMubmV4dEVsZW1lbnQoKSkuZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChlbnRyeU5hbWUuc3RhcnRzV2l0aChiYXNlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnlOYW1lID0gZW50cnlOYW1lLnN1YnN0cmluZyhiYXNlTmFtZS5sZW5ndGgoKSwgZW50cnlOYW1lLmxhc3RJbmRleE9mKCcuJykpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoIl8iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlOYW1lID0gZW50cnlOYW1lLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRyeU5hbWUubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIG91ciByZXNvdXJjZXMgd2UgY29uc2lkZXIgcm9vdCBhcyBFbmdsaXNoICovCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeU5hbWUgPSAiZW4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxvY1ZlY3QuYWRkKGVudHJ5TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisvKiAgICAgICAgICAgIEZpbGUgbG9jRGlyID0gbmV3IEZpbGUoInJlc291cmNlcyIpOworICAgICAgICAgICAgbGlzdCA9IGxvY0Rpci5saXN0KG5ldyBGaWxlbmFtZUZpbHRlcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBkaXIsIFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWNjZXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpIGFjY2VwdCA9IGZhbHNlOyAvLyBNdXN0IGJlIHByb3BlcnR5IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoIlJCTWFuYWdlciIpKSBhY2NlcHQgPSBmYWxzZTsgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGEgUkJNYW5hZ2VyIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJSQk1hbmFnZXIucHJvcGVydGllcyIpKSBhY2NlcHQgPSBmYWxzZTsgICAgICAgICAvLyBCYXNlIGNsYXNzIGRvZXMgbm90IGNvdW50CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisqLworICAgICAgICAgICAgaW50IGxpc3RTaXplID0gbG9jVmVjdC5zaXplKCk7CisgICAgICAgICAgICBsaXN0ID0gbmV3IFN0cmluZ1tsaXN0U2l6ZV07CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBsaXN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgbGlzdFtpXSA9IChTdHJpbmcpbG9jVmVjdC5nZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYW4ndCBnZXQgcmVzb3VyY2VzIik7CisgICAgICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhbid0IGdldCByZXNvdXJjZXMiKTsKKyAgICAgICAgICAgIGNjZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9va3MgdXAgYSB0cmFuc2xhdGlvbiBpbiB0aGUgY3VycmVudGx5IHNldCBMb2NhbGUgYnkgdGhlIE5MUyBsb29rdXAga2V5IHByb3ZpZGVkLgorICAgICAqIElmIG5vIHJlc291cmNlIGJ5IHRoYXQga2V5IGlzIGZvdW5kLCB0aGUga2V5IGl0c2VsZiBpcyByZXR1cm5lZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUcmFuc2xhdGlvbihTdHJpbmcga2V5KSB7CisgICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCByZXNvdXJjZV9idW5kbGUgPT0gbnVsbCkgcmV0dXJuICIiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHJldFN0ciA9IHJlc291cmNlX2J1bmRsZS5nZXRTdHJpbmcoa2V5KTsKKyAgICAgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEdpdmVuIGEgbG9jYWxlIGVuY29kaW5nLCByZXR1cm5zIHRoZSBsYW5ndWFnZSBwb3J0aW9uIG9mIHRoYXQgZW5jb2RpbmcuCisgICAgICo8YnI+CisgICAgICogRm9yIGluc3RhbmNlICdlbicsICdlbl9VUycsICdlbl9HQicsIGFsbCByZXR1cm4gJ2VuJworICAgICAqLworICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMYW5ndWFnZShTdHJpbmcgZW5jb2RpbmcpIHsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIHJldHVybiBudWxsOworICAgICAgICBpZiAoZW5jb2RpbmcuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIGVuY29kaW5nLnRyaW0oKTsKKyAgICAgICAgcmV0dXJuIGVuY29kaW5nLnN1YnN0cmluZygwLCBlbmNvZGluZy5pbmRleE9mKCJfIikpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIGxvY2FsZSBlbmNvZGluZywgcmV0dXJucyB0aGUgY291bnRyeSBwb3J0aW9uIG9mIHRoYXQgZW5jb2RpbmcuCisgICAgICogPGJyPgorICAgICAqIEZvciBpbnN0YW5jZSAnZW5fVVMnLCAnc3BfVVMnLCBib3RoIHJldHVybiAnVVMnCisgICAgICogPGJyPgorICAgICAqIFJldHVybnMgbnVsbCBpZiBubyBjb3VudHJ5IGlzIHNwZWNpZmllZCAoZS5nLiAnZW4nIG9yICdkZScpCisgICAgICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q291bnRyeShTdHJpbmcgZW5jb2RpbmcpIHsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIHJldHVybiBudWxsOworICAgICAgICBpZiAoZW5jb2RpbmcuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIG51bGw7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBlbmNvZGluZy5zdWJzdHJpbmcoZW5jb2RpbmcuaW5kZXhPZigiXyIpKzEsIGVuY29kaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gcmVzdWx0LnRyaW0oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWJzdHJpbmcoMCwgZW5jb2RpbmcuaW5kZXhPZigiXyIpKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBsb2NhbGUgZW5jb2RpbmcsIHJldHVybnMgdGhlIHZhcmlhbnQgcG9ydGlvbiBvZiB0aGF0IGVuY29kaW5nLgorICAgICAqIDxicj4KKyAgICAgKiBGb3IgaW5zdGFuY2UgJ2VuX0dCX0VVUk8nLCAnZGVfREVfRVVSTycsIGJvdGggcmV0dXJuICdFVVJPJworICAgICAqIDxicj4KKyAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm8gdmFyaWFudCBpcyBzcGVjaWZpZWQgKGUuZy4gJ2VuJyBvciAnZW5fVVMnKQorICAgICAqLworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFZhcmlhbnQoU3RyaW5nIGVuY29kaW5nKSB7CisgICAgICAgIFJCTWFuYWdlckdVSS5kZWJ1Z01zZyhlbmNvZGluZyk7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKGVuY29kaW5nLmluZGV4T2YoIl8iKSA8IDApIHJldHVybiBudWxsOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZW5jb2Rpbmcuc3Vic3RyaW5nKGVuY29kaW5nLmluZGV4T2YoIl8iKSsxLCBlbmNvZGluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIG51bGw7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcocmVzdWx0LmluZGV4T2YoIl8iKSsxLCByZXN1bHQubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gZ2l2ZW4gdGhlIGN1cnJlbnRseSBzZXQgbG9jYWxlLCBhIGxvb2t1cCBrZXksIGFuZCBhIHNpbmdsZSBsb29rdXAgaXRlbSByZXBsYWNlbWVudC4KKyAgICAgKiBGb3IgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgbG9va3VwIGl0ZW0gcmVwbGFjZW1lbnQgc2VlIGdldFRyYW5zbGF0aW9uKFN0cmluZyBrZXksIFN0cmluZ1tdIGxvb2t1cCkuCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VHJhbnNsYXRpb24oU3RyaW5nIGtleSwgU3RyaW5nIGxvb2t1cCkgeworICAgICAgICBpZiAoa2V5ID09IG51bGwgfHwgcmVzb3VyY2VfYnVuZGxlID09IG51bGwpIHJldHVybiAiIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdCBvYmplY3RzW10gPSB7bG9va3VwfTsKKyAgICAgICAgICAgIFN0cmluZyByZXRTdHIgPSByZXNvdXJjZV9idW5kbGUuZ2V0U3RyaW5nKGtleSk7CisgICAgICAgICAgICByZXRTdHIgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChyZXRTdHIsIG9iamVjdHMpOworICAgICAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2V0cyBhIHRyYW5zbGF0aW9uIGdpdmVuIHRoZSBjdXJyZW50bHkgc2V0IGxvY2FsZSwgYSBsb29rdXAga2V5LCBhbmQgemVybyBvciBtb3JlIGxvb2t1cCBpdGVtIHJlcGxhY2VtZW50cy4KKyAgICAgKiBMb29rdXAgaXRlbXMgYXJlIGNvbnRleHR1YWwgdHJhbnNsYXRpb24gbWF0ZXJpYWwgc3RvcmVkIGluIHRoZSByZXNvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBkaWN0YXRlZCBpbgorICAgICAqIHRoZSBqYXZhLnRleHQgcGFja2FnZS4gSW4gc2hvcnQsIG51bWJlcmVkIG1hcmtlcnMgYXJlIHJlcGxhY2VkIGJ5IHN0cmluZ3MgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuCisgICAgICogPHA+CisgICAgICogRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyByZXNvdXJjZToKKyAgICAgKiA8cD4KKyAgICAgKiBteVJlc291cmNlID0gSGVsbG8gezF9LCBJc24ndCB0aGlzIGEgZ3JlYXQgezJ9PworICAgICAqIDxwPgorICAgICAqIFlvdSB3YW50IHRvIHJlcGxhY2UgdGhlICd7MX0nIHdpdGh0IHRoZSBjdXJyZW50IHVzZXIgbmFtZSBhbmQgdGhlICd7Mn0nIHdpdGggdGhlIG5hbWUgb2YgdGhlIGRheSB0b2RheS4KKyAgICAgKiBZb3UgY2FuIGRvIHRoaXMgYnkgY2FsbGluZzoKKyAgICAgKiA8cD4KKyAgICAgKiBTdHJpbmcgbG9va3Vwc1tdID0geyAiSm9lIiwgIkZyaWRheSIgfTsKKyAgICAgKiA8YnI+CisgICAgICogUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJteVJlc291cmNlIiwgbG9va3Vwcyk7CisgICAgICogPHA+CisgICAgICogVGhlIHJlc3VsdCB3b3VsZCBiZToKKyAgICAgKiA8cD4KKyAgICAgKiAnSGVsbG8gSm9lLCBJc24ndCB0aGlzIGEgZ3JlYXQgRnJpZGF5PycKKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCAoYXMgd2VsbCBhcyB0aGUgZ2V0VHJhbnNsYXRpb24oU3RyaW5nIGtleSwgU3RyaW5nIGxvb2t1cCkgbWV0aG9kKSBpcyB1c2VmdWwgZm9yIHVzaW5nIG5lc3RlZAorICAgICAqIGxvb2t1cHMgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLiBGb3IgaW5zdGFuY2UsIHRoZSBhYm92ZSBsaW5lIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGg6CisgICAgICogPHA+CisgICAgICogU3RyaW5nIGxvb2t1cHNbXSA9IHsgZ2V0VXNlck5hbWUoKSwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJGcmlkYXkiKSB9OworICAgICAqLworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRyYW5zbGF0aW9uKFN0cmluZyBrZXksIFN0cmluZ1tdIGxvb2t1cCkgeworICAgICAgICBpZiAoa2V5ID09IG51bGwgfHwgcmVzb3VyY2VfYnVuZGxlID09IG51bGwpIHJldHVybiAiIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdCBvYmplY3RzW10gPSBuZXcgT2JqZWN0W2xvb2t1cC5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbG9va3VwLmxlbmd0aDsgaSsrKSBvYmplY3RzW2ldID0gbG9va3VwW2ldOworICAgICAgICAgICAgU3RyaW5nIHJldFN0ciA9IHJlc291cmNlX2J1bmRsZS5nZXRTdHJpbmcoa2V5KTsKKyAgICAgICAgICAgIHJldFN0ciA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KHJldFN0ciwgbG9va3VwKTsKKyAgICAgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9TY2FuUmVzdWx0LmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vU2NhblJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTJjMDEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vU2NhblJlc3VsdC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS51dGlsLio7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSByZXN1bHRzIGZvdW5kIGZvciBlYWNoIHJlc291cmNlIGtleSB3aGlsZQorICogcGVyZm9ybWluZyB0aGUgY29kZSBzY2FuIGRvbmUgYnkgUkJSZXBvcnRlci4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIKKyAqLworcHVibGljIGNsYXNzIFNjYW5SZXN1bHQgeworICAgIEJ1bmRsZUl0ZW0gaXRlbTsKKyAgICBWZWN0b3Igb2NjdXJhbmNlczsKKyAgICAKKyAgICBTY2FuUmVzdWx0KEJ1bmRsZUl0ZW0gaXRlbSkgeworICAgICAgICB0aGlzLml0ZW0gPSBpdGVtOworICAgICAgICBvY2N1cmFuY2VzID0gbmV3IFZlY3RvcigpOworICAgIH0KKwkKKyAgICBCdW5kbGVJdGVtIGdldEl0ZW0oKSB7CisgICAgICAgIHJldHVybiBpdGVtOworICAgIH0KKwkKKyAgICBpbnQgZ2V0TnVtYmVyT2NjdXJhbmNlcygpIHsKKyAgICAgICAgcmV0dXJuIG9jY3VyYW5jZXMuc2l6ZSgpOworICAgIH0KKwkKKyAgICBWZWN0b3IgZ2V0T2NjdXJhbmNlcygpIHsKKyAgICAgICAgcmV0dXJuIG9jY3VyYW5jZXM7CisgICAgfQorCQorICAgIHZvaWQgYWRkT2NjdXJhbmNlKE9jY3VyYW5jZSBvKSB7CisgICAgICAgIG9jY3VyYW5jZXMuYWRkRWxlbWVudChvKTsKKyAgICB9CisJCisgICAgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBpdGVtLmdldEtleSgpOworICAgIH0KKwkKKyAgICBTdHJpbmcgZ2V0R3JvdXBOYW1lKCkgeworICAgICAgICBpZiAoaXRlbS5nZXRQYXJlbnRHcm91cCgpICE9IG51bGwpIHJldHVybiBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0TmFtZSgpOworICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vY29tcGlsZS5iYXQgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vY29tcGlsZS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODUxMmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLmJhdApAQCAtMCwwICsxLDI2IEBACitAZWNobyBvZmYKKworcmVtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCityZW0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKK3JlbSAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorcmVtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK2NkIC4uXC4uXC4uXAorZWNobyBjb21waWxpbmcgc291cmNlIGNvZGUgJTEKK2phdmFjIC1kIC4gLWNsYXNzcGF0aCBjb20vaWJtL3JibS9saWIveGVyY2VzLmphciAtZGVwcmVjYXRpb24gJTEgY29tL2libS9yYm0vKi5qYXZhIGNvbS9pYm0vcmJtL2d1aS8qLmphdmEKK2lmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yCisKK2VjaG8gY3JlYXRpbmcgamFyIGZpbGUKK2VyYXNlIGNvbVxpYm1ccmJtXFJCTWFuYWdlci5qYXIKK2phciBjZm0gY29tL2libS9yYm0vUkJNYW5hZ2VyLmphciBjb20vaWJtL3JibS9tYW5pZmVzdC5zdHViIGNvbS9pYm0vcmJtLyouY2xhc3MgY29tL2libS9yYm0vZ3VpLyouY2xhc3MgY29tL2libS9yYm0vZ3VpL2ltYWdlcy8qLmdpZiBjb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyKi5wcm9wZXJ0aWVzCitpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcgorCitlY2hvIGNsZWFuaW5nIHVwIGNsYXNzIGZpbGVzCitjZCBjb21caWJtXHJibQorZXJhc2UgKi5jbGFzcyBndWlcKi5jbGFzcworZ290byBlbmQKKworOmVycm9yCitjZCBjb21caWJtXHJibQorcGF1c2UKKzplbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vY29tcGlsZS5zaCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YTg3OTkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vY29tcGlsZS5zaApAQCAtMCwwICsxLDE5IEBACisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisjICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK2NkIC4uLy4uLy4uLworZWNobyBjb21waWxpbmcgc291cmNlIGNvZGUgJDEKK2phdmFjIC1kIC4gLWNsYXNzcGF0aCBjb20vaWJtL3JibS9saWIveGVyY2VzLmphciAtZGVwcmVjYXRpb24gJDEgY29tL2libS9yYm0vKi5qYXZhIGNvbS9pYm0vcmJtL2d1aS8qLmphdmEKKyNpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcgorCitlY2hvIGNyZWF0aW5nIGphciBmaWxlCitybSBjb20vaWJtL3JibS9SQk1hbmFnZXIuamFyCitqYXIgY2ZtIGNvbS9pYm0vcmJtL1JCTWFuYWdlci5qYXIgY29tL2libS9yYm0vbWFuaWZlc3Quc3R1YiBjb20vaWJtL3JibS8qLmNsYXNzIGNvbS9pYm0vcmJtL2d1aS8qLmNsYXNzIGNvbS9pYm0vcmJtL2d1aS9pbWFnZXMvKi5naWYgY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcioucHJvcGVydGllcworI2lmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yCisKK2VjaG8gY2xlYW5pbmcgdXAgY2xhc3MgZmlsZXMKK2NkIGNvbS9pYm0vcmJtCitybSAtcmYgKi5jbGFzcyBndWkvKi5jbGFzcworCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vY3JlYXRlZG9jLmJhdCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jcmVhdGVkb2MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0YTNjZGIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vY3JlYXRlZG9jLmJhdApAQCAtMCwwICsxLDggQEAKK0ByZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0ByZW0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKK0ByZW0gKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK0ByZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK21rZGlyIGRvY3NcYXBpCitAc2V0IERPQ19UWVBFPS1wcml2YXRlCitqYXZhZG9jIC1kIGRvY3MvYXBpIC1jbGFzc3BhdGggbGliL3hlcmNlcy5qYXIgLXNvdXJjZXBhdGggLi4vLi4vLi4vIC13aW5kb3dUaXRsZSAiUkJNYW5hZ2VyIiAtYm90dG9tICJDb3B5cmlnaHQgSUJNIDIwMDAtMjAwNCIgJURPQ19UWVBFJSBjb20uaWJtLnJibSBjb20uaWJtLnJibS5ndWkKK0BpZiBlcnJvcmxldmVsIDEgcGF1c2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9SQlJlcG9ydGVyLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9SQlJlcG9ydGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExNjI0MwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL1JCUmVwb3J0ZXIuaHRtbApAQCAtMCwwICsxLDIwNSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SZXNvdXJjZSBCdW5kbGUgUmVwb3J0ZXI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgxIEFMSUdOPSJDRU5URVIiPlJlc291cmNlIEJ1bmRsZSBSZXBvcnRlcjwvSDE+CisgICAgICA8SDEgQUxJR049IkNFTlRFUiI+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9SQlJlcG9ydGVyLmdpZiIgV0lEVEg9IjYwMCIgSEVJR0hUPSI2MDAiPjwvSDE+CisgICAgICA8SDQgQUxJR049IkxFRlQiPldoYXQgaXMgUkJSZXBvcnRlcj88L0g0PgorICAgICAgPFAgQUxJR049IkxFRlQiPkZyZXF1ZW50bHksIG1hbmFnZXJzIGFuZCBkZXZlbG9wZXJzIHdvcmtpbmcgb24gYW4gaW5lcm5hdGlvbmFsaXplZCAKKyAgICAgICAgcHJvZHVjdCByZXF1ZXN0IHRoZSBhYmlsaXR5IHRvIHF1aWNrbHkgdmlldyB0aGUgc3RhdHVzIGFuZCBwcm9ncmVzcyBvZiAKKyAgICAgICAgdGhlIHRyYW5zbGF0aW9uIGVmZm9ydHMgaW4gdGhlaXIgcHJvamVjdC4gUkJSZXBvcnRlciBnZW5lcmF0ZXMgc3VjaCByZXBvcnRzIAorICAgICAgICBvbiBhIHBlcmlvZGljIGJhc2lzIGFuZCBzdG9yZXMgdGhlbSB0byBhIHNwZWNpZmllZCBsb2NhdGlvbiBpbiBhIHZhcmlldHkgCisgICAgICAgIG9mIGZvcm1hdHMuIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlZCBpbiB0aGUgcmVwb3J0cyBpbmNsdWRlcyB0aGUgbmFtZXMgCisgICAgICAgIGFuZCBtZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlIHJlc291cmNlIGZpbGVzLCB0aGUgbnVtYmVyIG9yIAorICAgICAgICByZXNvdXJjZXMgaGVsZCBpbiBlYWNoIGZpbGUsIHRoZSBudW1iZXIgb2YgdW50cmFuc2xhdGVkIHJlc291cmNlcyBpbiBlYWNoIAorICAgICAgICBmaWxlLCBhbmQsIGlmIHRoZSBkZXRhaWwgbGV2ZWwgaXMgc2V0IHRvICdIaWdoLCcgYSBsaXN0IG9mIGFsbCBvZiB0aGUgCisgICAgICAgIHVudHJhbnNsYXRlZCByZXNvdXJjZSBrZXlzIGZvciBlYWNoIGZpbGUuPC9QPgorICAgICAgPEg0IEFMSUdOPSJMRUZUIj5Ib3cgaXMgUkJSZXBvcnRlciBzdGFydGVkPzwvSDQ+CisgICAgICA8UCBBTElHTj0iTEVGVCI+RnJvbSB0aGUgY29tbWFuZCBsaW5lLCBSQlJlcG9ydGVyIGlzIHJ1biBieSB0eXBpbmcgaW4gdGhlIAorICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDo8L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+PENPREU+amF2YSBjb20uaWJtLnJibS5SQlJlcG9ydGVyPC9DT0RFPjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5UaGlzIHdpbGwgYnJpbmcgdXAgdGhlIHdpbmRvdyBzZWVuIGFib3ZlLiBBbHRlcm5hdGl2ZWx5LCAKKyAgICAgICAgV2luZG93cyB1c2VycyBjYW4gcnVuIHRoZSBiYXRjaCBmaWxlIFJCUmVwb3J0ZXIuYmF0LiBSQlJlcG9ydGVyIHdpbGwgYWxzbyAKKyAgICAgICAgdGFrZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRoYXQgd2lsbCBydW4gdGhlIHByb2dyYW0gaW4gYSB2YXJpZXR5IG9mIAorICAgICAgICBtb2Rlcy4gQW4gZXF1aXZhbGVudCBjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8gdGhlIG9uZSBhYm92ZSBpczo8L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+PENPREU+amF2YSBjb20uaWJtLnJibS5SQlJlcG9ydGVyIC1ndWk8L0NPREU+PC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoaXMgYXJndW1lbnQgd29ya3MgdGhlIHNhbWUgYXMgdGhlIGZpcnN0LCBicmluZ2luZyB1cCB0aGUgCisgICAgICAgIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZS4gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9mIAorICAgICAgICB0aGUgcmVwb3J0ZXIsIHN1Y2ggYXMgdGhlIGJ1bmRsZSB0byByZXBvcnQgb24sIHRoZSB0eXBlcyBvZiByZXBvcnRzIGdlbmVyYXRlZCwgCisgICAgICAgIGFuZCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXBvcnQgZ2VuZXJhdGlvbi48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+QW5vdGhlciBvcHRpb24gaXMgdG8gcnVuIHRoZSByZXBvcnRlciB3aXRoIHRoZSBmb2xsb3dpbmcgCisgICAgICAgIGFyZ3VtZW50OjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj48Q09ERT5qYXZhIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIgLW5vdzwvQ09ERT48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+V2hlbiB0aGUgLW5vdyBvcHRpb24gaXMgdXNlZCwgdGhlIGludGVydmFsIHNldHRpbmcgYmV0d2VlbiAKKyAgICAgICAgcmVwb3J0cyBpcyBpZ25vcmVkLCBhbmQgdGhlIHJlcG9ydHMgYXJlIGdlbmVyYXRlZCBpbW1lZGlhdGVseSBhY2NvcmRpbmcgCisgICAgICAgIHRvIHRoZSBvdGhlciBzYXZlZCBzZXR0aW5ncy4gVGhpcyBvcHRpb24gZG9lcyBub3QgYnJpbmcgdXAgdGhlIHdpbmRvdyAKKyAgICAgICAgZm9yIGNoYW5naW5nIHNldHRpbmdzLiBVc2luZyB0aGlzIG9wdGlvbiBpcyBoZWxwZnVsIGlmIHlvdSB3b3VsZCBsaWtlIAorICAgICAgICB0byB1c2UgeW91IG9wZXJhdGluZyBzeXN0ZW0gaW5zdGVhZCBvZiBSQlJlcG9ydGVyIHRvIHNjaGVkdWxlIHRoZSBnZW5lcmF0aW9uIAorICAgICAgICBvZiByZXBvcnRzLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5UaGUgbGFzdCBvcHRpb24gaXMgdGhlIGZvbGxvd2luZzo8L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+PGNvZGU+amF2YSBjb20uaWJtLnJibS5SQlJlcG9ydGVyIC1saW5lPC9DT0RFPjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5XaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIHRoZSByZXBvcnRlciBpcyBydW4gdGhyb3VnaCB0aGUgCisgICAgICAgIGNvbW1hbmQgbGluZSBvbmx5LiBOb25lIG9mIHRoZSBzZXR0aW5ncyB3aWxsIGJlIGFjY2Vzc2libGUgZm9yIGNoYW5naW5nLiAKKyAgICAgICAgV2hlbmV2ZXIgaXQgaXMgdGltZSBmb3IgYSByZXBvcnQgdG8gYmUgZ2VuZXJhdGVkLCBhIG1lc3NhZ2Ugd2lsbCBhcHBlYXIgCisgICAgICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuIEFub3RoZXIgbWVzc2FnZSB3aWxsIGFwcGVhciB3aGVuIHRoZSByZXBvcnRzIGhhdmUgCisgICAgICAgIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uIFRoaXMgbGFzdCBtZXNzYWdlIHdpbGwgaW5jbHVkZSB0aGUgZGF0ZSBhbmQgCisgICAgICAgIHRpbWUgb2YgdGhlIG5leHQgcmVwb3J0IGdlbmVyYXRpb24uPC9QPgorICAgICAgPEg0IEFMSUdOPSJMRUZUIj5XaGF0IGRvIHRoZSBzZXR0aW5ncyBtZWFuPzwvSDQ+CisgICAgICA8UCBBTElHTj0iTEVGVCI+V2hlbiB0aGUgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGlzIGluaXRpYWxseSBicm91Z2h0IHVwLCAKKyAgICAgICAgdGhlIHJlcG9ydGVyIG1heSBub3QgYmUgYWN0aXZlLiBBbiBpbmRpY2F0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSByZXBvcnRlciB3aWxsIHJlcG9ydCBhdCB0aGUgdGltZSB0aGF0IGhhcyAKKyAgICAgICAgYmVlbiBzcGVjaWZpZWQuIFRoZSAnU3RhcnRlZCcgbWVzc2FnZSBkb2VzIG5vdCBpbmRpY2F0ZSB0aGF0IHJlcG9ydCBnZW5lcmF0aW9uIAorICAgICAgICBoYXMgc3RhcnRlZDsgaXQgbWVyZWx5IGluZGljYXRlcyB0aGF0IHRoZSByZXBvcnRlciBoYXMgc3RhcnRlZCBhbmQgd2lsbCAKKyAgICAgICAgZ2VuZXJhdGUgcmVwb3J0cyBhY2NvcmRpbmcgdG8gdGhlIG90aGVyIHNldHRpbmdzLiBUbyB0b2dnbGUgd2hldGhlciBvciAKKyAgICAgICAgbm90IHRoZSByZXBvcnRlciBpcyBydW5uaW5nIHByZXNzIHRoZSAnU3RhcnQnIG9yICdTdG9wJyBidXR0b24gbmVhciB0aGUgCisgICAgICAgIHRvcCBvZiB0aGUgd2luZG93LiBUbyBnZW5lcmF0ZSBhIHJlcG9ydCBpbW1lZGlhdGVseSwgcHJlc3MgdGhlICdVcGRhdGUgCisgICAgICAgIE5vdycgYnV0dG9uLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5UaGUgcmVwb3J0IGludGVydmFsIGRldGVybWluZXMgd2hlbiBhIHJlcG9ydCBpcyBnZW5lcmF0ZWQuIAorICAgICAgICBUaGVyZSBhcmUgdHdvIG1haW4gb3B0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVydmFsLiBFaXRoZXIgYW4gYW1vdW50IAorICAgICAgICBvZiB0aW1lIGlzIHNwZWNpZmllZCB0aGF0IG11c3QgcGFzcyBpbiBiZXR3ZWVuIHJlcG9ydHMsIG9yIGEgc3BlY2lmaWMgCisgICAgICAgIHRpbWUgZHVyaW5nIHRoZSB3ZWVrIG9yIGRheSBpcyBzcGVjaWZpZWQgYXQgd2hpY2ggdGltZSB0aGUgcmVwb3J0IGlzIGdlbmVyYXRlZCAKKyAgICAgICAgaXJyZWdhcmRsZXNzIG9mIHdoZW4gdGhlIGxhc3QgcmVwb3J0IHdhcyBnZW5lcmF0ZWQuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSBSZXNvdXJjZSBCdW5kbGUgc2V0dGluZyBpcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBiYXNlIAorICAgICAgICBmaWxlIGZyb20gY29uY2VybmluZyB3aGljaCB0aGUgcmVwb3J0IGlzIGdlbmVyYXRlZC4gVG8gY2hhbmdlIHRoZSBiYXNlIAorICAgICAgICBmaWxlLCBlaXRoZXIgdHlwZSBpbiB0aGUgbmV3IGZpbGUgcGF0aCB0byBhIHJlc291cmNlIGJ1bmRsZSwgb3Igc2VsZWN0IAorICAgICAgICB0aGUgJ0Nob29zZScgYnV0dG9uIGltbWVkaWF0ZWx5IHRvIHRoZSByaWdodCB0byBicmluZyB1cCB0aGUgZ3JhcGhpY2FsIAorICAgICAgICBmaWxlIGNob29zZXIuIFRoZSBvdXRwdXQgZGlyZWN0b3J5IGlzIHRoZSBmaWxlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSAKKyAgICAgICAgcmVwb3J0cyBhcmUgc2F2ZWQuIE5vdGUgdGhhdCB0aGUgcmVwb3J0cyBhcmUgb3ZlcndyaXR0ZW4gZWFjaCB0aW1lIHRoZXkgCisgICAgICAgIGFyZSBuZXdseSBnZW5lcmF0ZWQuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSBvdXRwdXQgZm9ybWF0IGhhcyB0aHJlZSBvcHRpb25zLiBBbnkgY29tYmluYXRpb24gb2YgCisgICAgICAgIHRoZXNlIG9wdGlvbnMgaXMgcGVybWlzc2libGUsIHRob3VnaCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdHVybiB0aGVtIAorICAgICAgICBhbGwgb2ZmLiBUaGUgJ1RleHQnIGZvcm1hdCBwcm9kdWNlcyBhIHNpbXBsZSB0ZXh0IGZpbGUgaW4gRW5nbGlzaCByZXBvcnRpbmcgCisgICAgICAgIG9uIHRoZSBzdGF0dXMgb2YgZWFjaCBvZiB0aGUgcmVzb3VyY2UgZmlsZXMuIFRoZSAnSFRNTCcgZm9ybWF0IHByb2R1Y2VzIAorICAgICAgICBhIHBhZ2UgdGhhdCBpcyB2aWV3YWJsZSBpbiBhIHdlYiBicm93c2VyLiBUaGUgJ1hNTCcgZm9ybWF0IHByb2R1Y2VzIGEgCisgICAgICAgIHdlbGwgZm9ybWVkIFhNTCByZXBvcnQgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgaW50byBhIGRhdGFiYXNlLCB0cmFuc2Zvcm1lZCAKKyAgICAgICAgaW50byBhbm90aGVyIGZvcm1hdCwgb3IgdXNlZCBpbiBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cy48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+RWFjaCBvdXRwdXQgZm9ybWF0IGhhcyBhc3NvY2lhdGVkIHdpdGggaXQgYSBmaWxlIG5hbWUuIFRoaXMgCisgICAgICAgIG5hbWUgY2FuIGJlIGNob3NlbiBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb2plY3QgdG8gd2hpY2ggdGhlIGJ1bmRsZSAKKyAgICAgICAgYmVsb25ncy4gQWxzbywgdGhlc2UgZmlsZSBuYW1lcyBjYW4gYmUgbW9kaWZpZWQgaW4gb3JkZXIgdG8gcGxhY2UgdGhlIAorICAgICAgICBmaWxlcyBpbiBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBvbmUgc3BlY2lmaWVkIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiAKKyAgICAgICAgRm9yIGluc3RhbmNlLCBhIFVOSVggdXNlciBtaWdodCBjaGFuZ2UgdGhlIHRleHQgZmlsZSBuYW1lIHRvICcuLi8uLi9sb2cvcmVwb3J0LnR4dCcuIAorICAgICAgICBBIGRldGFpbCBsZXZlbCBpcyBhbHNvIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHJlcG9ydC4gVGhlICdIaWdoJyBkZXRhaWwgCisgICAgICAgIGxldmVsIG1lcmVseSBpbmNsdWRlcyBlYWNoIG9mIHRoZSByZXNvdXJjZSBrZXlzIHRoYXQgYXJlIHVudHJhbnNsYXRlZCAKKyAgICAgICAgb3IgZHVwbGljYXRlZCBpbnN0ZWFkIG9mIGp1c3QgcmVwb3J0aW5nIHRoZSBudW1iZXIgb2Ygc3VjaCByZXNvdXJjZXMuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSBsYXN0IGJ1dHRvbiBzYXZlcyB0aGUgc2V0dGluZ3MgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZCAKKyAgICAgICAgdG8gYSBwcmVmZXJlbmNlcyBmaWxlIHNvIHRoYXQgdGhlc2Ugc2V0dGluZ3Mgd2lsbCBiZSBpbiBwbGFjZSB0aGUgbmV4dCAKKyAgICAgICAgdGltZSB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIHRoZSBzZXR0aW5ncyBhcmUgbm90IG1lYW50IHRvIGJlIHNhdmVkIGFzIAorICAgICAgICBzdWNoLCBkbyBub3QgY2xpY2sgdGhpcyBidXR0b24uIFRoZSByZXBvcnRlciB3aWxsIHN0aWxsIHJ1biBhY2NvcmRpbmcgCisgICAgICAgIHRvIHRoZSBkaXNwbGF5ZWQgc2V0dGluZ3MgYXMgbG9uZyBhcyB0aGUgUkJSZXBvcnRlciBwcm9ncmFtIGlzIHJ1bm5pbmcuPC9QPgorICAgICAgPEg0IEFMSUdOPSJMRUZUIj5XaGF0IGlzIHRoZSBjb2RlIHNjYW4/PC9IND4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5TdGFydGluZyB3aXRoIHZlcnNpb24gMC4zYSwgdGhlIHJlcG9ydGVyIGluY2x1ZGVkIGEgZnVuY3Rpb24gCisgICAgICAgIHRoYXQgY2FuIHNjYW4gdGV4dCBmaWxlcyBsb29raW5nIGZvciBpbnN0YW5jZXMgb2YgcmVzb3VyY2UgYnVuZGxlIHVzYWdlIAorICAgICAgICBhbmQgY29tcGFyZSB0aG9zZSBpbnN0YW5jZXMgd2l0aCB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlLiBUaGlzIHNjYW4gCisgICAgICAgIGNhbiB0aGVuIHJlcG9ydCBvbiBhbnkgcmVzb3VyY2Uga2V5cyBjYWxsZWQgb24gYnkgYSBwcm9ncmFtIGJ1dCBub3QgZXhpc3RpbmcgCisgICAgICAgIGluIGEgcmVzb3VyY2UgYnVuZGxlLCBhcyB3ZWxsIGFzIHBvaW50IG91dCByZXNvdXJjZXMgaW4gdGhlIGJ1bmRsZSB0aGF0IAorICAgICAgICBhcmUgcG90ZW50aWFsbHkgbm90IHVzZWQgYXQgYWxsIGJ5IHRoZSBjb2RlLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5UaGUgcmVwb3J0ZXIgaXMgdHVybmVkIG9uIGJ5IHNlbGVjdGluZyB0aGUgY2hlY2sgYm94IG5leHQgCisgICAgICAgIHRvIHRoZSB0ZXh0ICdTY2FuIENvZGUgRmlsZScgYW5kIHBvaW50aW5nIHRoZSBzY2FuIHRvIGEgcHJvcGVybHkgc3BlY2lmaWVkIAorICAgICAgICBzY2FuIFhNTCBmaWxlLiBUaGUgcmVwb3J0IGdlbmVyYXRlZCBpcyBhcHBlbmRlZCB0byB0aGUgbm9ybWFsIHJlcG9ydHMgCisgICAgICAgIGdlbmVyYXRlZCBpbiB0ZXh0LCBIVE1MLCBvciBYTUwuIFRoZSByZXBvcnQgaXMgYWxzbyBzZW5zaXRpdmUgdG8gdGhlIGRldGFpbCAKKyAgICAgICAgbGV2ZWwgc2VsZWN0ZWQgZm9yIGVhY2ggb2YgdGhlc2UgdGhyZWUgb3V0cHV0IGZvcm1hdHMuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSBzY2FuIFhNTCBmaWxlIHByb3ZpZGVzIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIAorICAgICAgICBmb3IgdGhlIGNvZGUgc2Nhbi4gSW4gaXQgcnVsZXMgZm9yIHdoYXQgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHRvIHNjYW4gCisgICAgICAgIGFyZSBzZXQgYXMgd2VsbCBhcyB3aGF0IHR5cGUgb2YgdGV4dCBpcyBsb29rZWQgZm9yIHRvIGZpbmQgYSByZXNvdXJjZSAKKyAgICAgICAga2V5LiBNb3JlIDxBIEhSRUY9InNjYW5maWxlLmh0bWwiPmRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSAKKyAgICAgICAgc2NhbiBYTUwgZmlsZTwvQT4gY2FuIGJlIGZvdW5kIGJ5IGZvbGxvd2luZyB0aGUgbGluay48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+Jm5ic3A7PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ZhcS5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvZmFxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjYmYyOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ZhcS5odG1sCkBAIC0wLDAgKzEsMTU5IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlRlbXBsYXRlPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6ICB1cmwoaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ0dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Imxvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Im1lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0idHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InNjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5GcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczwvSDM+CisgICAgICA8UD48Qj4gV2hhdCBpcyB0aGUgYWR2YW50YWdlIG9mIHVzaW5nIFJCIE1hbmFnZXIgd2hlbiBJIGNhbiBlZGl0IHJlc291cmNlIAorICAgICAgICBidW5kbGUgcHJvcGVydHkgZmlsZXMgaW4gYSBzaW1wbGUgdGV4dCBlZGl0b3I/PC9CPjwvUD4KKyAgICAgIDxQPlRyeWluZyB0byBtYW5hZ2UgaW50ZXJuYXRpb25hbGl6YXRpb24gZWZmb3J0cyBpbiBhbnl0aGluZyBidXQgdGhlIHNtYWxsZXN0IAorICAgICAgICBvZiBwcm9qZWN0cyBjYW4gYmUgYSBkaWZmaWN1bHQgYW5kIHRpbWUgY29uc3VtaW5nIHRhc2suIEluIGZhY3QsIFJCIE1hbmFnZXIgCisgICAgICAgIGFzIGEgcHJvamVjdCBncmV3IG91dCBvZiB0aGUgZnJ1c3RyYXRpb25zIGFuZCBlcnJvcnMgdGhhdCBkZXZlbG9wZWQgYXMgCisgICAgICAgIHRoZSByZXN1bHQgb2YgdHJ5aW5nIHRvIG1haW50YWluIG11bHRpcGxlIGxhbmd1YWdlIHN1cHBvcnQgaW4gYSBtb2RlcmF0ZWx5IAorICAgICAgICBsYXJnZSBwcm9qZWN0LiBSZWx5aW5nIG9uIHRleHQgZWRpdG9ycyBhbmQgdGhlIGxpa2UgZGVjcmVhc2VzIHRoZSBjaGFuY2UgCisgICAgICAgIHRoYXQgZGV2ZWxvcGVycyB3aWxsIHByb3Blcmx5IGNvbW1lbnQgZWFjaCBhc3BlY3Qgb2YgZWFjaCB0cmFuc2xhdGlvbiwgCisgICAgICAgIGluY3JlYXNlcyB0aGUgY2hhbmNlIHRoYXQgZXJyb3JzIHN1Y2ggYXMgZHVwbGljYXRlIGtleSBuYW1lcyBhbmQgaW5jb25zaXN0ZW5jaWVzIAorICAgICAgICBhY3Jvc3MgbGFuZ3VhZ2UgZmlsZXMsIGFuZCBpbmNyZWFzZXMgdGhlIGFtb3VudCBvZiB0aW1lIGRldmVsb3BlcnMgYW5kIAorICAgICAgICB0cmFuc2xhdG9ycyBoYXZlIHRvIHNwZW5kIHRyYWNraW5nIGRvd24gaW5jb25zaXN0ZW5jaWVzIGFuZCB1bnRyYW5zbGF0ZWQgCisgICAgICAgIHJlc291cmNlcy48L1A+CisgICAgICA8UD5SQk1hbmFnZXIgb2ZmZXJzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgdG8gY29ycmVjdCB0aGVzZSBwcm9ibGVtczo8L1A+CisgICAgICA8UD4gCisgICAgICAgIDxVTD4KKyAgICAgICAgICAKKyAgICAgICAgPExJPiBSQiBNYW5hZ2VyIGNhbiBlZGl0IG11bHRpcGxlIGxhbmd1YWdlIGZpbGVzIHdoZW4gYXBwcm9wcmlhdGU8L0xJPgorICAgICAgICAgIDxMST5FbnRyaWVzIGFyZSBjaGVja2VkIGZvciBwcm9wZXIgZm9ybWF0IGFuZCBhc3N1cmVkIG5vdCB0byBiZSBkdXBsaWNhdGVzPC9MST4KKyAgICAgICAgICAKKyAgICAgICAgPExJPlJCIE1hbmFnZXIgcHJvdmlkZXMgYSBiZXR0ZXIgZ3JvdXBpbmcgb2YgcmVzb3VyY2VzLCBzbyB0aGF0IGluZGl2aWR1YWwgCisgICAgICAgICAgdHJhbnNsYXRpb25zIGFyZSBlYXN5IHRvIGZpbmQ8L0xJPgorICAgICAgICAgIDxMST5FYWNoIGxhbmd1YWdlIGZpbGUgd2lsbCBkaXNwbGF5IGluIGl0cyBvd24gdmlldyBhIGxpc3Qgb2Ygb25seSByZXNvdXJjZXMgCisgICAgICAgICAgICB0aGF0IGFyZSB1bnRyYW5zbGF0ZWQ8L0xJPgorICAgICAgICAgIAorICAgICAgICA8TEk+UkIgTWFuYWdlciBrZWVwcyB0cmFjayBvZiBzdGF0aXN0aWNzIHN1Y2ggYXMgbnVtYmVyIG9mIHJlc291cmNlcywgCisgICAgICAgICAgdW50cmFuc2xhdGVkIGl0ZW1zLCBldGMuPC9MST4KKyAgICAgICAgICAKKyAgICAgICAgPExJPlJCIE1hbmFnZXIgYWxsb3dzIGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIG9mIHRyYW5zbGF0aW9uIGRhdGEgaW50byAKKyAgICAgICAgICBtdWx0aXBsZSBmb3JtYXRzPC9MST4KKyAgICAgICAgICA8TEk+VXNlIG9mIHRoZSBhcHBsaWNhdGlvbiBjdXRzIGRvd24gb24gZGV2ZWxvcG1lbnQsIHRyYW5zbGF0aW9uLCBhbmQgCisgICAgICAgICAgICBkZWJ1Z2dpbmcgdGltZSBpbiBhbnkgaW50ZXJuYXRpb25hbGl6ZWQgc2V0dGluZzwvTEk+CisgICAgICAgIDwvVUw+CisgICAgICAgIAorICAgICAgPFA+PEI+V2lsbCBSQiBNYW5hZ2VyIHdvcmsgb24gbXkgY29tcHV0ZXI/PC9CPjwvUD4KKyAgICAgICAgCisgICAgICA8UD5SQiBNYW5hZ2VyIGlzIHdyaXR0ZW4gdXNpbmcgb25seSB0aGUgSmF2YSBBUEkuIEl0IGhhcyBiZWVuIHRlc3RlZCB1bmRlciAKKyAgICAgICAgdGhlIEphdmEgMS4yLjIgcnVudGltZSBlbnZpcm9ubWVudCBhbmQgaGlnaGVyLiBJZiB5b3VyIGNvbXB1dGVyIGhhcyBhIAorICAgICAgICBKYXZhIFZpcnR1YWwgTWFjaGluZSAoSlZNKSBpbiB0aGlzIGVudmlyb25tZW50LCBSQk1hbmFnZXIgc2hvdWxkIHdvcmsgCisgICAgICAgIGZvciB5b3UuIEluc3RydWN0aW9ucyBmb3Igc2V0dGluZyB1cCBhbmQgcnVubmluZyB0aGUgcHJvZ3JhbSBhcmUgZm91bmQgCisgICAgICAgIGluIDxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlN0ZXAgMTwvQT4gb2YgdGhlIHR1dG9yaWFsLjwvUD4KKyAgICAgICAgCisgICAgICA8UD48Qj5XaHkgZG9lc24ndCBSQiBNYW5hZ2VyIHJ1biBpbiBsYW5ndWFnZSBYPzwvQj48L1A+CisgICAgICA8UD48L1A+CisgICAgICA8UD5SQiBNYW5hZ2VyIHdpbGwgYWxsb3cgeW91IHRvIGVkaXQgbGFuZ3VhZ2UgZmlsZXMgZm9yIGFueSBsYW5ndWFnZS9jb3VudHJ5L3ZhcmlhbnQgCisgICAgICAgIGVuY29kaW5nLiBUbyBkZW1vbnN0cmF0ZSB0aGUgdXNlZnVsbmVzcyBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgUkIgTWFuYWdlciAKKyAgICAgICAgaGFzIGl0cyBvd24gcmVzb3VyY2UgYnVuZGxlLiBUaGUgYXBwbGljYXRpb24gY2FuIGN1cnJlbnRseSBiZSBydW4gaW4gRW5nbGlzaCwgCisgICAgICAgIEdlcm1hbiwgU3dlZGlzaCwgYW5kIEZpbm5pc2guIFlvdSBhcmUgd2VsY29tZSB0byB1c2UgdGhlIHByb2dyYW0gdG8gZWRpdCAKKyAgICAgICAgaXRzIG93biByZXNvdXJjZSBidW5kbGUgYW5kIGFkZCBhbnkgb3RoZXIgbGFuZ3VhZ2UuIElmIHlvdSBkbyBzbywgeW91IAorICAgICAgICBtYXkgc3VibWl0IHRoZSBuZXcgbGFuZ3VhZ2UgZmlsZSB0byB0aGUKKyAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5qdGNzdi5jb20vY2dpYmluL2ljdS1idWdzLyI+SUNVIGJ1ZyBkYXRhYmFzZTwvQT4uIAorICAgICAgICBFYWNoIHN1Ym1pc3Npb24gd2lsbCBiZSBjb25zaWRlcmVkIGZvciBmdXR1cmUgc3VibWlzc2lvbnMsIGJ1dCB0aGUgc3VibWl0dG9yIAorICAgICAgICBtdXN0IGdpdmUgdGhlIHJpZ2h0cyB0byB0aGUgdHJhbnNsYXRpb24gdG8gSUJNIGlmIHRoZSBmaWxlIGlzIHRvIGJlIGluY2x1ZGVkLjwvUD4KKyAgICAgIDxQPjxCPkkgZm91bmQgYSBidWcuIFdoZXJlIGRvIEkgcmVwb3J0IGl0PzwvQj48L1A+CisgICAgICA8UD5QbGVhc2Ugc3VibWl0IGEgYnVnIHRvIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lmp0Y3N2LmNvbS9jZ2liaW4vaWN1LWJ1Z3MvIj5JQ1UgYnVnIGRhdGFiYXNlPC9hPi48L1A+CisgICAgICA8UD48Qj5XaGF0IGNhbiBJIGV4cGVjdCBmcm9tIGZ1dHVyZSB2ZXJzaW9ucyBvZiBSQiBNYW5hZ2VyPzwvQj48L1A+CisgICAgICA8UD48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+QW5zd2VyPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvZnV0dXJlX2ZlYXR1cmVzLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9mdXR1cmVfZmVhdHVyZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NlOGYwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvZnV0dXJlX2ZlYXR1cmVzLmh0bWwKQEAgLTAsMCArMSwxNjMgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciAtIEZlYXR1cmVzIGFuZCBWZXJzaW9uIEhpc3Rvcnk8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICA8VUw+CisgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5GdXR1cmUgRmVhdHVyZXMgYW5kIFZlcnNpb24gSGlzdG9yeTwvSDM+CisgICAgICA8UD5Tb21lIG9mIHRoZSBmZWF0dXJlcyBhbGwgcmVhZHkgaW4gdGhlIHdvcmtzIGZvciBmdXR1cmUgdmVyc2lvbnMgb2YgUkIgCisgICAgICAgIE1hbmFnZXI6PC9QPgorICAgICAgPFVMPgorICAgICAgICA8TEk+VGhlIGFiaWxpdHkgdG8gbG9va3VwIHN1Z2dlc3RlZCB0cmFuc2xhdGlvbnMgdXNpbmcgaW1wb3J0ZWQgZGljdGlvbmFyaWVzPC9MST4KKyAgICAgICAgPExJPk11bHRpcGxlIHNlbGVjdGlvbnMgYWNyb3NzIHJlc291cmNlIHRhYmxlczwvTEk+CisgICAgICAgIDxMST5FZGl0aW5nIHN1YnRyZWVzIHdpdGhpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWU8L0xJPgorICAgICAgICA8TEk+VGhlIGFiaWxpdHkgdG8gcHJpbnQgdmFyaW91cyB2aWV3cyBvZiByZXNvdXJjZXM8L0xJPgorICAgICAgICA8TEk+QSBjaGFyYWN0ZXIgdGFibGUgZm9yIHNlbGVjdGluZyBjaGFyYWN0ZXJzIG5vdCBjb21tb24gdG8ga2V5Ym9hcmRzPC9MST4KKyAgICAgICAgPExJPi4uLmFuZCBvZiBjb3Vyc2UgYWxsIG9mIHRoZSBidWcgZml4ZXM8L0xJPgorICAgICAgPC9VTD4KKyAgICAgIAorICAgICAgPHA+RmVhdHVyZXMgYWRkZWQgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uICgwLjcpIG9mIFJCIE1hbmFnZXI6PC9wPgorICAgICAgICAKKyAgICAgIDx1bD4KKyAgICAgICAgPGxpPkFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIFhMSUZGIGZpbGVzPC9saT4KKyAgICAgICAgPGxpPkZpeCBzb21lIHBhbmVsIHVwZGF0aW5nIGlzc3VlczwvbGk+CisgICAgICAgIDxsaT4uLi4gYW5kIHNvbWUgb3RoZXIgYnVnIGZpeGVzPC9saT4KKyAgICAgIDwvdWw+CisKKyAgICAgIDxQPkZlYXR1cmVzIGFkZGVkIGluIHRoZSBsYXRlc3QgdmVyc2lvbiAoMC42KSBvZiBSQiBNYW5hZ2VyOjwvUD4KKyAgICAgICAgCisgICAgICA8VUw+CisgICAgICAgIDxMST5UaGUgcHJvZ3JhbSB3aW5kb3cgbm93IGhhcyBhbiBpY29uPC9MST4KKyAgICAgICAgPExJPkludGVncmF0ZSB0aGUgaW1hZ2VzIGFuZCByZXNvdXJjZXMgaW50byB0aGUgamFyIGZpbGVzPC9MST4KKyAgICAgICAgPExJPlNvdXJjZSBjb2RlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlPC9MST4KKyAgICAgICAgPExJPkFsbG93IGV4cG9ydGluZyBvZiBJQ1U0QyByZXNvdXJjZSBidW5kbGVzPC9MST4KKyAgICAgICAgPExJPi4uLiBhbmQgc29tZSBidWcgZml4ZXM8L0xJPgorICAgICAgPC9VTD4KKyAgICAgIAorICAgICAgPFA+RmVhdHVyZXMgYWRkZWQgaW4gdmVyc2lvbiAwLjRhIG9mIFJCIE1hbmFnZXI6PC9QPgorICAgICAgCisgICAgICA8VUw+CisgICAgICAgIDxMST5SZWNlbnRseSBhY2Nlc3NlZCByZXNvdXJjZSBidW5kbGVzIGFwcGVhciBpbiB0aGUgRmlsZSBtZW51IGZvciBlYXN5IAorICAgICAgICAgIG9wZW5pbmc8L0xJPgorICAgICAgICA8TEk+TmV3IGljb25zIGZvciB0aGUgdHJlZSB2aWV3PC9MST4KKyAgICAgICAgPExJPkFiaWxpdHkgdG8gc2F2ZSwgaGlkZSwgb3IgZGVsZXRlIHNwZWNpZmljIHJlc291cmNlIGZpbGVzIHdpdGhvdXQgYWZmZWN0aW5nIAorICAgICAgICAgIHRoZSByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZTwvTEk+CisgICAgICAgIDxMST5FeHBvcnRpbmcgdG8gSmF2YSBjbGFzcyBmaWxlcyBhbGxvd3MgZm9yIHNwZWNpZmljYXRpb24gb2YgdGhlIHBhY2thZ2UgCisgICAgICAgICAgbmFtZSBhcyB3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgcHVibGljIG9yIHByb3RlY3RlZCBvYmplY3RzPC9MST4KKyAgICAgICAgPExJPlRyYW5zbGF0aW9ucyBjYW4gbm93IGVhc2lseSBhY2NvbWlkYXRlIG11bHRpcGxlIGxpbmUgdGV4dDwvTEk+CisgICAgICAgIDxMST5SQiBNYW5hZ2VyIGlzIG5vIGxvbmdlciByZXN0cmljZWQgdG8gcmVzb3VyY2UgYnVuZGxlcyB0aGF0IGVuZCBpbiAKKyAgICAgICAgICAnLnByb3BlcnRpZXMnIGluIGxvd2VyLWNhc2U8L0xJPgorICAgICAgICA8TEk+Li4uIGFuZCBzb21lIGJ1ZyBmaXhlczwvTEk+CisgICAgICA8L1VMPgorCisgICAgICA8UD5GZWF0dXJlcyBhZGRlZCBpbiB2ZXJzaW9uIDAuM2Egb2YgUkIgTWFuYWdlcjo8L1A+CisgICAgICA8VUw+CisgICAgICAgIDxMST5UaGUgYWJpbGl0eSB0byBtZXJnZSBwcm9wZXJ0eSBmaWxlcyBhbmQgb3RoZXIgcmVzb3VyY2UgYnVuZGxlcyB3aXRoIAorICAgICAgICAgIHRoZSBvcGVuIHJlc291cmNlIGJ1bmRsZTwvTEk+CisgICAgICAgIDxMST5FeHBvcnRpbmcgSmF2YSBjb21waWxhYmxlIGZpbGVzIChMaXN0UmVzb3VyY2VCdW5kbGUgZXh0ZW5zaW9uIGZpbGVzKTwvTEk+CisgICAgICAgIDxMST5JbXBvcnQgYW5kIGV4cG9ydCBzdXBwb3J0IGZvciBUTVggZm9ybWF0dGVkIFhNTCB0cmFuc2xhdGlvbiBmaWxlczwvTEk+CisgICAgICAgIDxMST5UaGUgYWJpbGl0eSB0byBzZWFyY2ggcmVzb3VyY2UgYnVuZGxlcyBhbmQgbGFuZ3VhZ2UgZmlsZXMgZm9yIHBhcnRpY3VsYXIgCisgICAgICAgICAgdHJhbnNsYXRpb25zPC9MST4KKyAgICAgICAgPExJPktleWJvYXJkIHNob3J0Y3V0cyBmb3IgdGhlIG1vc3QgY29tbW9uIGZ1bmN0aW9uczwvTEk+CisgICAgICAgIDxMST5BIGZpbGUgc2Nhbm5pbmcgZXh0ZW5zaW9uIHRvIHRoZSByZXBvcnRpbmcgdG9vbDwvTEk+CisgICAgICAgIDxMST4uLi4gYW5kIHNvbWUgYnVnIGZpeGVzPC9MST4KKyAgICAgIDwvVUw+CisgICAgICA8UD5IYXZlIGFub3RoZXIgaWRlYT8gU2VuZCBhbnkgdGhvdWdodHMgb3IgY29tbWVudHMgdG8KKyAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuanRjc3YuY29tL2NnaWJpbi9pY3UtYnVncy8iPklDVSdzIEppdHRlcmJ1ZyBkYXRhYmFzZTwvYT4uPC9QPgorICAgICAgPGJyPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDA0IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+Cis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTg0OTQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjoyMTRkNmMyNWM0YTIyMmZlZWI1ZWNkMWQ3ZTcwMWM2YmYxODAxZjE1NDliODc1MDBmMDZkYmI1MDY1MmU1OWE3CitzaXplIDE2NzQKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9hcnJvd19idWxsZXQuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2Fycm93X2J1bGxldC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMTgyNQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9hcnJvd19idWxsZXQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjI4NTRmMzU4NjQ4ZGNjMmVhMjFiNGEzYzljYTY1YTgyNzYyYjNkMDJiMThiNTMzNGU0NGVlOWE4OGMyYmE0OTAKK3NpemUgNzAKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MWYyODgKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjJiMjliNzUwMWM3YjA2MmQ4NzQzNjM4NDkxNjE4MmE1NzU0Y2NiM2MzM2ZhZjkyZGY1MmY5NmZjZDc5YWQyOTIKK3NpemUgOTQKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9pYm1fbG9nb19zbWFsbF93aGl0ZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvaWJtX2xvZ29fc21hbGxfd2hpdGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTViYjcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvaWJtX2xvZ29fc21hbGxfd2hpdGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjkzNmI4NGQ3YzM3YzRkZmU0YzIwMDdhMWIzNmE3YzRiOWU3Zjk5YTc2YTk5MmQ2ZmU1MmE4NDc4MjY4ZTgzOGQKK3NpemUgMTM4CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvUkJSZXBvcnRlci5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvUkJSZXBvcnRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhM2ZmOAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9SQlJlcG9ydGVyLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjoyYzUzM2VjNDg1OTgzM2I2NTQ1YzNlY2U3YjA0ZjIwNWM3MDZhNTU5ZDFiOWNjMTNiMjM1OGU4YTZjMWY3ZmJiCitzaXplIDEzOTg0CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZmlsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3ZTJkMgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19maWxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo1MDAwNDQ2ZjBkZTNjZDZiYjU4MDY4ZjBhMTgxMjE0M2M2MWJmYWY4ZjEyMzc3ZDg1OTQ0ZjE5NTVmZjQzODAyCitzaXplIDk3NDEKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19ncm91cC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZ3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMGQ1YTIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZ3JvdXAuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjhhMDY3N2JjYWNkMzgxZTQwOTgxMmVjMDgzNzYxYTM1YmYwMWFhYTQ2ZmJlNzU0ZWZmMGNlMTFhMDhlNzlkOTMKK3NpemUgMTUwNDIKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19yZXNvdXJjZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfcmVzb3VyY2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzA2OTUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfcmVzb3VyY2UuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjVkOWIwMmZkMTdlNzg3ODFhYjAwODc4NDFlNTdkYjVmNGYwMTgyOWFjMmQwZTQ3MDViZTc3Y2UwZjllMDc3NzMKK3NpemUgNjI2NgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3RyYW5zbGF0aW9uLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY190cmFuc2xhdGlvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjOGUwYQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY190cmFuc2xhdGlvbi5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NjllZGU3YThkM2Q1NjExYmZmNjdiODE2NzY5OTcwYjAwYmJiMjYzNzVkZDdiY2I1ZGMxMmJmZjZlNjM1YmFiOQorc2l6ZSA3ODc1CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfdW50cmFuc2xhdGVkLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY191bnRyYW5zbGF0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDM4NjAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfdW50cmFuc2xhdGVkLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjplOWM5NTk0NWE4YWVmYjZjYzBiM2FiNDBjNDdlM2RiOWJjYzQ3NzI1M2RlZWJmOGMxZDkwNjhhNTFkYjkwMTJiCitzaXplIDEzMTgyCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvY3JlYXRlX2dyb3VwLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9jcmVhdGVfZ3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWJlYTcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvY3JlYXRlX2dyb3VwLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo5NmI3YmRjZDkzNWRhMjBiNGU4ZGNjMmY3YTNjMGI3OTRkYjNhYjZlYmI5NjcxZjdhMTI0YjkwNmI4YzViZDllCitzaXplIDM5MDcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9ncm91cC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfZ3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTAyNjIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfZ3JvdXAuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjdmNzliYWZjYmQ4M2MwYjQ4ZDA1ZWExZTkyZTM4NzcxMzgwYzdmMDIzN2UzZDE5YTE0NTViNjc5ZTFiMWNjZWIKK3NpemUgMTQ1NjkKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9yZXNvdXJjZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfcmVzb3VyY2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzViYWEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfcmVzb3VyY2UuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmIxMjZlZGIyZjY4ZDM0OWJlNzFhMzE4ZmFhODU3YWVhNDY3MzNlMmIxZjA2OTc3YzM4NzJhNmI4OTIzZTI2NWYKK3NpemUgNTEwMwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3NjcmVlbi5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfc2NyZWVuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmU4Y2RkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3NjcmVlbi5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NGJlOWNjMDFhZjY2MjJiMzJiODk5MGIwMzAyOGYzNWViMmJmMzVhMzhmODE3NjVlMjIwMTdiMjc1YmI4OTMyZAorc2l6ZSA5OTkzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfd2l0aF9wcmVmZXJlbmNlcy5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfd2l0aF9wcmVmZXJlbmNlcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1MTBiOAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV93aXRoX3ByZWZlcmVuY2VzLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpjZWY0NDE5YTQ4MWFhYjgwYjZjMmI0ZWJkM2Q4MjVmNDFmZjlhM2UxZDNhZDMxNmIyM2QzOGQ2YjczMDZiZDI1CitzaXplIDk5MDcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfbWV0YWwuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tZXRhbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4ODAyMAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfbWV0YWwuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2Ojc1YjYyZGZjZTM0Nzk1MmFiMTgxYTA1ODA2OGEwNzcwMzg2YWRkZTdiOWUzNjlkODE0YzY1MzBjMTZkZDcyZmYKK3NpemUgNDQ0MzMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfbW90aWYuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tb3RpZi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5NWE5OQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfbW90aWYuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmU1MzI1OTBmYzZhMjkwOTQzODVjMjJhYTgzNTA1YTNkMTU4MWU5YzU2MzlhYmU4NWQ0ZTgxZTJhMmFmNDc0NDMKK3NpemUgNTMzMjIKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfd2luZG93cy5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX3dpbmRvd3MuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjc2NzMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX3dpbmRvd3MuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmVhNGQ4NWUyMDU1ZDhmNWI4MGYzNTc5MTQ1OTRiZTEzNjNiMGRhODFjY2QwZDU4ZjRlMmNiNDRkZGI0MDIwYzMKK3NpemUgNDYwNzcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sb29rdXBfcmVzb3VyY2UuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xvb2t1cF9yZXNvdXJjZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sb29rdXBfcmVzb3VyY2UuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmE5NzFhNDk2ODkzZmNkNDczMTY4NTRjNzk0ZWJhODQxOTQ3YmUzOTliNzM0ZGJjNDFhNDliN2M0ZTQ3NjZjZmUKK3NpemUgNjQ0NQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21haW5fcGFnZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWFpbl9wYWdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA0YjNiCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21haW5fcGFnZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OGM3OTU4OWU3YTViMjc3N2M5NTViZmYwMDE1M2FjYjEyYzA1NzhmYTY1NDRlYzhkNWQyOWM2NjMwZGU3YTlmMQorc2l6ZSAxOTA4NQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM1MWUxCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OTg2OWQ0YjdkNWFiZWU0ZjA4YzQxZDQ3MDQwZGVjYzVhZDdiNWExMmE1OTU2ZTY5ZDQ0OTI4NWYwOWUyMjQyMworc2l6ZSAyNzQxCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2V4cG9ydC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2V4cG9ydC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiNWQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfZXhwb3J0LmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo4YmYzMDE1YWMxYWVlMDMxYTcyNzdhNTY5MmU1NGZmNzVkYjRkYTgwYWVkMWZkZGY0ZjA4ZmI4MjAzMTBmMGQ0CitzaXplIDM5ODUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfaW1wb3J0LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfaW1wb3J0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM2NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9pbXBvcnQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjYwZTBmMDk1Y2UwY2ViY2Q3YjlhYjRmMDI4ODU2NTFlNDQ5MTlkOGQwMTc2NDVmNzExYzc2NTYyODhkODA0NzgKK3NpemUgNDA4NgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfaGVscC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9oZWxwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzc1MDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfaGVscC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NTA2NjAzMWYxNDY4YTRhNjdmOTQ3NmE5YjJiZTg5Njc0NmU5NDA4YmJjNTViNGMxMmMwZjhhNGJmOTYwYWJlYQorc2l6ZSA5NzQKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X29wdGlvbnMuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfb3B0aW9ucy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwMzRkMAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X29wdGlvbnMuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjI3OWQ1NWEyYWUyYzZhMzlhZDVmOTVlNWYzNjM3YjlkZjU4YjNhZTBiYzYxMzU1YTg4ZjQwOGFhNjVjZjE0OTYKK3NpemUgMTM2MwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfcG9wdXBfdHJlZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9wb3B1cF90cmVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODljZmFkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfcG9wdXBfdHJlZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6YjVkNWJhZWQ5YWM1NmZiNDg5NDE5ZjEzNGQwMWNmZTA4ZGRkMjY4YThiNWU4ZTk3MmFmOTUyY2JhZTBhMmY4ZAorc2l6ZSAyNDQxMwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL25ld19iYXNlY2xhc3MuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL25ld19iYXNlY2xhc3MuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjA5N2QKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2Jhc2VjbGFzcy5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OTBkNWQxZmFlOGNhZWQ2OTA2ZjE0MGFmYjQ5NjEwMWM5MzAyMDA0MTgzN2I3NzA5OGZmYzYxYjFkMzJmZmIzNgorc2l6ZSAxMzQxOQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL25ld19idW5kbGUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL25ld19idW5kbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjgxYjQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2J1bmRsZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NmNkYWQ3MjA1NjI5ODI2ZWU1MGQzNWM1NjQ1OTFlYTAxYzFlMjIyY2QzNDdmN2YxNzUwZDY0ZmVlZThjNjYwZAorc2l6ZSAxMTY5NgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ByZWZlcmVuY2VzX2RpYWxvZy5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvcHJlZmVyZW5jZXNfZGlhbG9nLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRhMWUwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ByZWZlcmVuY2VzX2RpYWxvZy5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MjMyMGE1MTVmMDcyM2ZiYWRhODBlZGYyMGM0M2MyZmRlNzg1ZDJhODUxZTdmMGNhZjEzNGU5NDNkODYxOGZmMgorc2l6ZSA3MTg3CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfYnVuZGxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19idW5kbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzA4YjYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfYnVuZGxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjozMDQyYmJhNjkxMTEzY2IwZGQ2MDIyZGM4NDFkNmRjNWQ2ZjM4ZDJlMWE5ZTkyYjM3Y2I2MzEyNjFmNjBkNGY0CitzaXplIDE4MDg3CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfZmlsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiMzlhNQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19maWxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpkYzZjYmE0MmM4OTQxNzE2ZTUyMjNlODk3NmQ2YWY0OGZmNzFkN2ExMGJkNjI5OWI1YzkwZjNlOTMxMGU4NmFjCitzaXplIDE5MzQzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zZWFyY2guZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc2VhcmNoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY2NmZjCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc2VhcmNoLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjowZmM3NjhkMDI2NDBlMzMxMzUyY2Q1ZTQ3YTI3MGY3MzAyOTkwZGRlNmQ2MzNlNDlkNGZjNTQ1Y2Q5NmUyZDNiCitzaXplIDIxNjgxCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19idW5kbGUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc3RhdHNfYnVuZGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2ZmZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc3RhdHNfYnVuZGxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpjNTliYmUxOTVlYWU5NTdmMDdjMzFkMzM0YWQ4MDA2YTFlYmIxYzI0ZDczMzM5NjM3OTc1NTg1NDE3NzdkZDY0CitzaXplIDE3MDkwCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19maWxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2ZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmIyYTYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19maWxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo4MGUzODUxMDY2Y2UzY2FkNWRjYTMyZTIyNDY1MzFjZmMzMGE0MGE5OGM4NTEzMjA4MzU0MzIyYzUyMDhmOTZkCitzaXplIDE2NTI1CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld190cmVlX2Jhc2ljLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3RyZWVfYmFzaWMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OWQ5NzQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld190cmVlX2Jhc2ljLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo2NTYwYzI1ZGNiYTY3OTc3MDkxNTZlZmJlYjQ3NzMyNmM0YjZkNzY1NmFmNjc4N2Y1ODA2YWQ3ZTcyMWVhZWRjCitzaXplIDE2MzEzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2J1bmRsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2J1bmRsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNzIzOAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfYnVuZGxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjowYTg3ZDMxMjM2YWU5NTUyNDI3ZTZmNmNhMmI2MmYzMWQwODJlYzJlMzM3MzYzZGNkOTQwMzBhNzM1MjgwMTM1CitzaXplIDE5NTU4CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2RpYWxvZzAuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19kaWFsb2cwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZiYzUwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19kaWFsb2cwLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo0YTIzNmUwNjVhODkwZmFiNDllMGNkYWRkZTdjNWIwZmYwYTRlM2MzODU2NjJmZTBmYjU3NTIzZGFhNzUyMDI3CitzaXplIDczNjcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfZmlsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2ZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODc2ODAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2ZpbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjE1ZDMzOTU2MWEyMjkzYzAxNDA1MTU0MGIyMDhjNDQ2M2I0MGIxYmUzMjIxY2E1YTA5OTIyZjZkZjk3YTk3M2MKK3NpemUgMjQyMzAKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zcGFjZXIuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NwYWNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjNWUzYwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zcGFjZXIuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjNiNGM2M2NlNWU4YmIzNjdjYzQ4NjMwNzJkOWQwMWNkYmZlMTFiNjU3OGZhMmY2MWYxMjBmNjY2NWFiYTUwZDMKK3NpemUgODcwCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyOTU3MgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjozY2RmOGMzODIxMzc3YjMyOTA2NWI3ZTNiMzIzZjFkOGE0NmU5ZjQ3NzkzZDIyYjZmOGIxNjM0ZTMyY2Y1ZjQzCitzaXplIDEyOApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTkwYzYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6Y2MzYzcyNGIxZDU0MGJiZWFlZmMyODQ5ZjViNTU1Mzk0OGMyODFjZTlmODdlMzNjMWVmODAwOTU3ZDdjZWViOQorc2l6ZSA4NwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmZDdhZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6ODg4MTFkY2VmZDE0MzIwZGE5ZWFmY2IwMDkxZDJiMTE0MjAzZDAwMzZkNTdhZDk3M2U2MWU0ODRhYTZlNjYxZQorc2l6ZSA3NDgKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGY4YzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjVkYjc3NjkyMDhmZmNiOTU2MzFkOTcyN2U2ZmM5M2Q4MjA3M2VlZTVlN2MyNmRhNzg5NDllY2MyYTM3YTNhYjgKK3NpemUgOTMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMGNiYzUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjAwODliYTlkNDFmMGQ2MjM0ZDYyM2FlZjk2NWZhYjQ0YzE5MDA5N2M5NGM5NDcyZmNkYzk5YWJkZDUxMjRiZGYKK3NpemUgMTA2OQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW5kZXguaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyMzUyNwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNDUgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UmVzb3VyY2UgQnVuZGxlIE1hbmFnZXI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+CisgICAgICA8RElWIEFMSUdOPSJDRU5URVIiPgorICAgICAgICA8SDI+V2VsY29tZSB0byBSZXNvdXJjZSBCdW5kbGUgTWFuYWdlciAodjAuNik8L0gyPgorICAgICAgICA8UCBBTElHTj0iQ0VOVEVSIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21haW5fcGFnZS5naWYiPjwvUD4KKyAgICAgICAgPFAgQUxJR049IkNFTlRFUiI+VGhlc2UgcGFnZXMgYXJlIG1lYW50IHRvIGhlbHAgeW91IGFuZCB5b3VyIGRldmVsb3BtZW50IAorICAgICAgICAgIHRlYW0gZ2V0IHN0YXJ0ZWQgd2l0aCB0aGlzIHRyYW5zbGF0aW9uIG1hbmFnZW1lbnQgdG9vbC48L1A+CisgICAgICAgIDxQIEFMSUdOPSJDRU5URVIiPlRoZSB0b29sIHdhcyBkZXZlbG9wZWQgdG8gYmUgZWFzeSB0byB1c2UgYW5kIGludHV0aXRpdmUuIAorICAgICAgICAgIElmIHlvdSBhbGwgcmVhZHkgdW5kZXJzdGFuZCB0aGUgcHJvY2VzcyBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgCisgICAgICAgICAganVzdCB3YW50IHRvIGxlYXJuIGhvdyB0aGlzIHRvb2wgY2FuIGJlIHVzZWQgdG8gbWFrZSB5b3VyIGVmZm9ydHMgbW9yZSAKKyAgICAgICAgICBlZmZpY2llbnQgYW5kIGxlc3MgZXJyb3IgcHJvbmUgZ28gc3RyYWlnaHQgdG8gdGhlIDxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPnN0ZXAtYnktc3RlcCAKKyAgICAgICAgICB0dXRvcmlhbDwvQT4sIDxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPmZ1bmN0aW9ucyBhbmQgdmlld3M8L0E+LCBvciAKKyAgICAgICAgICA8QSBIUkVGPSJmYXEuaHRtbCI+ZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnM8L0E+LiBJZiB5b3UgYXJlIG5ldyB0byAKKyAgICAgICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbiBkZXZlbG9wbWVudCwgeW91IG1heSB3YW50IHRvIGZpcnN0IGNoZWNrIG91dCAKKyAgICAgICAgICB0aGlzPEEgSFJFRj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saWJyYXJ5L2otcmJtZ3IvaW5kZXguaHRtbCI+IAorICAgICAgICAgIGludHJvZHVjdGlvbiB0byBpbnRlcm5hdGlvbmFsaXphdGlvbjwvQT4uPC9QPgorICAgICAgICA8UCBBTElHTj0iQ0VOVEVSIj5JZiB5b3Ugd291bGQgbGlrZSB0byByZXBvcnQgYSBidWcsIGZlZWwgZnJlZSB0bworICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuanRjc3YuY29tL2NnaWJpbi9pY3UtYnVncy8iPnN1Ym1pdCBhIGJ1ZyB0byBvdXIKKyAgICAgICAgICBidWcgZGF0YWJhc2U8L0E+LjwvUD4KKyAgICAgIDwvRElWPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+Cis8IS0tCis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIyIj4KKyAgPFRSPgorICAgIDxURCBXSURUSD0iMjAwIiBCR0NPTE9SPSIjQ0NDQ0ZGIj4mbmJzcDs8L1REPgorICAgIDxURD4KKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBXSURUSD0iMTc1IiBIRUlHSFQ9IjUwIj48L0RJVj4KKyAgICA8L1REPgorICA8L1RSPgorICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkdDT0xPUj0iI0NDQ0NGRiI+IAorICAgICAgPFA+PEEgSFJFRj0iaW5kZXguaHRtbCI+UkJNYW5hZ2VyPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+UkJSZXBvcnRlcjwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSIuLi90dXRvcmlhbC9zdGVwMS5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9QPgorICAgICAgPFA+VG9waWNzPC9QPgorICAgICAgPFVMPgorICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+U3RlcC1ieS1zdGVwIFR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgIDxMST48QSBIUkVGPSJzdGVwMS5odG1sIj5DaGFuZ2luZyBQcmVmZW5jZXM8L0E+PC9MST4KKyAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZSBGZWF0dXJlczwvQT48L0xJPgorICAgICAgPC9VTD4KKyAgICA8L1REPgorICAgIDxURD48L1REPgorICA8L1RSPgorPC9UQUJMRT4KKy0tPgorPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvbG9va2FuZGZlZWwuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2xvb2thbmRmZWVsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhNjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2xvb2thbmRmZWVsLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkJNYW5hZ2VyIC0gTG9vayBhbmQgRmVlbDwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+TG9vayBhbmQgRmVlbDwvSDM+CisgICAgICA8UD5SQiBNYW5hZ2VyIGlzIHdyaXR0ZW4gcHVyZWx5IGluIEphdmEsIGFuZCB0aGVyZWZvcmUgaXMgYSBjcm9zcy1wbGF0Zm9ybSAKKyAgICAgICAgYXBwbGljYXRpb24uIFVzaW5nIHRoZSBQcmVmZXJlbmNlcyBtZW51IGl0ZW0sIHRoZSBsb29rIGFuZCBmZWVsIG9mIHRoZSAKKyAgICAgICAgYXBwbGljYXRpb24gY2FuIGJlIGNoYW5nZWQgdG8gYW55IG9uZSBvZiB0aGUgbG9vayBhbmQgZmVlbHMgc3VwcG9ydGVkIAorICAgICAgICBieSB0aGUgdmlydHVhbCBtYWNoaW5lIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS48L1A+CisgICAgICA8UD5UaGlzIHBhZ2Ugc2hvd3Mgc29tZSBleGFtcGxlcyBvZiBob3cgdGhlIHN5c3RlbSBsb29rcyB1bmRlciBmb3VyIGNvbW1vbiAKKyAgICAgICAgbG9vayBhbmQgZmVlbHM6IDxBIEhSRUY9IiNXaW5kb3dzIj5XaW5kb3dzPC9BPiwgPEEgSFJFRj0iI01ldGFsIj5NZXRhbDwvQT4sIAorICAgICAgICA8QSBIUkVGPSIjTWFjIj5NYWMgT1NYIChhcXVhKTwvQT4sIGFuZCA8QSBIUkVGPSIjTW90aWYiPk1vdGlmPC9BPi48L1A+CisgICAgICA8UD48Qj48YSBuYW1lPSJXaW5kb3dzIj5XaW5kb3dzPC9BPjwvQj48L1A+CisgICAgICA8UD48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl93aW5kb3dzLmdpZiIgV0lEVEg9IjYwMCIgSEVJR0hUPSI0NDQiPjwvUD4KKyAgICAgIDxQPjxCPjxhIG5hbWU9Ik1ldGFsIj5NZXRhbDwvQT48L0I+PC9QPgorICAgICAgPFA+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9sYWZfbWV0YWwuZ2lmIiBXSURUSD0iNjAwIiBIRUlHSFQ9IjQ0NCI+PC9QPgorICAgICAgPFA+PEI+PGEgbmFtZT0iTWFjIj5NYWMgT1NYIChhcXVhKTwvQT48L0I+PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+PEI+PGEgbmFtZT0iTW90aWYiPk1vdGlmPC9BPjwvQj48L1A+CisgICAgICA8UD48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tb3RpZi5naWYiIFdJRFRIPSI2MDAiIEhFSUdIVD0iNDQ0Ij48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvbWVudS5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvbWVudS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWM0YzQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9tZW51Lmh0bWwKQEAgLTAsMCArMSwyNTcgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciAtIE1lbnUgSXRlbXM8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgyIEFMSUdOPSJDRU5URVIiPlJCIE1hbmFnZXIgLSBNZW51IEl0ZW1zPC9IMj4KKyAgICAgIDxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMiI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj4gCisgICAgICAgICAgICA8UD48Qj5UaGUgRmlsZSBNZW51PC9CPjwvUD4KKyAgICAgICAgICA8L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGUuZ2lmIiBXSURUSD0iMjU4IiBIRUlHSFQ9IjIxOSIgVlNQQUNFPSI1IiBIU1BBQ0U9IjUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5OZXcgUmVzb3VyY2UgQnVuZGxlLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkNyZWF0ZSBhIG5ldyByZXNvdXJjZSBidW5kbGUuIFlvdSB3aWxsIG5lZWQgdG8gc2VsZWN0IHRoZSBiYXNlIGNsYXNzIAorICAgICAgICAgICAgbmFtZSBmb3IgdGhpcyBidW5kbGUuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPk9wZW4gUmVzb3VyY2UgQnVuZGxlLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPlNlbGVjdCBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBmaWxlIHN5c2V0ZW0uIFRoZSBidW5kbGUgc2hvdWxkIAorICAgICAgICAgICAgaGF2ZSBiZWVuIG9uZSBjcmVhdGVkIGJ5IFJCIE1hbmFnZXIsIG90aGVyd2lzZSB1c2UgdGhlIE1lcmdlIG9wdGlvbi48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+U2F2ZSBSZXNvdXJjZSBCdW5kbGU8L0k+PC9URD4KKyAgICAgICAgICA8VEQ+U2F2ZSB0aGUgYnVuZGxlIHRvIHRoZSBmaWxlIHN5c3RlbS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+U2F2ZSBSZXNvdXJjZSBCdW5kbGUgQXMuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+U2F2ZSB0aGUgcmVzb3VyY2UgYnVuZGxlIGluIGEgc2VsZWN0ZWQgbG9jYXRpb24gd2l0aGluIHRoZSBmaWxlIAorICAgICAgICAgICAgc3lzdGVtLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9pbXBvcnQuZ2lmIiBXSURUSD0iNDU0IiBIRUlHSFQ9IjIxOSIgVlNQQUNFPSI1IiBIU1BBQ0U9IjUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST48Qj5NZXJnZSBUbyBSZXNvdXJjZSBCdW5kbGU8L0I+PC9JPjwvVEQ+CisgICAgICAgICAgPFREPkltcG9ydCByZXNvdXJjZSBidW5kbGVzIGZyb20gZGlmZmVyZW50IGZvcm1hdHMgYW5kIG1lcmdlIHRoZW0gd2l0aCAKKyAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgb3BlbiByZXNvdXJjZSBidW5kbGUuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxJTUcgU1JDPSJpbWFnZXMvYXJyb3dfYnVsbGV0LmdpZiIgV0lEVEg9IjEyIiBIRUlHSFQ9IjEwIj5TaW1wbGUgCisgICAgICAgICAgICBSZXNvdXJjZSBCdW5kbGVzLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkltcG9ydCBmcm9tIG90aGVyIHJlc291cmNlIGJ1bmRsZXMgbWFkZSB1cCBvZiAucHJvcGVydGllcyB0ZXh0IGZpbGVzIAorICAgICAgICAgICAgY3JlYXRlZCBieSBSQiBNYW5hZ2VyIG9yIG5vdC48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PElNRyBTUkM9ImltYWdlcy9hcnJvd19idWxsZXQuZ2lmIiBXSURUSD0iMTIiIEhFSUdIVD0iMTAiPlRNWCAKKyAgICAgICAgICAgIERvY3VtZW50cy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5JbXBvcnQgZnJvbSBYTUwgZG9jdW1lbnRzIHRoYXQgY29uZm9ybSB0byB0aGUgVE1YIHNwZWNpZmljYXRpb24gCisgICAgICAgICAgICBjcmVhdGVkIGJ5IHRoZSBMSVNBIGdyb3VwLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9leHBvcnQuZ2lmIiBXSURUSD0iNDM5IiBIRUlHSFQ9IjIxOSIgVlNQQUNFPSI1IiBIU1BBQ0U9IjUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST48Qj5FeHBvcnQgUmVzb3VyY2UgQnVuZGxlczwvQj48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+U2F2ZSB0aGUgdHJhbnNsYXRpb25zIGluIG90aGVyIGZvcm1hdHMuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxJTUcgU1JDPSJpbWFnZXMvYXJyb3dfYnVsbGV0LmdpZiIgV0lEVEg9IjEyIiBIRUlHSFQ9IjEwIj5Db21waWxhYmxlIAorICAgICAgICAgICAgSmF2YSBGaWxlcy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5FeHBvcnQgdG8gY29tcGlsYWJsZSBqYXZhIGNsYXNzIGZpbGVzIHRoYXQgZXh0ZW5kIHRoZSBMaXN0UmVzb3VyY2VCdW5kbGUgCisgICAgICAgICAgICBjbGFzcy4gPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxJTUcgU1JDPSJpbWFnZXMvYXJyb3dfYnVsbGV0LmdpZiIgV0lEVEg9IjEyIiBIRUlHSFQ9IjEwIj5NaW5pbWFsIAorICAgICAgICAgICAgUHJvcGVydGllcyBGaWxlcy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5FeHBvcnQgdG8gLnByb3BlcnRpZXMgdGV4dCBmaWxlcyBqdXN0IGFzIGluIHRoZSBTYXZlIG9wdGlvbiwgZXhjZXB0IAorICAgICAgICAgICAgdGhhdCB0aGVzZSBmaWxlcyB3aWxsIGJlIHN0cmlwcGVkIG9mIGFsbCB1bm5lY2Vzc2FyeSBtZXRhIGRhdGEuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxJTUcgU1JDPSJpbWFnZXMvYXJyb3dfYnVsbGV0LmdpZiIgV0lEVEg9IjEyIiBIRUlHSFQ9IjEwIj5UTVggCisgICAgICAgICAgICBEb2N1bWVudHMuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+RXhwb3J0IHRvIFhNTCBkb2N1bWVudHMgdGhhdCBjb25mb3JtIHRvIHRoZSBUTVggc3BlY2lmaWNhdGlvbiBjcmVhdGVkIAorICAgICAgICAgICAgYnkgdGhlIExJU0EgZ3JvdXAuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjE1IiBIRUlHSFQ9IjE1Ij48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PEI+VGhlIE9wdGlvbnMgTWVudTwvQj48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9tZW51X29wdGlvbnMuZ2lmIiBXSURUSD0iMjExIiBIRUlHSFQ9IjExMSIgVlNQQUNFPSI1IiBIU1BBQ0U9IjUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5BZGQgTmV3IEVudHJ5Li4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkNyZWF0ZSBhIG5ldyByZXNvdXJjZSBmb3IgdGhlIGVudGlyZSByZXNvdXJjZSBidW5kbGUuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPkFkZCBOZXcgR3JvdXAuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+Q3JlYXRlIGEgbmV3IHJlc291cmNlIGdyb3VwIGZvciB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+QWRkIE5ldyBSZXNvdXJjZSBGaWxlLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkNyZWF0ZSBhIG5ldyByZXNvdXJjZSBmaWxlIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlLiBPcHRpb25hbGx5IHNlbGVjdCAKKyAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIHBvcHVsYXRlIHRoaXMgZmlsZSB3aXRoIGN1cnJlbnRseSBkZWZpbmVkIHJlc291cmNlcy48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+UHJlZmVyZW5jZXMuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+QnJpbmcgdXAgdGhlIHByZWZlcmVuY2VzIGRpYWxvZyBib3guPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjE1IiBIRUlHSFQ9IjE1Ij48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PEI+VGhlIEhlbHAgTWVudTwvQj48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9tZW51X2hlbHAuZ2lmIiBXSURUSD0iMzUzIiBIRUlHSFQ9IjQ2IiBWU1BBQ0U9IjUiIEhTUEFDRT0iNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPkFib3V0IFJlc291cmNlIEJ1bmRsZSBNYW5hZ2VyLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkJyaW5ncyB1cCBhIGRpYWxvZyBib3ggZGlzcGxheWluZyB0aGUgdmVyc2lvbiBvZiBSQiBNYW5hZ2VyIGFuZCAKKyAgICAgICAgICAgIG90aGVyIGluZm9ybWF0aW9uLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIxNSIgSEVJR0hUPSIxNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxCPlRoZSBSZXNvdXJjZSBGaWxlIFBvcHVwIE1lbnU8L0I+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9wb3B1cF90cmVlLmdpZiIgV0lEVEg9IjY3MSIgSEVJR0hUPSI1NDMiIFZTUEFDRT0iNSIgSFNQQUNFPSI1Ij48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PEI+UmVzb3VyY2UgRmlsZSBQb3B1cCBNZW51PC9CPjwvST48L1REPgorICAgICAgICAgIDxURD5Qb3BzIHVwIGZyb20gYW4gaW5kaXZpZHVhbCByZXNvdXJjZSBmaWxlLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5TYXZlIFJlc291cmNlIEZpbGU8L0k+PC9URD4KKyAgICAgICAgICA8VEQ+U2F2ZSBvbmx5IHRoZSBzZWxlY3RlZCByZXNvdXJjZSBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+SGlkZSBSZXNvdXJjZSBGaWxlPC9JPjwvVEQ+CisgICAgICAgICAgPFREPlJlbW92ZSB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUgdHJlZS4gCisgICAgICAgICAgICBBbGwgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIGJ1bmRsZSB3aWxsIG5vdCBhZmZlY3QgdGhpcyBmaWxlLiBUaGlzIHdpbGwgCisgICAgICAgICAgICBhbHNvIHJlbW92ZSBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIHNpbmNlIGxhc3Qgc2F2aW5nIGl0LjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5EZWxldGUgUmVzb3VyY2UgRmlsZTwvST48L1REPgorICAgICAgICAgIDxURD5JZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbGxvd3MsIGRlbGV0ZXMgdGhlIHJlc291cmNlIGZpbGUgZnJvbSB0aGUgCisgICAgICAgICAgICBmaWxlIHN5c3RlbS4gVGhpcyBpcyBhIHBlcm1hbmVudCBjaGFuZ2UgYW5kIGNhbiBub3QgYmUgdW5kb25lLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICA8L1RBQkxFPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPFA+Jm5ic3A7PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3NjYW5maWxlLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9zY2FuZmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMWIzMTUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9zY2FuZmlsZS5odG1sCkBAIC0wLDAgKzEsMTk1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCUmVwb3J0ZXIgU2NhbiBGaWxlPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6ICB1cmwoaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ0dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Imxvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Im1lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0idHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InNjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMSBBTElHTj0iQ0VOVEVSIj5SQlJlcG9ydGVyIFNjYW4gWE1MIENvbmZpZ3VyYXRpb24gRmlsZTwvSDE+CisgICAgICA8UD48Qj5JbnRyb2R1Y3Rpb248L0I+PC9QPgorICAgICAgPFA+VGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgUkJSZXBvcnRlciBzY2FucyBpcyBhIHRleHQgZmlsZSBzdG9yZWQgaW4gCisgICAgICAgIFhNTC4gVGhlIGRlc2lnbiBvbiB0aGUgZm9ybWF0IGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMga2VwdCBzaW1wbGUgCisgICAgICAgIGFuZCBzbyB0aGUgZ2VuZXJhbCBhcHBsaWNhdGlvbiBvZiB0aGUgc2Nhbm5lciBpcyBub3QgbWVhbnQgZm9yIGNvbXBsaWNhdGVkIAorICAgICAgICBhbmFseXNpcy4gVGhlIGRlc2lnbiB3b3JrcyBhcm91bmQgdGhyZWUgdHlwZXMgb2YgcnVsZXM6IERpcmVjdG9yeSBSdWxlcywgCisgICAgICAgIEZpbGUgUnVsZXMsIGFuZCBQYXJzZSBSdWxlcy4gRWFjaCBvZiB0aGVzZSB3aWxsIGJlIGV4cGxhaW5lZCBiZWxvdy4gRmlyc3QsIAorICAgICAgICBoZXJlIGlzIGFuIGV4YW1wbGUgZmlsZSBmb3IgcmVmZXJlbmNlLiBUaGlzIGZpbGUgaXMgdGhlIGNvbmZpZ3VyYXRpb24gCisgICAgICAgIGZpbGUgdXNlZCB0byBzY2FuIHRoZSByZXNvdXJjZSBidW5kbGUgYXNzb2NpYXRlZCB3aXRoIFJCTWFuYWdlci48L1A+CisgICAgICA8UD48Qj5TYW1wbGUgU2NhbiBGaWxlIDwvQj4ocmJtYW5hZ2VyX3NjYW4ueG1sPEI+KTwvQj48L1A+CisgICAgICA8QkxPQ0tRVU9URT48Q09ERT4KKyAgICAgICAgPFBSRT4KKyZsdDs/eG1sIHZlcnNpb249IjEuMCIgPz4KKyZsdDtSQkZJTEVTQ0FOTkVSIE5BTUU9IlJCTWFuYWdlciBTY2FubmVyIiBGSUxFTkFNRT0icmJtYW5hZ2VyX3NjYW5uZXIueG1sIj4KKwkmbHQ7RklMRVJVTEVTPgorCQkmbHQ7IS0tICBGaWxlUnVsZXMgY2FuIGhhdmUgYXR0cmlidXRlcyBzdGFydHNfd2l0aCwgZW5kc193aXRoLCBhbmQgY29udGFpbnMgLS0+CisJCSZsdDtGSUxFUlVMRSBOQU1FPSJKYXZhIEZpbGUiIEVORFNfV0lUSD0iLmphdmEiIC8+CisJCSZsdDtGSUxFUlVMRSBOQU1FPSJYU0wgRmlsZSIgRU5EU19XSVRIPSIueHNsIiAvPgorCSZsdDsvRklMRVJVTEVTPgorCSZsdDtQQVJTRVJVTEVTPgorCQkmbHQ7IS0tICBQYXJzZVJ1bGVzIGNhbiBoYXZlIGF0dHJpYnV0ZXMgZm9sbG93cyBhbmQgcHJlY2VkZXMgLS0+IAorCQkmbHQ7UEFSU0VSVUxFIE5BTUU9IkphdmEgc3RhdGljIHJlc291cmNlIiBGT0xMT1dTPSJSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oJmFtcDtxdW90OyIgUFJFQ0VERVM9IiZhbXA7cXVvdDsiIC8+IAorCSZsdDsvUEFSU0VSVUxFUz4KKwkmbHQ7U0NBTj4KKwkJJmx0O0RJUkVDVE9SWSBMT0NBVElPTj0iXEM6XERldmVsb3BtZW50XFJCTWFuYWdlclxTb3VyY2UiIFJFQ1VSU0VfRElSRUNUT1JJRVM9InRydWUiPiAKKwkJCSZsdDtSVUxFUz4KKwkJCQkmbHQ7QVBQTFlGSUxFUlVMRSBOQU1FPSJKYXZhIEZpbGUiPgorCQkJCQkmbHQ7QVBQTFlQQVJTRVJVTEUgTkFNRT0iSmF2YSBzdGF0aWMgcmVzb3VyY2UiIC8+CisJCQkJJmx0Oy9BUFBMWUZJTEVSVUxFPgorCQkJJmx0Oy9SVUxFUz4KKwkJJmx0Oy9ESVJFQ1RPUlk+CisJJmx0Oy9TQ0FOPgorJmx0Oy9SQkZJTEVTQ0FOTkVSPgorICAgICAgICA8L1BSRT4KKyAgICAgICAgPC9DT0RFPjwvQkxPQ0tRVU9URT4KKzxQPjxCPkRldGFpbHM8L0I+PC9QPgorICAgICAgPFA+VGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgWE1MIGZpbGUgaXMgbmFtZWQgJ1JCRklMRVNDQU5ORVInLiBUaGlzIHJvb3QgCisgICAgICAgIGVsZW1lbnQgaGFzIHR3byBvcHRpb25hbCBhdHRyaWJ1dGVzIGZvciBuYW1pbmcgdGhlIHNjYW4gZmlsZSBpbiBhIGh1bWFuIAorICAgICAgICByZWFkYWJsZSBtYW5uZXIgYW5kIHNwZWNpZnlpbmcgdGhlIGZpbGUgbmFtZS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgZm9yIAorICAgICAgICB0aGUgZGV2ZWxvcGVycyByZWZlcmVuY2U7IHRoZXkgbWVhbiBub3RoaW5nIHRvIFJCUmVwb3J0ZXIuIEJlbmVhdGggdGhlIAorICAgICAgICByb290IGVsZW1lbnQgYXJlIHRocmVlIHJlcXVpcmVkIGVsZW1lbnRzICdGSUxFUlVMRVMnLCAnUEFSU0VSVUxFUycgYW5kIAorICAgICAgICAnU0NBTicuIDwvUD4KKyAgICAgIDxQPkJlbmVhdGggdGhlIEZJTEVSVUxFUyBlbGVtZW50IGFyZSBmb3VuZCBGSUxFUlVMRSBlbGVtZW50cy4gQW55IG51bWJlciAKKyAgICAgICAgb2YgdGhlc2UgcnVsZXMgY2FuIGJlIHNwZWNpZmllZCwgdGhvdWdoIGVhY2ggbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUgYXMgCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgZWxlbWVudCdzIE5BTUUgYXR0cmlidXRlLiBBbG9uZyB3aXRoIHRoaXMgbmFtZSBhdHRyaWJ1dGUsIAorICAgICAgICB0aGUgYXR0cmlidXRlcyBTVEFSVFNfV0lUSCwgRU5EU19XSVRILCBhbmQgQ09OVEFJTlMgbWF5IGJlIG9wdGlvbmFsbHkgCisgICAgICAgIHNwZWNpZmllZC4gVGhlc2UgYXJlIHRoZSBydWxlcyBhcHBsaWVkIHRvIGVhY2ggZmlsZSBpbiBhIGRpcmVjdG9yeSB0byAKKyAgICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZXkgd2lsbCBiZSBzY2FubmVkLiBUaGUgYXR0cmlidXRlIHJ1bGVzIGFyZSAKKyAgICAgICAgYXBwbGllZCB0byB0aGUgZmlsZSBuYW1lcyBvZiBlYWNoIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBhbmQgaWYgZWFjaCBpcyAKKyAgICAgICAgZm91bmQgdG8gYmUgdHJ1ZSwgdGhhdCBmaWxlIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IHRoZSBwYXJzZSBydWxlcy48L1A+CisgICAgICA8UD5CZW5lYXRoIHRoZSBQQVJTRVJVTEVTIGVsZW1lbnQgYXJlIGZvdW5kIFBBUlNFUlVMRSBlbGVtZW50cy4gQW55IG51bWJlciAKKyAgICAgICAgb2YgdGhlc2UgcnVsZXMgY2FuIGJlIHNwZWNpZmllZCwgdGhvdWdoIGVhY2ggbXVzdCBoYXZlIGEgdW5pcXVlcyBuYW1lIAorICAgICAgICBhcyBzcGVjaWZpZWRuIGluIHRoZSBlbGVtZW50J3MgTkFNRSBhdHRyaW51dGUuIEFsb25nIHdpdGggdGhpcyBuYW1lIGF0dHJpYnV0ZSwgCisgICAgICAgIHRoZSBhdHRyaWJ1dGVzIEZPTExPV1MgYW5kIFBSRUNFREVTIG1heSBvcHRpb25hbGx5IGJlIHNwZWNpZmllZC4gVGhlc2UgCisgICAgICAgIGFyZSB0aGUgcnVsZXMgYXBwbGllZCB0byBlYWNoIGxpbmUgb2YgdGV4dCBpbiBhIHNlbGVjdGVkIGZpbGUgdG8gZGV0ZXJtaW5lIAorICAgICAgICBpZiB0aGF0IGxpbmUgb2YgdGV4dCBjb250YWlucyBvbmUgb3IgbW9yZSByZXNvdXJjZSBrZXlzLjwvUD4KKyAgICAgIDxQPkJlbmVhdGggdGhlIFNDQU4gZWxlbWVudCBhcmUgZm91bmQgRElSRUNUT1JZIGVsZW1lbnRzLiBBbnkgbnVtYmVyIG9mIAorICAgICAgICB0aGVzZSBlbGVtZW50cyBjYW4gYmUgc3BlY2lmaWVkLiBUaGUgcmVxdWlyZWQgTE9DQVRJT04gYXR0cmlidXRlIHNwZWNpZmllcyAKKyAgICAgICAgaW4gYSBtYWNoaW5lIGRlcGVuZGVudCBtYW5uZXIgdGhlIGxvY2F0aW9uIG9mIGEgZGlyZWN0b3J5IGZvciB3aGljaCB0aGUgCisgICAgICAgIGZpbGVzIGFyZSB0byBiZSBzY2FubmVkIGZvciByZXNvdXJjZSBidW5kbGVzLiBBbiBvcHRpb25hbCBSRUNVUlNFX0RJUkVDVE9SSUVTIAorICAgICAgICBhdHRyaWJ1dGUgbWF5IGJlIHNwZWNpZmllZC4gSWYgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byAndHJ1ZScsIAorICAgICAgICB0aGVuIGFsbCBkaXJlY3RvcmllcyBiZW5lYXRoIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFyZSBhbHNvIHNjYW5uZWQuPC9QPgorICAgICAgPFA+QmVuZWF0aCBlYWNoIERJUkVDVE9SWSBlbGVtZW50LCBleGFjdGx5IG9uZSBSVUxFUyBlbGVtZW50cyBjYW4gYmUgc3BlY2lmaWVkLkJlbmVhdGggCisgICAgICAgIHRoaXMgZWxlbWVudCwgYW55IG51bWJlciBvZiBBUFBMWSBGSUxFIFJVTEUgZWxlbWVudHMgbWF5IGJlIHNwZWNpZmllZC4gCisgICAgICAgIFRoZSByZXF1aXJlZCBOQU1FIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggb2YgdGhlIGZpbGUgcnVsZXMgZGVmaW5lZCAKKyAgICAgICAgcHJldmlvdXNseSBhcmUgdG8gYmUgYXBwbGllZC4gQmVuZWF0aCB0aGVzZSBlbGVtZW50IGFueSBudW1iZXIgb2YgQVBQTFlQQVJTRVJVTEUgCisgICAgICAgIGVsZW1lbnRzIG1heSBiZSBzcGVjaWZpZWQuIFRoZSByZXF1aXJlZCBOQU1FIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggCisgICAgICAgIG9mIHRoZSBwYXJzZSBydWxlcyBkZWZpbmVkIHByZXZpb3VzbHkgYXJlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGZpbGVzIGFjY2VwdGVkIAorICAgICAgICBieSB0aGUgcGFyZW50IGZpbGUgcnVsZS48L1A+CisgICAgICA8UD48Qj5UaGUgRXhhbXBsZSBGaWxlIEV4cGxhaW5lZDwvQj48L1A+CisgICAgICA8UD5HaXZlbiB0aGUgZGV0YWlscyBvZiB0aGUgZmlsZSBzdHJ1Y3R1cmUsIHdlIGNhbiBub3cgZXhhbWluZSBob3cgdGhlIGV4YW1wbGUgCisgICAgICAgIGZpbGUgc3BlY2lmaWVzIHdoaWNoIGZpbGVzIHRvIHNjYW4sIGFuZCB0aGVuIGhvdyBpdCBzcGVjaWZpZXMgaG93IHRvIGZpbmQgCisgICAgICAgIHRoZSByZXNvdXJjZSBrZXlzIGNvbnRhaW5lZCBpbiB0aG9zZSBmaWxlcy48L1A+CisgICAgICA8UD5SQlJlcG9ydGVyIGZpcnN0IGJlZ2lucyBieSBnb2luZyB0aHJvdWdoIGVhY2ggb2YgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZC4gCisgICAgICAgIEluIHRoZSBleGFtcGxlIGZpbGUgY2FzZSwgdGhlcmUgaXMgb25seSBvbmUgZGlyZWN0b3J5LiBJdCB0aGVuIGdvZXMgdGhyb3VnaCAKKyAgICAgICAgZWFjaCBvZiB0aGUgZmlsZXMgY29udGFpbmVkIGluIHRoYXQgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgbG9va2luZyAKKyAgICAgICAgZm9yIGZpbGVzIHRoYXQgcGFzcyB0aGUgJ0phdmEgRmlsZScgZmlsZSB0ZXN0LiBUaGUgJ0phdmEgRmlsZScgdGVzdCBzaW1wbHkgCisgICAgICAgIGNoZWNrcyB0aGUgZmlsZSBuYW1lIHRvIHNlZSBpZiBpdCBlbmRzIGluIHRoZSBleHRlbnNpb24gJy5qYXZhJy4gSWYgdGhlIAorICAgICAgICBmaWxlIGhhcyBzdWNoIGFuIGV4dGVuc2lvbiB0aGUgcGFyc2UgcnVsZSAnSmF2YSBzdGF0aWMgcmVzb3VyY2UnIGlzIGFwcGxpZWQgCisgICAgICAgIHRvIGV2ZXJ5IGxpbmUgb2YgdGV4dCB3aXRoaW4gdGhhdCBmaWxlLjwvUD4KKyAgICAgIDxQPlRodXMgaWYgdGhlIGZvbGxvd2luZyBmaWxlLCBuYW1lZCBTYW1wbGUuamF2YSwgd2VyZSB0byBiZSBmb3VuZCBpbiB0aGUgCisgICAgICAgIGRpcmVjdG9yeS4gVGhlIHR3byByZXNvdXJjZSBrZXlzICdIZWxsbycgYW5kICdXb3JsZCcgd291bGQgYmUgZm91bmQuPC9QPgorICAgICAgICA8YmxvY2txdW90ZT48Y29kZT4KKyAgICAgICAgICA8cHJlPgorcHVibGljIGNsYXNzIFNhbXBsZSB7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworCQlTeXN0ZW0ub3V0LnByaW50bG4oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCZxdW90O0hlbGxvJnF1b3Q7KSArICZxdW90OyAmcXVvdDsgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oJnF1b3RXb3JsZCZxdW90OykpOworCX0KK30KKzwvcHJlPgorICAgICAgICAgIDwvY29kZT48L2Jsb2NrcXVvdGU+CisKKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5UZW1wbGF0ZTwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4KKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9IMz4KKyAgICAgIDxQPlJCIE1hbmFnZXIgd2lsbCBydW4gb24gYW55IHBsYXRmb3JtIHN1cHBvcnRpbmcgSmF2YSAxLjQgb3IgaGlnaGVyLiBJdCAKKyAgICAgICAgaGFzIGJlZW4gdGVzdGVkIG9uIFdpbmRvd3MgTlQsIFdpbmRvd3MgMjAwMCwgTGludXgsIGFuZCBNYWMgT1MgWC4gSXQgaXMgCisgICAgICAgIHJlY29tbWVuZGVkIHRoYXQgdGhlIG1hY2hpbmUgcnVubmluZyBSQiBNYW5hZ2VyIGhhdmUgYXQgbGVhc3QgNjQgTUIgb2YgCisgICAgICAgIG1lbW9yeS48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvaW5kZXguaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4MWU2NAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNTkgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciBUdXRvcmlhbDwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0ic3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+IAorICAgICAgICA8SDI+U3RlcC1ieS1zdGVwIFR1dG9yaWFsPC9IMj4KKyAgICAgICAgPFAgQUxJR049IkNFTlRFUiI+VGhpcyB0dXRvcmlhbCB0YWtlcyB5b3Ugc3RlcCBieSBzdGVwIHRocm91Z2ggdGhlIHByb2Nlc3MgCisgICAgICAgICAgb2YgY3JlYXRpbmcgYSByZXNvdXJjZSBidW5kbGUgYW5kIG1hbmFnaW5nIHRoZSB0cmFuc2xhdGlvbnMgeW91IG5lZWQgCisgICAgICAgICAgZm9yIHlvdXIgYXBwbGljYXRpb24gb3Igd2ViIGJhc2VkIGludGVyZmFjZXMuIFlvdSBtYXkgYmVnaW4gd2l0aCB0aGUgCisgICAgICAgICAgZmlyc3Qgc3RlcCwgb3Igc2VsZWN0IGZyb20gYW55IG9mIHRoZSBzdGVwcyBsaXN0ZWQgYmVsb3cuIFRoZSB0dXRvcmlhbCAKKyAgICAgICAgICBpcyBub3QgbWVhbnQgdG8gZ2l2ZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgZmVhdHVyZXMgb2YgUkIgTWFuYWdlciwgCisgICAgICAgICAgYnV0IGl0IHdpbGwgaGVscCB5b3UgZmFtaWxpYXJpemUgd2l0aCBhbGwgb2YgdGhlIGJhc2ljIGZlYXR1cmVzLjwvUD4KKyAgICAgICAgPEgzIEFMSUdOPSJMRUZUIj4gCisgICAgICAgICAgPFVMPgorICAgICAgICAgICAgPExJPgorICAgICAgICAgICAgICA8SDQ+U3RlcCAxLiA8QSBIUkVGPSJzdGVwMS5odG1sIj5TZXR0aW5nIFlvdXIgUGVyc29uYWwgUHJlZmVuY2VzPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPgorICAgICAgICAgICAgICA8SDQ+U3RlcCAyLiA8QSBIUkVGPSJzdGVwMi5odG1sIj5DcmVhdGluZyBhIE5ldyBSZXNvdXJjZSBCdW5kbGU8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+CisgICAgICAgICAgICAgIDxIND5TdGVwIDMuIDxBIEhSRUY9InN0ZXAzLmh0bWwiPkNyZWF0aW5nIEdyb3VwcyB3aXRoaW4gdGhlIEJ1bmRsZTwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4KKyAgICAgICAgICAgICAgPEg0PlN0ZXAgNC4gPEEgSFJFRj0ic3RlcDQuaHRtbCI+UG9wdWxhdGluZyB0aGUgQnVuZGxlIHdpdGggUmVzb3VyY2VzPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPgorICAgICAgICAgICAgICA8SDQ+U3RlcCA1LiA8QSBIUkVGPSJzdGVwNS5odG1sIj5BZGRpbmcgUmVzb3VyY2UgRmlsZXMgZm9yIE5ldyBMYW5ndWFnZXM8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+CisgICAgICAgICAgICAgIDxIND5TdGVwIDYuIDxBIEhSRUY9InN0ZXA2Lmh0bWwiPlNhdmluZyB0aGUgUmVzdWx0czwvQT4gPC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgPC9VTD4KKyAgICAgICAgPC9IMz4KKyAgICAgICAgPEg0PjxBIEhSRUY9InN0ZXAxLmh0bWwiPkdvIHRvIFN0ZXAgMTwvQT48L0g0PgorICAgICAgPC9ESVY+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKzwhLS0KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjIiPgorICA8VFI+CisgICAgPFREIFdJRFRIPSIyMDAiIEJHQ09MT1I9IiNDQ0NDRkYiPiZuYnNwOzwvVEQ+CisgICAgPFREPgorICAgICAgPERJViBBTElHTj0iQ0VOVEVSIj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFdJRFRIPSIxNzUiIEhFSUdIVD0iNTAiPjwvRElWPgorICAgIDwvVEQ+CisgIDwvVFI+CisgIDxUUiBWQUxJR049IlRPUCI+IAorICAgIDxURCBXSURUSD0iMjAwIiBCR0NPTE9SPSIjQ0NDQ0ZGIj4gCisgICAgICA8UD48QSBIUkVGPSJpbmRleC5odG1sIj5SQk1hbmFnZXI8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5SQlJlcG9ydGVyPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L1A+CisgICAgICA8UD5Ub3BpY3M8L1A+CisgICAgICA8VUw+CisgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5TdGVwLWJ5LXN0ZXAgVHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgPExJPjxBIEhSRUY9InN0ZXAxLmh0bWwiPkNoYW5naW5nIFByZWZlbmNlczwvQT48L0xJPgorICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlIEZlYXR1cmVzPC9BPjwvTEk+CisgICAgICA8L1VMPgorICAgIDwvVEQ+CisgICAgPFREPjwvVEQ+CisgIDwvVFI+Cis8L1RBQkxFPgorLS0+Cis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMS5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc4M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbApAQCAtMCwwICsxLDE2OCBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsIC0gUHJlZmVyZW5jZXM8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3ZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InN0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+U2V0dGluZyBZb3VyIFBlcnNvbmFsIFByZWZlcmVuY2VzPC9IMz4KKyAgICAgIDxQPjxCPkdldHRpbmcgU3RhcnRlZDwvQj48L1A+CisgICAgICA8UD5CZWZvcmUgeW91IGNhbiBkbyBhbnl0aGluZyB3aXRoIHRoZSBwcm9ncmFtLCBvZiBjb3Vyc2UsIHlvdSBoYXZlIHRvIGdldCAKKyAgICAgICAgaXQgcnVubmluZy4gUkIgTWFuYWdlciBpcyBwdXJlbHkgYSBKYXZhIGFwcGxpY2F0aW9uLiBUaGUgZG93bmxvYWQgZG9lcyAKKyAgICAgICAgbm90IGNvbWUgd2l0aCBhIEphdmEgcnVudGltZSBlbnZpcm9ubWVudC4gSW4gb3JkZXIgdG8gdXNlIFJCTWFuYWdlciwgeW91IAorICAgICAgICB3aWxsIG5lZWQgdG8gaGF2YSBhIEphdmEgcnVudGltZSBlbnZpcm9ubWVudCBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lLiAKKyAgICAgICAgVGhlIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZSB0byBtb3N0IGNvbXB1dGluZyBwbGF0Zm9ybXMgYXQgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbSI+U3VuJ3MgCisgICAgICAgIGludGVybmV0IHNpdGU8L0E+LiBSQiBNYW5hZ2VyIGhhcyBiZWVuIHRlc3RlZCBmb3IgSmF2YSB2ZXJzaW9ucyAxLjIuMiAKKyAgICAgICAgYW5kIGhpZ2hlci4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIEphdmEgdmVyc2lvbiAxLjMgaWYgaXQgaXMgYXZhaWxhYmxlIAorICAgICAgICBmb3IgeW91ciBzeXN0ZW0uPC9QPgorICAgICAgPFA+VG8gcnVuIHRoZSBwcm9ncmFtIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgZmlyc3QgZ28gdG8gdGhlIFJCTWFuYWdlciBkaXJlY3RvcnkgCisgICAgICAgIG9uIHlvdXIgc3lzdGVtLCB0aGVuIGVudGVyOjwvUD4KKyAgICAgIDxQPjxDT0RFPmphdmEgLWNsYXNzcGF0aCAuL2xpYi9SQk1hbmFnZXIuamFyOy4vbGliL3hlcmNlcy5qYXIgY29tLmlibS5yYm0uUkJNYW5hZ2VyPC9DT0RFPjwvUD4KKyAgICAgIDxQPkFsdGVybmF0aXZlbHksIFdpbmRvd3MgdXNlcnMgY2FuIHVzZSB0aGUgYmF0Y2ggZmlsZSwgUkJNYW5hZ2VyLmJhdCB0byAKKyAgICAgICAgYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy4gTGludXggYW5kIFVuaXggdXNlcnMgdGVuZCBub3QgdG8gbmVlZCB0aGVpciAKKyAgICAgICAgaGFuZHMgaGVsZCwgYW5kIGNhbiBwcm9iYWJseSBmaWd1cmUgb3V0IGhvdyB0byB3cml0ZSBhIHNpbXBsZSBzY3JpcHQgb3IgCisgICAgICAgIGFsaWFzIHRvIHJ1biB0aGUgYXBwbGljYXRpb24gd2l0aG91dCBoZWxwLiBNYWMgT1MgWCB1c2VycyBjYW4gcnVuIHRoZSAKKyAgICAgICAgcHJvZ3JhbSBmcm9tIHRoZSBUZXJtaW5hbCBhcHBsaWNhdGlvbiB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGxpbmUsIHN1YnN0aXR1dGluZyAKKyAgICAgICAgYSBjb2xvbiBmb3IgdGhlIHNlbWktY29sb24gaW4gdGhlIGNsYXNzcGF0aCBhcmd1bWVudC48L1A+CisgICAgICA8UD48Qj5UaGUgRGlzcGxheTwvQj48L1A+CisgICAgICA8UD5PbmNlIHlvdSBnZXQgdGhlIGFwcGxpY2F0aW9uIHJ1bm5pbmcsIHlvdSB3aWxsIGhvcGVmdWxseSBzZWUgc29tZXRoaW5nIAorICAgICAgICBsaWtlIHRoaXM6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9zY3JlZW4uZ2lmIj48L1A+CisgICAgICA8UD5UaGUgZGlzcGxheSBtYXkgZGlmZmVyIGJlY2F1c2Ugb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhcmlvdXMgSmF2YSBWaXJ0dWFsIAorICAgICAgICBNYWNoaW5lcyBhbmQgZGlmZmVyZW5jZXMgaW4gTG9vayBhbmQgRmVlbHMuIEF0IHRoZSB0b3AgaXMgYSBtZW51IGJhciBhbmQgCisgICAgICAgIGEgbG9nby4gQmVsb3cgdGhlIGxvZ28gYW5kIHRvIHRoZSBsZWZ0IGlzIGEgcGFuZSBpbiB3aGljaCBhbGwgb2YgdGhlIHZhcmlvdXMgCisgICAgICAgIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbGlzdGVkIGluIGEgdHJlZSB2aWV3LiBTaW5jZSBubyByZXNvdXJjZSBidW5kbGUgCisgICAgICAgIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGlzIHRyZWUgaXMgY3VycmVudGx5IGVtcHR5LiBUbyB0aGUgcmlnaHQgaXMgYSB0YWJiZWQgCisgICAgICAgIHBhbmUgaW4gd2hpY2ggdGhyZWUgdmlld3Mgd2lsbCBiZSBzaG93bi4gVGhlIHZpZXdzIHdpbGwgZWl0aGVyIHByZXNlbnQgCisgICAgICAgIGluZm9ybWF0aW9uIG9yIHByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciBlZGl0aW5nIHRoZSB2YXJpb3VzIGRhdGEgY29udGFpbmVkIAorICAgICAgICBhY3Jvc3MgeW91ciByZXNvdXJjZSBidW5kbGUuPC9QPgorICAgICAgPFA+PEI+Q3VzdG9taXppbmcgdGhlIEFwcGxpY2F0aW9uIGZvciBZb3U8L0I+PC9QPgorICAgICAgPFA+R28gdG8gdGhlIE9wdGlvbnMgbWVudSBhbmQgc2VsZWN0IFByZWZlcmVuY2VzLiBUaGUgZmlyc3QgdGltZSBhZnRlciBvcGVuaW5nIAorICAgICAgICB0aGUgYXBwbGljYXRpb24sIGl0IG1heSB0YWtlIGEgZmV3IHNlY29uZHMgdG8gZ2V0IHRvIHRoZSBwcmVmZXJlbmNlcyBhcyAKKyAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIGdldCBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgdmlydHVhbCBtYWNoaW5lLkEgZGlhbG9nIAorICAgICAgICBib3ggc2hvdWxkIGFwcGVhciB0aGF0IGxvb2tzIHNpbWlsYXIgdG8gdGhpczo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ByZWZlcmVuY2VzX2RpYWxvZy5naWYiIFdJRFRIPSI0MjkiIEhFSUdIVD0iMjY5Ij48L1A+CisgICAgICA8UD5UaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgdG8gY2hhbmdlIHRoZSB1c2VyIG5hbWUgdG8geW91ciBvd24gbmFtZS4gWW91IAorICAgICAgICB3aWxsIG9ubHkgaGF2ZSB0byBkbyB0aGlzIG9uY2UgdW5sZXNzIHNvbWVvbmUgZWxzZSB1c2VzIHRoaXMgYXBwbGljYXRpb24gCisgICAgICAgIGFuZCBjaGFuZ2VzIHRoZSBuYW1lLiBTZWNvbmQsIHlvdSBzaG91bGQgY2hhbmdlIHRoZSBsb29rIGFuZCBmZWVsIG9mIHRoZSAKKyAgICAgICAgYXBwbGljYXRpb24gdG8geW91ciBwcmVmZXJlbmNlLiBBbGwgb2YgdGhlIGxvb2sgYW5kIGZlZWxzIHRoYXQgeW91ciBKVk0gCisgICAgICAgIHN1cHBvcnRzIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIGRyb3AgZG93biBib3guIChOb3RlIHRoYXQgY2hhbmdlcyB3aWxsIAorICAgICAgICBub3QgdGFrZSBhZmZlY3QgdW50aWwgYWZ0ZXIgeW91IGFyZSBkb25lIGFuZCBoYXZlIHByZXNzZWQgdGhlIFVwZGF0ZSBidXR0b24pLjwvUD4KKyAgICAgIDxQPlRoZSBsYXN0IHRoaW5nIHRvIGNoYW5nZSBpcyB0aGUgbG9jYWxlIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0byB3b3JrIAorICAgICAgICB3aXRoIHRoaXMgYXBwbGljYXRpb24uIFdoZW4geW91IGRvd25sb2FkIFJCTWFuYWdlciwgaXQgaXMgc2V0IGJ5IGRlZmF1bHQgCisgICAgICAgIHRvIGRpc3BsYXkgaW4gVS5TLiBFbmdsaXNoLiBBcyBvZiB0aGlzIHdyaXRpbmcsIHlvdSBjYW4gdXNlIHRoZSBwcm9ncmFtIAorICAgICAgICBpbiBGaW5uaXNoLCBTd2VkaXNoLCBhbmQgR2VybWFuIGFzIHdlbGwuIFRocmVlIGxpc3RzIGNob2ljZXMgYXJlIHBvc3NpYmxlIAorICAgICAgICBmb3Igc2VsZWN0aW5nIGEgbG9jYWxlLiBUaGUgZmlyc3QsIGNhbGxlZCAnTWFjaGluZSBTdXBwb3J0ZWQnLCBsaXN0cyBhbGwgCisgICAgICAgIG9mIHRoZSBsb2NhbHMgc3VwcG9ydGVkIGJ5IHlvdXIgSlZNLiBUaGUgc2Vjb25kLCBjYWxsZWQgJ0RlZmluZWQgZm9yIFJCTWFuYWdlcicsIAorICAgICAgICBhbmFseXplcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciBSQk1hbmFnZXIgYW5kIGxldHMgeW91IHNlbGVjdCBmcm9tIHRoZSAKKyAgICAgICAgYXZhaWxhYmxlIHRyYW5zbGF0aW9uIGZpbGVzLiBUaGUgdGhpcmQgb3B0aW9uLCBjYWxsZWQgJ0lTTyBTdGFuZGFyZHMnLCAKKyAgICAgICAgbGlzdHMgYWxsIG9mIHRoZSBsYW5ndWFnZSBhbmQgY291bnRyeSAyLWxldHRlciBjb2RlcyBkZWZpbmVkIGJ5IHRoZSBJU08uIAorICAgICAgICBZb3UgbWF5IHNlbGVjdCBhbnkgb2YgdGhlIHRocmVlIG9wdGlvbnMgYnkgdXNlIG9mIHRoZSByYWRpbyBidXR0b24gb24gCisgICAgICAgIHRoZSBsZWZ0IGFuZCB0aGVuIHNlbGVjdCB0aGUgZW5jb2RpbmcgeW91IHdvdWxkIGxpa2UgdG8gdXNlLiBPZiBjb3Vyc2UgCisgICAgICAgIGlmIHRoZSBlbmNvZGluZyB5b3Ugc2VsZWN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgUkJNYW5hZ2VyLCB0aGUgdHJhbnNsYXRpb25zIAorICAgICAgICBpbiB0aGUgYmFzZSBjbGFzcyBvZiB0aGUgYnVuZGxlIHdpbGwgYmUgdXNlZCwgd2hpY2ggYXJlIGluIEVuZ2xpc2guIEFsc28gCisgICAgICAgIG5vdGUsIHRoYXQgdGhlIGJhc2UgY2xhc3MgbGFuZ3VhZ2UgbWF5IG5vdCBhcHBlYXIgaW4gdGhlICdEZWZpbmVkIGZvciAKKyAgICAgICAgUkJNYW5hZ2VyJyBzZWN0aW9uIGJlY2F1c2UgdGhlIGVuY29kaW5nIGlzIG5vdCBhbHdheXMgc3BlY2lmaWVkIGZvciB0aGF0IAorICAgICAgICBmaWxlLiA8L1A+CisgICAgICA8UD5XaGVuIHlvdSBhcmUgZG9uZSBtYWtpbmcgeW91ciBwZXJzb25hbGl6ZWQgc2VsZWN0aW9ucywgY2xpY2sgb24gdGhlIFVwZGF0ZSAKKyAgICAgICAgYnV0dG9uLiBUaGUgcHJlZmVyZW5jZXMgd2lsbCBiZSBzYXZlZCBpbiBhIGZpbGUgY2FsbGVkIHByZWZlcmVuY2VzLnByb3BlcnRpZXMgCisgICAgICAgIHN0b3JlZCBpbiB5b3VyIFJCTWFuYWdlciBkaXJlY3RvcnkuIFlvdSB3aWxsIG5vdCBuZWVkIHRvIG1ha2UgdGhlc2Ugc2VsZWN0aW9ucyAKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIHlvdSB3YW50IHRvIGNoYW5nZSB5b3VyIGRlZmF1bCBvcHRpb25zLjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gdGhlIFR1dG9yaWFsIE1lbnU8L0E+IC1vci0gPEEgSFJFRj0ic3RlcDIuaHRtbCI+Rm9yd2FyZCAKKyAgICAgICAgdG8gU3RlcCAyPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMi5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGJlYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDIuaHRtbApAQCAtMCwwICsxLDE0OCBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsIC0gQ3JlYXRpbmcgUmVzb3VyY2VzPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi92aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJzdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPlN0ZXAgMi4gQ3JlYXRpbmcgYSBOZXcgUmVzb3VyY2UgQnVuZGxlPC9IMz4KKyAgICAgIDxQPjxCPlRoaW5ncyB0byBDb25zaWRlcjwvQj48L1A+CisgICAgICA8UD5BIHJlc291cmNlIGJ1bmRsZSBpbiB0ZXJtcyBvZiB0aGlzIGFwcGxpY2F0aW9uIGlzIGEgZ3JvdXAgb2YgcHJvcGVydHkgCisgICAgICAgIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZSBjbGFzcyBuYW1lLiBGb3IgaW5zdGFuY2UsIHRoZSByZXNvdXJjZSBidW5kbGUgCisgICAgICAgIGZvciBSQiBNYW5hZ2VyIGluY2x1ZGVzIGZpbGVzOiA8Y29kZT5SQk1hbmFnZXIucHJvcGVydGllczwvQ09ERT4sIDxjb2RlPlJCTWFuYWdlcl9kZS5wcm9wZXJ0aWVzPC9DT0RFPiwgCisgICAgICAgIDxjb2RlPlJCTWFuZ2VyX2ZpLnByb3BlcnRpZXM8L0NPREU+LCBldGMuIEluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbSwgCisgICAgICAgIFJCIE1hbmFnZXIgd2lsbCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIGRhdGEgZnJvbSAKKyAgICAgICAgb3RoZXIgbGFuZ3VhZ2UgdHJhbnNsYXRpb25zIHNjaGVtYXMgc3VjaCBhcyB0aGUgWE1MIGludGVybmF0aW9uYWxpemF0aW9uIAorICAgICAgICBzdGFuZGFyZCwgVE1YLjwvUD4KKyAgICAgIDxQPllvdSBjYW4gaGF2ZSBhcyBtYW55IFJlc291cmNlIEJ1bmRsZXMgYXMgeW91IGxpa2UgZm9yIGFuIGFwcGxpY2F0aW9uLCAKKyAgICAgICAgdGhvdWdoIG1vc3QgdGVhbXMgY2hvb3NlIHRvIHdvcmsgd2l0aCBqdXN0IG9uZS4gUkIgTWFuYWdlciBhbGxvd3MgeW91IAorICAgICAgICB0byB3b3JrIG9uIG9uZSByZXNvdXJjZSBidW5kbGUgYXQgYSB0aW1lLCBlZGl0aW5nIGVpdGhlciBpbmRpdmlkdWFsIHRyYW5zbGF0aW9uIAorICAgICAgICBmaWxlcyBvciBncm91cHMgb2YgdHJhbnNsYXRpb24gZmlsZXMgd2l0aGluIHRoZSBidW5kbGUuIFdoZW4geW91IGNyZWF0ZSAKKyAgICAgICAgYSByZXNvdXJjZSBidW5kbGUgeW91IHdpbGwgYmUgY3JlYXRpbmcgdGhlIGJhc2UgY2xhc3MgdHJhbnNsYXRpb24gZmlsZSAKKyAgICAgICAgZm9yIHRoYXQgYnVuZGxlLiBPdGhlciBmaWxlcyBjYW4gYmUgYWRkZWQgYXQgYW55IHRpbWUgbGF0ZXIuIFRoZSBiYXNlIAorICAgICAgICBjbGFzcyB0cmFuc2xhdGlvbiBmaWxlIHByb3ZpZGVzIGEgZGVmYXVsdCB0cmFuc2xhdGlvbiBpbiBjYXNlIGxvY2FsZXMgCisgICAgICAgIGFyZSBub3Qgc3BlY2lmaWVkIG9yIGEgcmVzb3VyY2UgdHJhbnNsYXRpb24gZmlsZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIAorICAgICAgICBsb2NhbGUgdGhhdCBpcyBzcGVjaWZpZWQuPC9QPgorICAgICAgPFA+WW91IHdpbGwgaGF2ZSB0byBjaG9vc2UgYSBiYXNlIGNsYXNzIG5hbWUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUuIFRoYXQgCisgICAgICAgIG5hbWUgbWF5IGhhdmUgbm8gd2hpdGUgc3BhY2VzIGFuZCBubyB1bmRlcnNjb3JlcywgYW5kIGl0IHNob3VsZCByZW1pbmQgCisgICAgICAgIHlvdSBpbiBzb21lIHdheSBvZiB0aGUgcHJvamVjdCBvciBmdW5jdGlvbiB0byB3aGljaCBpdCBpcyBhdHRhY2hlZC4gWW91IAorICAgICAgICB3aWxsIGFsc28gaGF2ZSB0byBlbnRlciBhIG5hbWUgZm9yIHRoZSBwZXJzb24gb3IgcGVvcGxlIGluIGNoYXJnZSBvZiBtYW5hZ2luZyAKKyAgICAgICAgdGhlIHJlc291cmNlIGJ1bmRsZS48L1A+CisgICAgICA8UD48Qj5DcmVhdGluZyB0aGUgUmVzb3VyY2UgQnVuZGxlPC9CPjwvUD4KKyAgICAgIDxQPkZyb20gdGhlIEZpbGUgbWVudSwgc2VsZWN0ICdOZXcgUmVzb3VyY2UgQnVuZGxlLi4uJyBZb3Ugd2lsbCBiZSBwcm9tcHRlZCAKKyAgICAgICAgdG8gZW50ZXIgdGhlIGJhc2UgY2xhc3MgbmFtZS4gSWYgeW91IGVudGVyIGEgcHJvcGVybHkgZm9ybWF0dGVkIG5hbWUsIAorICAgICAgICB0aGUgdHJlZSBkaXNwbGF5IG9uIHRoZSBsb3dlciBsZWZ0IHdpbGwgY2hhbmdlIHRvIHJlZmxlY3QgdGhlIG5hbWUgeW91IAorICAgICAgICBlbnRlcmVkLiBDbGljayBvbiB0aGUgbmFtZSBvZiB5b3VyIHJlc291cmNlIGJ1bmRsZSwgYW5kIG1ha2Ugc3VyZSB0aGUgCisgICAgICAgICdTdGF0aXN0aWNzJyB0YWIgaXMgc2VsZWN0ZWQuIFlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9uZXdfYnVuZGxlLmdpZiIgV0lEVEg9IjU1MiIgSEVJR0hUPSIzODUiPjwvUD4KKyAgICAgIDxQPlRoZSBvbmx5IHJlc291cmNlIGZpbGUgeW91IGhhdmUgaXMgdGhhdCBvZiB0aGUgYmFzZSBjbGFzcy4gU2VsZWN0IHRoZSAKKyAgICAgICAgJyhCYXNlIENsYXNzKScgbm9kZSBvZiB0aGUgdHJlZSBieSBjbGlja2luZyBvbiBpdC4gWW91IHNob3VsZCBub3cgc2VlIAorICAgICAgICB0aGUgZm9sbG93aW5nOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2Jhc2VjbGFzcy5naWYiIFdJRFRIPSI2NzYiIEhFSUdIVD0iNTExIj48L1A+CisgICAgICA8UD5UaGUgZmllbGRzIHJlcHJlc2VudGVkIGhlcmUgaGF2ZSBubyBiZWFyaW5nIG9uIGhvdyB0aGUgdHJhbnNsYXRpb25zIHdpbGwgCisgICAgICAgIHdvcmsgaW4geW91ciBhcHBsaWNhdGlvbiwgYnV0IGdpdmUgUkJNYW5hZ2VyIHNvbWUgbWV0YWRhdGEgdG8gYmV0dGVyIG9yZ2FuaXplIAorICAgICAgICB0aGUgZmlsZS4gUmVzb3VyY2UgVGl0bGUgc2hvdWxkIGJlIGEgc2hvcnQgdGl0bGUgdGhhdCByZXByZXNlbnRzIHRoaXMgCisgICAgICAgIGZpbGUsIHN1Y2ggYXMgJ1JCVHV0b3JpYWwgQmFzZSBDbGFzcycuIFlvdSBjYW4gZW50ZXIgYW55IGNvbW1lbnQgYW5kIGZpbGUgCisgICAgICAgIG1hbmFnZXIgdmFsdWUgeW91IGxpa2UuIFRoZSBsYW5ndWFnZSwgY291bnRyeSwgYW5kIHZhcmlhbnQgZmllbGRzIHByb3ZpZGUgCisgICAgICAgIGEgcGxhY2UgZm9yIGxpc3RpbmcgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UsIGNvdW50cnksIGFuZCB2YXJpYW50IAorICAgICAgICBzbyB0aGF0IHlvdSBkbyBub3QgaGF2ZSB0byByZWx5IG9uIHR3byBvciB0aHJlZSBsZXR0ZXIgZW5jb2RpbmdzLiBZb3UgCisgICAgICAgIGNhbiBhbHNvIGxlYXZlIHRoZXNlIGZpZWxkcyBibGFuayBpZiB0aGV5IGFyZSBub3QgcmVsZXZhbnQuIE9uY2UgeW91IGhhdmUgCisgICAgICAgIGVudGVyZWQgdGhlc2UgdmFsdWVzIGluLCBmaW5hbGl6ZSB0aGVtIGJ5IHByZXNzaW5nIHRoZSAnVXBkYXRlJyBidXR0b24uPC9QPgorICAgICAgPFA+PEEgSFJFRj0ic3RlcDEuaHRtbCI+QmFjayB0byBTdGVwIDE8L0E+IC1vci0gPEEgSFJFRj0ic3RlcDMuaHRtbCI+Rm9yd2FyZCAKKyAgICAgICAgdG8gU3RlcCAzPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMy5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTc4ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDMuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsIC0gQ3JlYXRpbmcgR3JvdXBzPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi92aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJzdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+CisgICAgICA8RElWIEFMSUdOPSJDRU5URVIiPgorICAgICAgICA8SDM+Q3JlYXRpbmcgR3JvdXBzIHdpdGhpbiB0aGUgQnVuZGxlPC9IMz4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPjxCPldoYXQgaXMgYSBHcm91cD88L0I+PC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+T25lIG9mIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtcyB3aXRoIG1hbmFnaW5nIHJlc291cmNlIAorICAgICAgICAgIGJ1bmRsZXMgYWNyb3NzIGxhcmdlIHByb2plY3RzIGlzIHRoYXQgaW5kaXZpZHVhbCByZXNvdXJjZXMgb2Z0ZW4gZ290IAorICAgICAgICAgIGxvc3QgaW4gdGhlIHZhc3QgbnVtYmVyIG9mIHRyYW5zbGF0aW9ucy4gQnkgY3JlYXRpbmcgZ3JvdXBzIHdpdGhpbiByZXNvdXJjZXMsIAorICAgICAgICAgIFJCTWFuYWdlciBtYWtlcyBpdCBtdWNoIHNpbXBsZXIgdG8gbWFuYWdlIHRoZSBkYXVudGluZyBudW1iZXIgb2YgdHJhbnNsYXRpb25zLiAKKyAgICAgICAgICBUaGUgcmVzb3VyY2UgYnVuZGxlIGlzIGxpa2UgYSB0cmVlIHdpdGggdGhlIGZpbGVzIGF0IHRoZSB1cHBlciBsZXZlbHMuIAorICAgICAgICAgIEJlbmVhdGggdGhlIGZpbGUgbGV2ZWwgaXMgdGhlIGdyb3VwIGxldmVsLCBhbmQgYmVuZWF0aCB0aGF0LCB0aGUgaW5kaXZpZHVhbCAKKyAgICAgICAgICByZXNvdXJjZXMuPC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+VGhlIG9ubHkgbWV0YSBkYXRhIHRoYXQgZ3JvdXBzIGNvbnRhaW4gYXJlIG5hbWUgYW5kIGNvbW1lbnQuIAorICAgICAgICAgIFRoZSBuYW1lIGlzIGEgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBncm91cCBmcm9tIGEgbGlzdCBvZiBncm91cHMsIGFuZCAKKyAgICAgICAgICB0aGUgY29tbWVudCBpcyBhIHF1aWNrIGRlc2NyaXB0aW9uIGFib3V0IHdoYXQgdGhlIGdyb3VwIGNvbnRhaW5zLjwvUD4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPjxCPkNyZWF0aW5nIGEgR3JvdXA8L0I+PC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+TGlrZSBhbnkgb3RoZXIgZWRpdGluZyB0aGF0IGFmZmVjdHMgdGhlIGVudGlyZSByZXNvdXJjZSAKKyAgICAgICAgICBidW5kbGUsIHRoZSBjcmVhdGlvbiBvZiBhIGdyb3VwIGNhbiBub3QgYmUgZG9uZSBmcm9tIHRoZSBpbmRpdmlkdWFsIAorICAgICAgICAgIGxhbmd1YWdlIGZpbGUgbGV2ZWwuIFR3byB3YXlzIGV4aXN0IHRvIGNyZWF0ZSBhIGdyb3VwLiBUaGUgZmlyc3QgaXMgCisgICAgICAgICAgdG8gc2VsZWN0IHRoZSBiYXNlIGNsYXNzIGF0IHRoZSB0b3Agb2YgdGhlIHJlc291cmNlIGJ1bmRsZSB0cmVlLCBzZWxlY3QgCisgICAgICAgICAgdGhlICdHcm91cHMnIHRhYiwgYW5kIGNsaWNrIHRoZSAnQ3JlYXRlIEdyb3VwJyBidXR0b24uIFRoZSBzZWNvbmQgd2F5IAorICAgICAgICAgIGlzIHRvIGdvIHRvIHRoZSAnT3B0aW9ucycgbWVudSBhbmQgc2VsZWN0ICdBZGQgTmV3IEdyb3VwJy4gVGhlIHNlY29uZCAKKyAgICAgICAgICBtZXRob2QgY2FuIGJlIHVzZWQgbm8gbWF0dGVyIHdoYXQgeW91ciBjdXJyZW50IHZpZXcgaXMgb24gdGhlIGxvd2VyIAorICAgICAgICAgIHJpZ2h0IHBhbmVsLjwvUD4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPk9uY2UgeW91IGhhdmUgZm9sbG93ZWQgb25lIG9mIHRoZXNlIHR3byBtZXRob2RzLCB0aGUgZm9sbG93aW5nIAorICAgICAgICAgIGRpYWxvZyBzaG91bGQgYXBwZWFyOjwvUD4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvY3JlYXRlX2dyb3VwLmdpZiIgV0lEVEg9IjQwOCIgSEVJR0hUPSIxMDkiPjwvUD4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPkVudGVyIGEgbmFtZSBhbmQgY29tbWVudCBmb3IgdGhlIGdyb3VwLCBhbmQgY2xpY2sgb24gJ0NyZWF0ZScuIAorICAgICAgICAgIE5vdyB5b3UgaGF2ZSBhIGdyb3VwLiBZb3UgY2FuIGFkZCBtb3JlIGdyb3VwcyBub3cgb3IgYXQgYW55IHRpbWUuIFlvdSAKKyAgICAgICAgICBjYW4gYWxzbyBiZWdpbiB0byBjcmVhdGUgbmV3IHJlc291cmNlcyB1bmRlciB0aGUgbmV3IGdyb3VwIGFzIGV4cGxhaW5lZCAKKyAgICAgICAgICBpbiB0aGUgbmV4dCBzdGVwLjwvUD4KKyAgICAgICAgPFAgQUxJR049IkxFRlQiPjxBIEhSRUY9InN0ZXAyLmh0bWwiPkJhY2sgdG8gU3RlcCAyPC9BPiAtb3ItIDxBIEhSRUY9InN0ZXA0Lmh0bWwiPkZvcndhcmQgCisgICAgICAgICAgdG8gU3RlcCA0PC9BPjwvUD4KKyAgICAgIDwvRElWPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA0Lmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxN2YwZTEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNC5odG1sCkBAIC0wLDAgKzEsMTY4IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgVHV0b3JpYWwgLSBQb3B1bGF0aW5nIHRoZSBCdW5kbGU8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3ZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InN0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+U3RlcCA0LiBQb3B1bGF0aW5nIHRoZSBCdW5kbGUgd2l0aCBSZXNvdXJjZXM8L0gzPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoaW4gYSBHcm91cDwvQj48L1A+CisgICAgICA8UD5JbiB0aGUgdHV0b3JpYWwgZmlsZSwgZm9sbG93aW5nIHRoZSBwcm9jZXNzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgCisgICAgICAgIHN0ZXAsIEkgY3JlYXRlZCBhIGdyb3VwIGNhbGxlZCAnUXVlc3Rpb25zJyBhbmQgZ2F2ZSBpdCBhIGNvbW1lbnQuIFRvIHZpZXcgCisgICAgICAgIHRoZSBncm91cCB0aGF0IHlvdSBjcmVhdGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgYmFzZSBjbGFzcyBhdCB0aGUgdG9wIG9mIAorICAgICAgICB0aGUgZmlsZSB0cmVlIHRvIHRoZSBsZWZ0IGlzIHNlbGVjdGVkLCBwcmVzcyB0aGUgJ0dyb3VwcycgdGFiIG9uIHRoZSByaWdodCwgCisgICAgICAgIGFuZCBzZWxlY3QgeW91ciBncm91cCBuYW1lIGZyb20gdGhlIGRyb3AgZG93biBtZW51LiBXaXRoIGFueSBsdWNrLCB5b3UgCisgICAgICAgIHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9ncm91cC5naWYiIFdJRFRIPSI3NTAiIEhFSUdIVD0iNDMyIj48L1A+CisgICAgICA8UD5Gcm9tIHRoaXMgdmlldywgdGhlcmUgYXJlIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFyZSB0byBiZSBmb3VuZCBpbiB0aGUgCisgICAgICAgIHNpeCBidXR0b25zIHRvIHRoZSBsb3dlciByaWdodC4gV2UgYXJlIG5vdyBnb2luZyB0byBjcmVhdGUgYSByZXNvdXJjZS4gCisgICAgICAgIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBlaXRoZXIgcHJlc3NpbmcgdGhlIGJ1dHRvbiAnQ3JlYXRlIFJlc291cmNlJyAKKyAgICAgICAgb3Igc2VsZWN0aW5nICdBZGQgTmV3IFJlc291cmNlLi4uJyBmcm9tIHRoZSAnT3B0aW9ucycgbWVudSBhdCB0aGUgdG9wIAorICAgICAgICBvZiB0aGUgc2NyZWVuLjwvUD4KKyAgICAgIDxQPjxCPkZpbGxpbmcgaW4gUmVzb3VyY2UgSW5mb3JtYXRpb248L0I+PC9QPgorICAgICAgPFA+T25jZSB5b3UgZm9sbG93IG9uZSBvZiB0aGUgYWJvdmUgdHdvIHN0ZXBzLCB5b3Ugc2hvdWxkIHNlZSBhIGRpYWxvZyBzaW1pbGFyIAorICAgICAgICB0byB0aGUgZm9sbG93aW5nOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfcmVzb3VyY2UuZ2lmIj48L1A+CisgICAgICA8UD5UaGUgZ3JvdXAgc2hvd24gaXMgdGhlIG9uZSBjdXJyZW50bHkgYmVpbmcgdmlld2VkIHdoZW4geW91IGNsaWNrZWQgb24gCisgICAgICAgIHRoZSAnQ3JlYXRlIFJlc291cmNlJyBidXR0b24uIElmIHlvdSB1c2VkIHRoZSBtZW51IHRvIGJyaW5nIHVwIHRoaXMgZGlhbG9nLCAKKyAgICAgICAgaXQgbWF5IGJlIGEgZGlmZmVyZW50IGdyb3VwLiBZb3UgbWF5IG1vdmUgdGhlIHJlc291cmNlIHRvIGFueSBncm91cCB5b3UgCisgICAgICAgIHdpc2ggYnkgY2hhbmdpbmcgdGhlIHZhbHVlIGluIHRoaXMgZHJvcCBkb3duIGJveC4gQm90aCB0aGUgZW50cnkga2V5IGFuZCAKKyAgICAgICAgdGhlIHRyYW5zbGF0aW9uIGZpZWxkcyBhcmUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFRoZXNlIG1ha2UgdXAgdGhlIGxvb2t1cCAKKyAgICAgICAgdmFsdWUgYW5kIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIHlvdXIgYnVuZGxlLiBUaGUgCisgICAgICAgIGNvbW1lbnQgZmllbGQgaXMgdGhlcmUgaW4gb3JkZXIgdG8gYWlkIHRob3NlIHdobyB3aWxsIGJlIHRyYW5zbGF0aW5nIHlvdXIgCisgICAgICAgIHdvcmsgaW50byBvdGhlciBsYW5ndWFnZXMuIFRoaXMgZmllbGQgcHJvdmlkZXMgYSB3YXkgZm9yIHlvdSB0byBkZXNjcmliZSAKKyAgICAgICAgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXJ0aWN1bGFyIHJlc291cmNlLjwvUD4KKyAgICAgIDxQPlRoZXJlIGFyZSBhIGZldyB3YXlzIHRvIGNyZWF0ZSB0aGUgcmVzb3VyY2Ugb25jZSB0aGUgaW5mb3JtYXRpb24gaXMgZW50ZXJlZC4gCisgICAgICAgIFByZXNzaW5nICdDcmVhdGUnIHdpbGwgYWRkIHRoZSByZXNvdXJjZSBhbmQgY2xvc2UgdGhlIGRpYWxvZy4gSWYgeW91IHdpc2ggCisgICAgICAgIHRvIGNvbnRpbnVlIGNyZWF0aW5nIHJlc291cmNlcyBhZnRlciB0aGUgY3VycmVudCBvbmUsIHByZXNzaW5nICdDcmVhdGUgCisgICAgICAgICZhbXA7IENvbnRpbnVlJyB3aWxsIGNyZWF0ZSB0aGUgcmVzb3VyY2UsIGNsZWFyIHRoZSBpbmZvcm1hdGlvbiB5b3UgaGF2ZSAKKyAgICAgICAganVzdCBlbnRlcmVkLCBhbmQgYWxsb3cgeW91IHRvIGVudGVyIGluIGEgbmV3IHJlc291cmNlLiBQcmVzc2luZyAnQ2FuY2VsJyAKKyAgICAgICAgd2lsbCBjbG9zZSB0aGUgZGlhbG9nIGJveCBhbmQgaWdub3JlIGFueSBpbmZvcm1hdGlvbiBjdXJyZW50bHkgZW50ZXJlZC4gCisgICAgICAgIEFzIGEgc2hvcnQgY3V0LCB5b3UgY2FuIGFsc28gaGl0IGVudGVyIGZyb20gYW55IG9mIHRoZSB0ZXh0IGJveGVzIGJ1dCAKKyAgICAgICAgJ1RyYW5zbGF0aW9uJy4gVGhpcyB3aWxsIGNyZWF0ZSB0aGUgcmVzb3VyY2UuIFByZXNzaW5nIGVudGVyIGZyb20gdGhlIAorICAgICAgICB0cmFuc2xhdGlvbiB0ZXh0IGJveCwgY3JlYXRlcyBhIHRyYW5zbGF0aW9uIHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMgCisgICAgICAgIG9mIHRleHQuPC9QPgorICAgICAgPFA+QSBzYW1wbGUgcmVzb3VyY2UgY3JlYXRpb24gaXMgc2hvdyBhcyBmb2xsb3dzOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfcmVzb3VyY2UuZ2lmIj48L1A+CisgICAgICA8UD48Qj5Vc2luZyAnTG9vay11cHMnPC9CPjwvUD4KKyAgICAgIDxQPlJlc291cmNlIGJ1bmRsZXMgcHJvdmlkZSBhIHdheSBvZiB0cmFuc2xhdGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIAorICAgICAgICBhcyB3ZWxsLiBGb3IgaW5zdGFuY2UsIHdoYXQgaWYgSSB3YW50ZWQgYSB0cmFuc2xhdGlvbiBhc2tpbmcgdGhlIHVzZXIgCisgICAgICAgIGhvdyBvbGQgdGhleSB3ZXJlLCBhbmQgSSB3YW50ZWQgdG8gYXNrIGl0IHdpdGggdGhlaXIgbmFtZSBpbnNlcnRlZCBpbnRvIAorICAgICAgICB0aGUgcXVlc3Rpb24uIFRoZSBwbGFjZW1lbnQgb2YgdGhlaXIgbmFtZSBtaWdodCBiZSBkaWZmZXJlbnQgaW4gZGlmZmVyZW50IAorICAgICAgICBsYW5ndWFnZXMuIFRoaXMgaXMgdGhlIHJlYXNvbiBmb3IgJ2xvb2stdXBzJy4gVGhlIGphdmEudGV4dCBwYWNrYWdlIGRlZmluZXMgCisgICAgICAgIGEgd2F5IGZvciBpbXBsZW1lbnRpbmcgdGhlc2UgbG9vay11cHMgdXNpbmcgbnVtYmVycyBzdXJyb3VuZGVkIGJ5IGN1cmx5IAorICAgICAgICBicmFjZXMuIFRodXMsIEkgbWlnaHQgd2FudCB0byBjcmVhdGUgYSByZXNvdXJjZSBsaWtlIHRoZSBvbmUgYmVsb3c6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9sb29rdXBfcmVzb3VyY2UuZ2lmIj48L1A+CisgICAgICA8UD5PbmNlIHlvdSBlbnRlciBhbnl0aGluZyBpbnRvIHlvdXIgdHJhbnNsYXRpb24gc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXMgCisgICAgICAgIGFuZCBjaGFuZ2UgdGhlIGZvY3VzIGF3YXkgZnJvbSB0aGUgdHJhbnNsYXRpb24gZmllbGQsIHRoZSBkaWFsb2cgYm94IHdpbGwgCisgICAgICAgIHVwZGF0ZSBpdHNlbGYgd2l0aCBhcmVhcyBmb3IgeW91IHRvIGVudGVyIGRlc2NyaXB0aW9ucyBvZiB0aGUgbG9vay11cHMgCisgICAgICAgIHlvdSBoYXZlIGVudGVyZWQuIFRoaXMgZmVhdHVyZSBvZiBSQk1hbmFnZXIgYWxsb3dzIGZ1dHVyZSB0cmFuc2xhdG9ycyAKKyAgICAgICAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBlYWNoIGxvb2stdXAuPC9QPgorICAgICAgPFA+PEI+RWRpdGluZyB0aGUgUmVzb3VyY2VzPC9CPjwvUD4KKyAgICAgIDxQPkZyb20gdGhlICdHcm91cHMnIHRhYiB2aWV3LCB5b3UgY2FuIGF0IGFueSB0aW1lIGVkaXQgdGhlIGRlZmF1bHQgdmFsdWVzIAorICAgICAgICBmb3IgYSByZXNvdXJjZS4gQXMgeW91IGVudGVyIGluIG5ldyByZXNvdXJjZXMgdGhleSB3aWxsIGFwcGVhciBpbiB0aGUgCisgICAgICAgIGdyb3VwIHZpZXcgYXMgc2hvd246PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19ncm91cC5naWYiIFdJRFRIPSI3NTAiIEhFSUdIVD0iNDMyIj48L1A+CisgICAgICA8UD5Eb3VibGUgY2xpY2tpbmcgb24gYSByZXNvdXJjZSB3aWxsIGJyaW5nIGEgZGlhbG9nIGJveCB1cCBzaW1pbGFyIHRvIHRoZSAKKyAgICAgICAgb25lIGZvciBjcmVhdGluZyBhIHJlc291cmNlLiBSZW1lbWJlciB0aGF0IGl0IGlzIG9ubHkgZnJvbSB0aGlzIHZpZXcgdGhhdCAKKyAgICAgICAgeW91IHdpbGwgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHJlc291cmNlIGluIGEgd2F5IHRoYXQgd2lsbCBlZmZlY3QgdGhlIAorICAgICAgICBlbnRpcmUgYnVuZGxlLiBUaHVzIGl0IGlzIG9ubHkgaW4gdGhpcyB2aWV3IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHJlc291cmNlJ3MgCisgICAgICAgIGdyb3VwLCBrZXkgbmFtZSwgYW5kIGRlZmF1bHQgdHJhbnNsYXRpb24gYW5kIGNvbW1lbnQuPC9QPgorICAgICAgPFA+PEEgSFJFRj0ic3RlcDMuaHRtbCI+QmFjayB0byBTdGVwIDM8L0E+IC1vci0gPEEgSFJFRj0ic3RlcDUuaHRtbCI+Rm9yd2FyZCAKKyAgICAgICAgdG8gU3RlcCA1PC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNS5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2QyZTRhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDUuaHRtbApAQCAtMCwwICsxLDE1OCBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsIC0gQ3JlYXRpbmcgUmVzb3VyY2UgRmlsZXM8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3ZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InN0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+U3RlcCA1LiBBZGRpbmcgUmVzb3VyY2UgRmlsZXMgZm9yIE5ldyBMYW5ndWFnZXM8L0gzPgorICAgICAgPFA+PEI+Q3JlYXRpbmcgYSBOZXcgTGFuZ3VhZ2UgRmlsZTwvQj48L1A+CisgICAgICA8UD5UaGUgb25seSB3YXkgYnkgd2hpY2ggdG8gY3JlYXRlIGEgbmV3IGxhbmd1YWdlIGZpbGUgaXMgYnkgc2VsZWN0aW5nIHRoZSAKKyAgICAgICAgJ0FkZCBOZXcgUmVzb3VyY2UgRmlsZS4uLicgb3B0aW9uIGZyb20gdGhlICdPcHRpb25zJyBtZW51LiBXaGVuIHlvdSBkbyAKKyAgICAgICAgc28gYSBkaWFsb2cgYm94IHdpbGwgYXBwZWFyIHNpbWlsYXIgdG8gdGhpczo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX2ZpbGUuZ2lmIiBXSURUSD0iNjIwIiBIRUlHSFQ9IjQyMSI+PC9QPgorICAgICAgPFA+VGhlIHRvcCB0aHJlZSBmaWVsZHMgaWRlbnRpZnkgdGhlIGZpbGUuIFRoZSBib3R0b20gdGhyZWUgc2VjdGlvbnMsIExhbmd1YWdlLCAKKyAgICAgICAgQ291bnRyeSwgYW5kIFZhcmlhbnQgZGVmaW5lIHRoZSByb2xlIG9mIHRoZSByZXNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgYnVuZGxlLiAKKyAgICAgICAgVGhlIG9ubHkgcmVxdWlyZWQgZmllbGQgaXMgdGhlIGVuY29kaW5nIGZpZWxkIGZvciB0aGUgbGFuZ3VhZ2UuIFRoZSBlbmNvZGluZyAKKyAgICAgICAgZmllbGRzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBmaWxlIHdoZW5ldmVyIHRoZSBmaWVsZHMgCisgICAgICAgIGFyZSBmaWxsZWQuIFRoZSBmaWxlIG5hbWUgd291bGQgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIDxDT0RFPmJhc2VjbGFzc19sYW5ndWFnZV9lbmNvZGluZ192YXJpYW50LnByb3BlcnRpZXM8L0NPREU+LiAKKyAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBmaWxlIHdvdWxkIGJlIG5hbWVkPENPREU+IFJCVHV0b3JpYWxfZGUucHJvcGVydGllczwvQ09ERT4uIAorICAgICAgICBOb3RlIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGRlZmluZSBmYWxsYmFjayBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSAoaS5lLiAKKyAgICAgICAgaWYgeW91IGhhdmUgYSBmaWxlIGZvciA8Q09ERT5SQlR1dG9yaWFsX2RlX0RFLnByb3BlcnRpZXM8L0NPREU+LCB5b3Ugc2hvdWxkIAorICAgICAgICBhbHNvIGhhdmUgYSBmaWxlIGZvciA8Q09ERT5SQlR1dG9yaWFsX2RlLnByb3BlcnRpZXM8L0NPREU+KS48L1A+CisgICAgICA8UD5TaW5jZSB0aGVyZSBtYXkgYmUgaW5zdGFuY2VzIHdoZXJlIHRoZSBsYW5ndWFnZSBmaWxlIGJlaW5nIGNyZWF0ZWQgbWF5IAorICAgICAgICBoYXZlIGZldyBkaWZmZXJlbmNlcyBmcm9tIHRoZSBiYXNlIGNsYXNzIHByb3BlcnR5IGZpbGUsIGFuIG9wdGlvbiBpcyBnaXZlbiAKKyAgICAgICAgZm9yIGNvcHlpbmcgb3Igbm90IGFsbCBvZiB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIGJhc2UgY2xhc3MgZmlsZSB0byB0aGUgCisgICAgICAgIG5ldyBmaWxlLiBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBhbmQgZWFjaCByZXNvdXJjZSB3aWxsIGJlIAorICAgICAgICBjb3BpZWQgZnJvbSB0aGUgYmFzZSBmaWxlIGFuZCBtYXJrZWQgYXMgdW50cmFuc2xhdGVkIGluIHRoZSBuZXcgcmVzb3VyY2UgCisgICAgICAgIGZpbGUuPC9QPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoIHRoZSBOZXcgTGFuZ3VhZ2UgRmlsZTwvQj48QlI+CisgICAgICA8L1A+CisgICAgICA8UD5PbmNlIGEgbGFuZ3VhZ2UgZmlsZSBoYXMgYmVlbiBjcmVhdGVkLCB0aGVyZSB3aWxsIGJlIHJlc291cmNlcyB0aGF0IG5lZWQgCisgICAgICAgIHRvIGJlIHRyYW5zbGF0ZWQuIFRoaXMgY2FuIGJlIGRvbmUgZnJvbSB0d28gZGlmZmVyZW50IHZpZXdzLiBGaXJzdCwgZ28gCisgICAgICAgIHRvIHRoZSB0cmVlIG9uIHRoZSBsb3dlciBsZWZ0IG9mIHRoZSBzY3JlZW4gYW5kIHNlbGVjdCB0aGUgZmlsZSB0aGF0IHlvdSAKKyAgICAgICAgaGF2ZSBqdXN0IGNyZWF0ZWQuIEluIHRoaXMgY2FzZSBpdCB3aWxsIGJlIHVuZGVyIHRoZSBsYW5ndWFnZSBlbmNvZGluZyAKKyAgICAgICAgZGUgbm9kZSBvZiB0aGUgdHJlZS4gU2VsZWN0IHRoZSBmaWxlIGJ5IGNsaWNraW5nIG9uIGl0IG9uY2UuIFNlbGVjdGluZyAKKyAgICAgICAgdGhlICdVbnRyYW5zbGF0ZWQnIHRhYiBvbiB0aGUgcmlnaHQgc2hvdWxkIHJlc3VsdCBpbiBhIHZpZXcgc2ltaWxhciB0byAKKyAgICAgICAgdGhpczo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3VudHJhbnNsYXRlZC5naWYiIFdJRFRIPSI3NTAiIEhFSUdIVD0iNDE2Ij4gCisgICAgICA8L1A+CisgICAgICA8UD5UaGlzIHNlY3Rpb24gZGlzcGxheXMgYWxsIG9mIHRoZSByZXNvdXJjZXMgdGhhdCBhcmUgbWFya2VkIGFzIHVudHJhbnNsYXRlZCAKKyAgICAgICAgaW4gdGhlIGZpbGUuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBzZWxlY3QgdGhlICdHcm91cHMnIHRhYiBhbmQgc2VlIAorICAgICAgICBhbGwgb2YgdGhlIHJlc291cmNlcywgb25lIGdyb3VwIGF0IGEgdGltZSwgd2hldGhlciBvciBub3QgdGhleSBoYXZlIGJlZW4gCisgICAgICAgIG1hcmtlZCBhcyB0cmFuc2xhdGVkLiBEb3VibGUgY2xpY2tpbmcgb24gYSByb3cgaW4gdGhlIHRoZSB0YWJsZXMgcHJlc2VudCAKKyAgICAgICAgaW4gZWl0aGVyIHZpZXcgd2lsbCBicmluZyB1cCBhIGRpYWxvZyBib3ggc2ltaWxhciB0byBvbmUgeW91IGhhdmUgYWxsIAorICAgICAgICByZWFkeSBzZWVuOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfdHJhbnNsYXRpb24uZ2lmIiBXSURUSD0iNTEzIiBIRUlHSFQ9IjI2OSI+PC9QPgorICAgICAgPFA+VGhlIHRvcCB0aHJlZSBlZGl0YWJsZSBjb21wb25lbnRzIGFyZSBhbGwgZGlzYWJsZWQuIFRoaXMgaXMgYmVjYXVzZSBjaGFuZ2luZyAKKyAgICAgICAgdGhlbSB3b3VsZCByZXF1aXJlZCBlZGl0aW5nIGZpbGVzIG90aGVyIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgYmVpbmcgdmlld2VkLiAKKyAgICAgICAgVGhpcyB0eXBlIG9mIGVkaXRpbmcgY2FuIGJlIGFjY29tcGxpc2hlZCBvbmx5IGZyb20gdGhlIGJhc2UgY2xhc3MuIFRvIAorICAgICAgICBjaGFuZ2UgdGhlIHRyYW5zbGF0aW9uIHZhbHVlLCBhbHRlciB0aGUgZmllbGQgbGFiZWxlZCAnVHJhbnNsYXRpb246JyB3aXRoIAorICAgICAgICB0aGUgbmV3IHRyYW5zbGF0aW9uLiBZb3UgbWF5IGFsc28gY2hhbmdlIHRoZSByZXNvdXJjZSBjb21tZW50IGFuZCBsb29rdXAgCisgICAgICAgIGNvbW1lbnRzIGlmIHlvdSBsaWtlLCBidXQgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB2aXNpYmxlIG9ubHkgZnJvbSBSQk1hbmFnZXIuIAorICAgICAgICBZb3UgYWxzbyBtYXkgZmluZCB0aGF0IHRoZSByZXNvdXJjZSByZXF1aXJlcyBubyB0cmFuc2xhdGlvbiBpZiB0aGlzIGlzIAorICAgICAgICB0aGUgY2FzZSwganVzdCBzZWxlY3QgdGhlICdUcmFuc2xhdGVkJyBjaGVjayBib3ggYXQgdGhlIGJvdHRvbSBvZiB0aGUgCisgICAgICAgIGRpYWxvZyBhbmQgcHJlc3MgJ0VkaXQnLiBJZiB5b3UgY2hhbmdlIHRoZSB0cmFuc2xhdGlvbiwgdGhlICdUcmFuc2xhdGVkJyAKKyAgICAgICAgY2hlY2sgYm94IHdpbGwgYXV0b21hdGljYWxseSBjaGVjayBpdHNlbGYgd2hlbiB5b3UgYXJlIGZpbmlzaGVkLjwvUD4KKyAgICAgIDxQPkNvbnRpbnVlIHRoaXMgcHJvY2VzcyB1bnRpbCB5b3UgaGF2ZSBjb21wbGV0ZWx5IHRyYW5zbGF0ZWQgdGhpcyBmaWxlLCAKKyAgICAgICAgb3IgbGVhdmUgdGhlIGZpbGUgdW50cmFuc2xhdGVkLCBidXQgc2F2ZSB5b3VyIHdvcmsgc28gdGhhdCB5b3Ugb3Igc29tZW9uZSAKKyAgICAgICAgZWxzZSBjYW4gcmV0dXJuIHRvIGl0IGxhdGVyLiBUbyBsZWFybiBob3cgdG8gc2F2ZSB5b3VyIHJlc3VsdHMsIGdvIHRvIAorICAgICAgICB0aGUgbmV4dCBzdGVwLjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9InN0ZXA0Lmh0bWwiPkJhY2sgdG8gU3RlcCA0PC9BPiAtb3ItIDxBIEhSRUY9InN0ZXA2Lmh0bWwiPkZvcndhcmQgCisgICAgICAgIHRvIFN0ZXAgNjwvQT48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDYuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyNTgwZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA2Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciBUdXRvcmlhbCAtIFNhdmluZzwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0ic3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPgorICAgICAgPEgyIEFMSUdOPSJDRU5URVIiPlN0ZXAgNi4gU2F2aW5nIHRoZSBSZXN1bHRzPC9IMj4KKyAgICAgIDxQPjxCPkFsd2F5cyBTYXZlIFBlcmlvZGljYWxseTwvQj48L1A+CisgICAgICA8UD5Ob25lIG9mIHRoZSB3b3JrIHlvdSBkbyBpbiBtYW5hZ2luZyB0aGUgcmVzb3VyY2UgYnVuZGxlIGlzIGZpbmFsIHVudGlsIAorICAgICAgICB5b3UgaGF2ZSBzYXZlZCB0aGUgcmVzdWx0cy4gVGhlIGZpcnN0IHRpbWUgeW91IHNhdmUgdGhlIHJlc291cmNlIGJ1bmRsZSwgCisgICAgICAgIHlvdSBzaG91bGQgc2VsZWN0IHRoZSAnU2F2ZSBSZXNvdXJjZSBCdW5kbGUgQXMuLi4nIG9wdGlvbiBmcm9tIHRoZSBmaWxlIAorICAgICAgICBtZW51LiBTZWxlY3QgYSBmb2xkZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgZmlsZSBhbmQgZW50ZXIgaW4gdGhlIGJhc2UgCisgICAgICAgIGNsYXNzIG5hbWUgb3IgdGhlIGJhc2UgY2xhc3MgbmFtZSBmb2xsb3dlZCBieSB0aGUgLnByb3BlcnRpZXMgc3VmZml4IGFuZCAKKyAgICAgICAgcHJlc3Mgc2F2ZS48L1A+CisgICAgICA8UD5PbmNlIHRoaXMgaGFzIGJlZW4gZG9uZSwgaXQgaXMgc3VmZmljaWVudCB0byBjaG9zZSB0aGUgJ1NhdmUgUmVzb3VyY2UgCisgICAgICAgIEJ1bmRsZScgb3B0aW9uIGZyb20gdGhlIGZpbGUgbWVudS4gSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB2ZXJzaW9uaW5nIAorICAgICAgICB0b29sIHN1Y2ggYXMgTWljcm9zb2Z0J3MgVmlzdWFsIFNvdXJjZSBTYWZlLCBldGMuLCBiZSBzdXJlIHRoYXQgeW91IGhhdmUgCisgICAgICAgIHdyaXRlIHByaXZlbGVnZXMgdG8gdGhlIGVudGlyZSBidW5kbGUgb2YgZmlsZXMuIE90aGVyd2lzZSwgeW91IHdpbGwgcmVjaWV2ZSAKKyAgICAgICAgd2FybmluZyBmcm9tIFJCTWFuYWdlciB0aGF0IGl0IHdhcyB1bmFibGUgdG8gd3JpdGUgdG8gYWxsIG9mIHRoZSBmaWxlcy48L1A+CisgICAgICA8UD5BIHdheSB0byBnZXQgYXJvdW5kIHRoaXMgaXMgdG8gc2F2ZSB0aGUgcmVzb3VyY2UgZmlsZXMgaW5kaXZpZHVhbGx5LiAKKyAgICAgICAgSW4gb3JkZXIgdG8gZG8gdGhpcywgcmlnaHQgY2xpY2sgb24gYSByZXNvdXJjZSBmaWxlIGluIHRoZSB0cmVlIHZpZXcgYW5kIAorICAgICAgICBzZWxlY3QgdGhlICdTYXZlIFJlc291cmNlIEZpbGUnIG9wdGlvbi4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWYgeW91IAorICAgICAgICBoYXZlIG1hZGUgY2hhbmdlcyB0byB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZSwgYnV0IGlmIHlvdSBoYXZlIG9ubHkgCisgICAgICAgIGJlZW4gZG9pbmcgdHJhbnNsYXRpb24gd29yayBmb3IgYSBwYXJ0aWN1bGFyIGZpbGUsIG9yIGEgZmV3IGZpbGVzLCBzYXZpbmcgCisgICAgICAgIGluIHRoaXMgbWFubmVyIGNhbiBiZSB1c2VmdWwuPC9QPgorICAgICAgPFA+SWYgeW91IGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9yIGJhc2UgY2xhc3MgbmFtZSBvZiB0aGUgcmVzb3VyY2UgCisgICAgICAgIGJ1bmRsZSwgeW91IG1heSBkbyBzbyBieSByZXNhdmluZyB3aXRoIHRoZSAnU2F2ZSBSZXNvdXJjZSBCdW5kbGUgQXMuLi4nIAorICAgICAgICBvcHRpb24uPC9QPgorICAgICAgPFA+PEI+R29vZCBMdWNrPC9CPjwvUD4KKyAgICAgIDxQPllvdSB3aWxsIGZpbmQgdGhhdCB1c2luZyB0aGlzIHRvb2wgd2lsbCBzcGVlZCB1cCB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyAKKyAgICAgICAgZm9yIHlvdXIgaW50ZXJuYXRpb25hbCBhcHBsaWNhdGlvbiBvciB3ZWIgc2VydmljZS4gQXMgdGhpcyBpcyBvbmx5IGFuIAorICAgICAgICBhbHBoYSB2ZXJzaW9uIHJlbGVhc2UsIGJlIHN1cmUgdG8gY2hlY2sgYWxwaGF3b3JrcyBmcmVxdWVudGx5IGZvciB1cGRhdGVzIAorICAgICAgICBpbiBmdW5jdGlvbmFsaXR5IGFuZCBidWcgZml4ZXMuPC9QPgorICAgICAgPFA+PEEgSFJFRj0ic3RlcDUuaHRtbCI+QmFjayB0byBTdGVwIDU8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL2luZGV4Lmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWY4YTYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTU1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgLSBGdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+IAorICAgICAgICA8SDI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0gyPgorICAgICAgICA8UCBBTElHTj0iQ0VOVEVSIj5SQiBNYW5hZ2VyIG9mZmVycyBmaXZlIGRpZmZlcmVudCB3YXlzIHRvIGxvb2sgYXQgYW5kIAorICAgICAgICAgIG1hbmlwdWxhdGUgcmVzb3VyY2UgYnVuZGxlcy4gRm91ciBvZiB0aGVzZSB2aWV3cyBhcmUgZm91bmQgaW4gdGhlIHRhYnMgCisgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgcmlnaHQgcG9ydGlvbiBvZiB0aGUgZGlzcGxheS4gVGhlIGZpZnRoIGlzIHRoZSB0cmVlIHZpZXcgCisgICAgICAgICAgbG9jYXRlZCB0byB0aGUgbGVmdC4gSW4gdGhlIGZvbGxvd2luZyBwYWdlcywgdGhlIHVzZSBvZiBlYWNoIG9mIHRoZXNlIAorICAgICAgICAgIHZpZXdzIGlzIGV4cGxhaW5lZC48L1A+CisgICAgICAgIDxIMyBBTElHTj0iTEVGVCI+IAorICAgICAgICAgIDxVTD4KKyAgICAgICAgICAgIDxMST4gCisgICAgICAgICAgICAgIDxIND5WaWV3IDEuIDxBIEhSRUY9InZpZXcxLmh0bWwiPlRoZSBSZXNvdXJjZSBCdW5kbGUgVHJlZTwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4gCisgICAgICAgICAgICAgIDxIND5WaWV3IDIuIDxBIEhSRUY9InZpZXcyLmh0bWwiPlRoZSBTdGF0aXN0aWNzIFRhYjwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4gCisgICAgICAgICAgICAgIDxIND5WaWV3IDMuIDxBIEhSRUY9InZpZXczLmh0bWwiPlRoZSBVbnRyYW5zbGF0ZWQgVGFiPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPiAKKyAgICAgICAgICAgICAgPEg0PlZpZXcgNC4gPEEgSFJFRj0idmlldzQuaHRtbCI+VGhlIEdyb3VwcyBUYWI8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+IAorICAgICAgICAgICAgICA8SDQ+VmlldyA1LiA8QSBIUkVGPSJ2aWV3NS5odG1sIj5UaGUgU2VhcmNoIFRhYjwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICA8L1VMPgorICAgICAgICA8L0gzPgorICAgICAgICA8SDQ+PEEgSFJFRj0idmlldzEuaHRtbCI+R28gdG8gVmlldyAxPC9BPjwvSDQ+CisgICAgICA8L0RJVj4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorPCEtLQorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMiI+CisgIDxUUj4KKyAgICA8VEQgV0lEVEg9IjIwMCIgQkdDT0xPUj0iI0NDQ0NGRiI+Jm5ic3A7PC9URD4KKyAgICA8VEQ+CisgICAgICA8RElWIEFMSUdOPSJDRU5URVIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgV0lEVEg9IjE3NSIgSEVJR0hUPSI1MCI+PC9ESVY+CisgICAgPC9URD4KKyAgPC9UUj4KKyAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgPFREIFdJRFRIPSIyMDAiIEJHQ09MT1I9IiNDQ0NDRkYiPiAKKyAgICAgIDxQPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlJCTWFuYWdlcjwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPlJCUmVwb3J0ZXI8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvUD4KKyAgICAgIDxQPlRvcGljczwvUD4KKyAgICAgIDxVTD4KKyAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlN0ZXAtYnktc3RlcCBUdXRvcmlhbDwvQT48L0xJPgorICAgICAgICA8TEk+PEEgSFJFRj0ic3RlcDEuaHRtbCI+Q2hhbmdpbmcgUHJlZmVuY2VzPC9BPjwvTEk+CisgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2UgRmVhdHVyZXM8L0E+PC9MST4KKyAgICAgIDwvVUw+CisgICAgPC9URD4KKyAgICA8VEQ+PC9URD4KKyAgPC9UUj4KKzwvVEFCTEU+CistLT4KKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXcxLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3MS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNWQ5NTcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3MS5odG1sCkBAIC0wLDAgKzEsMTUwIEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgLSBUaGUgUmVzb3VyY2UgQnVuZGxlIFRyZWU8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+VmlldyAxLiBUaGUgUmVzb3VyY2UgQnVuZGxlIFRyZWU8L0gzPgorICAgICAgPFA+TG9jYXRlZCBvbiB0aGUgbGVmdCBvZiB0aGUgUkIgTWFuYWdlciBhcHBsaWNhdGlvbiBpcyBhIHNlY3Rpb24gZm9yIGRpc3BsYXlpbmcgCisgICAgICAgIGEgcmVzb3VyY2UgYnVuZGxlIGluIGEgdHJlZSB2aWV3LiBSZXNvdXJjZSBCdW5kbGVzIHVzdWFsbHkgYXJlIG1hZGUgdXAgCisgICAgICAgIG9mIHRleHQgb3IgY2xhc3MgZmlsZXMgaW4gYSBmbGF0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIEhvd2V2ZXIsIHRoZSBsb2NhbGUgCisgICAgICAgIGVuY29kaW5ncyBnaXZlbiB0byBlYWNoIGZpbGUgbWFrZXMgYSB0cmVlIHZpZXcgYSBuYXR1cmFsIHdheSB0byBsb29rIGF0IAorICAgICAgICB0aGUgYnVuZGxlLjwvUD4KKyAgICAgIDxQPldoZW4gUkIgTWFuYWdlciBpcyBpbml0aWFsbHkgbGF1bmNoZWQsIHRoaXMgdmlldyBpcyBlbXB0eSwgc2luY2UgdGhlcmUgCisgICAgICAgIGlzIG5vIG9wZW4gcmVzb3VyY2UgYnVuZGxlLiBVcG9uIG9wZW5pbmcgYSB2YWxpZCByZXNvdXJjZSBidW5kbGUsIHRoZSAKKyAgICAgICAgdHJlZSBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG9wZW5lZCBidW5kbGUuIEluIHRoZSBmb2xsb3dpbmcgc2NyZWVuIAorICAgICAgICBzaG90cywgeW91IHdpbGwgc2VlIHRoZSB0cmVlIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlIGFzc29jaWF0ZSB3aXRoIFJCIAorICAgICAgICBNYW5hZ2VyIGl0c2VsZi48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdHJlZV9iYXNpYy5naWYiIFdJRFRIPSI2NDIiIEhFSUdIVD0iNDk5Ij48L1A+CisgICAgICA8UD5UaGUgdG9wIG1vc3QgZWxlbWVudCBvZiB0aGUgdHJlZSAodGhlIHJvb3Qgb2YgdGhlIHRyZWUpIHJlcHJlc2VudHMgdGhlIAorICAgICAgICByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZS4gQmVsb3cgdGhlIHJvb3QgYXJlIHJlc291cmNlIGZpbGVzLCB3aGljaCBhcmUgCisgICAgICAgIHJlcHJlc2VudGVkIHdpdGggdGhlIGZpbGUgaWNvbnMgd2l0aCBhIGxldHRlciBpbiB0aGUgbWlkZGxlLCBhbmQgbGFuZ3VhZ2UsIAorICAgICAgICBjb3VudHJ5LCBhbmQgdmFyaWFudCBicmFuY2hlcy4gTGFuZ3VhZ2UgYnJhbmNoZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGFuIAorICAgICAgICBpY29uIHdpdGggYSBnbG9iZS4gQmVuZWF0aCB0aGVzZSBjYW4gYmUgbGFuZ3VhZ2UgYnJhbmNoZXMgcmVwcmVzZW50ZWQgCisgICAgICAgIGJ5IGFuIGljb24gd2l0aCBhIGZsYWcuIEJlbmVhdGggdGhlc2UgY2FuIGJlIHZhcmlhbnQgYnJhbmNoZXMgcmVwcmVzZW50ZWQgCisgICAgICAgIGJ5IGFuIGljb24gd2l0aCBhIGNhcnRvb24gZGlhbG9nIHN5bWJvbC4gQmVuZWF0aCBhbnkgb2YgdGhlIGJyYW5jaCBub2RlcywgCisgICAgICAgIHJlc291cmNlIGZpbGVzIGNhbiBiZSBmb3VuZC48L1A+CisgICAgICA8UD5UaGUgbmFtZSBvZiB0aGUgcm9vdCBvZiB0aGUgdHJlZSBpcyB0aGUgYmFzZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUsIAorICAgICAgICBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIGJ1bmRsZSBpcyBjYWxsZWQgUkJNYW5hZ2VyLiBUaGUgbmFtZSBvZiB0aGUgCisgICAgICAgIGZpbGUgbm9kZXMgaW4gdGhlIHRyZWUgd2lsbCB2YXJ5IGFjY29yZGluZyB0byB3aGVyZSBpbiB0aGUgdHJlZSB0aGV5IGFyZS4gCisgICAgICAgIEVhY2ggbGFuZ3VhZ2UgZmlsZSB3aWxsIGRpc3BsYXkgdGhlIGxhbmd1YWdlLCBjb3VudHJ5LCBhbmQgdmFyaWFudCBpbmZvcm1hdGlvbiAKKyAgICAgICAgdGhhdCBpdCBrbm93cyBhYm91dCBmb2xsb3dlZCBieSB0aGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUncyBsb2NhbGUgaW4gcGFyZW50aGVzaWVzLiAKKyAgICAgICAgVGhlIGJyYW5jaCBub2RlcyB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhleSBhcmUgbGFuZ3VhZ2UsIGNvdW50cnksIG9yIAorICAgICAgICB2YXJpYW50IGJyYW5jaGVzLCBhbmQgd2lsbCBkaXNwbGF5IHRoZSBlbmNvZGluZyBhc3NvY2lhdGVkIHdpdGggdGhhdCBicmFuY2guPC9QPgorICAgICAgPFA+UkIgTWFuYWdlciBmdW5jdGlvbnMgaW4gdHdvIGJhc2ljIHdheXMgZm9yIGV2ZXJ5dGhpbmcgaXQgZG9lcywgZWl0aGVyIAorICAgICAgICBmb3IgdGhlIHJlc291cmNlIGJ1bmRsZSBhcyBhIHdob2xlIG9yIGZvciBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIAorICAgICAgICBUbyBtYWtlIGNoYW5nZXMgYW5kIHVwZGF0ZXMgdG8gdGhlIGVudGlyZSByZXNvdXJjZSBidW5kbGUsIHNlbGVjdCB0aGUgCisgICAgICAgIHJvb3Qgbm9kZSBub3RhdGVkIGJ5IHRoZSAnUkInIGljb24gYXQgdGhlIHRvcCBvZiB0aGUgdHJlZS4gVGhpcyB3aWxsIGFsc28gCisgICAgICAgIGNhdXNlIHRoZSBzdGF0aXN0aWNzIGFuZCBzZWFyY2ggdmlld3MgdG8gcHJlc2VudCByZXN1bHRzIHJlZmxlY3RpbmcgdGhlIAorICAgICAgICBzdGF0dXMgb2YgdGhlIGVudGlyZSBidW5kbGUuIFRvIHdvcmsgd2l0aCBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUsIAorICAgICAgICBzZWxlY3QgYSBmaWxlIGZyb20gdGhlIHRyZWUgYnkgY2xpY2tpbmcgb24gaXQuIE5vdyBjaGFuZ2VzIGFuZCB2aWV3cyB3aWxsIAorICAgICAgICByZWZsZWN0IG9ubHkgdGhpcyBzZWxlY3RlZCByZXNvdXJjZSBmaWxlLjwvUD4KKyAgICAgIDxQPk5vdGUgdGhhdCBzZWxlY3RpbmcgdGhlIHZhcmlvdXMgYnJhbmNoIG5vZGVzIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcgCisgICAgICAgIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUkJNYW5hZ2VyLiBJbiBmdXR1cmUgdmVyc2lvbnMgdGhlIGFiaWxpdHkgdG8gCisgICAgICAgIHdvcmsgb24gc3VidHJlZXMgbWF5IGJlIGFkZGVkLCBidXQgZm9yIG5vdyBlaXRoZXIgc2VsZWN0IHRoZSByZXNvdXJjZSAKKyAgICAgICAgYnVuZGxlIG9yIGFuIGluZGl2aWR1YWwgZmlsZS48L1A+CisgICAgICA8UD5VbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gd29ya2luZyB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgCisgICAgICAgIGFuZCB3b3JraW5nIHdpdGggYSByZXNvdXJjZSBmaWxlIGlzIGNydWNpYWwgdG8gdXNpbmcgUkIgTWFuYWdlci4gTm9ybWFsbHkgCisgICAgICAgIGRldmVsb3BlcnMgYWRkaW5nIHJlc291cmNlcyBvciBtYW5hZ2VyIHdpc2hpbmcgdG8ga25vdyB0aGUgc3RhdHV0cyBvZiAKKyAgICAgICAgdHJhbnNsYXRpb24gZWZmb3J0cyB3aWxsIHdvcmsgZnJvbSB0aGUgcm9vdCBsZXZlbC4gVHJhbnNsYXRvcnMgYW5kIG1hbmFnZXJzIAorICAgICAgICBvZiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGVzIHdpbGwgbW9yZSBvZnRlbiB3b3JrIGZyb20gdGhlIHJlc291cmNlIGZpbGUgCisgICAgICAgIGxldmVsLiBPbmNlIHRoZSBkaWZmZXJlbmNlIGlzIHVuZGVyc3Rvb2QsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2aWV3cyAKKyAgICAgICAgaW4gdGhlIHRhYiB3aWxsIGJlIGVhc2llciB0byB1bmRlcnN0YW5kLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJDRU5URVIiPjxBIEhSRUY9InZpZXcyLmh0bWwiPlZpZXcgMi4gVGhlIFN0YXRpc3RpY3MgVGFiPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3Mi5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQ5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzIuaHRtbApAQCAtMCwwICsxLDE2MSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gVGhlIFN0YXRpc3RpY3MgVGFiPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi90dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPlZpZXcgMi4gVGhlIFN0YXRpc3RpY3MgVGFiPC9IMz4KKyAgICAgIDxQPlRoZSBmaXJzdCB0YWIgb24gdGhlIHJpZ2h0IHBhbmVsIG9mIHRoZSBSQiBNYW5hZ2VyIGFwcGxpY2F0aW9uIGlzIHRoZSAKKyAgICAgICAgU3RhdGlzdGljcyB0YWIuIEFzIHdpdGggYWxsIG9mIHRoZSB0YWIgdmlld3MsIHRoZSBzdGF0aXN0aWNzIHRhYiBsb29rcyAKKyAgICAgICAgYW5kIGZ1bmN0aW9ucyBkaWZmZXJlbnRseSB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgcmVzb3VyY2UgYnVuZGxlIGFzIGEgd2hvbGUgCisgICAgICAgIHRoYW4gd2hlbiB3b3JraW5nIHdpdGggYW4gaW5kaXZpZHVhbCByZXNvdXJjZSBmaWxlLiBGb3IgYW4gb3ZlcnZpZXcgb2YgCisgICAgICAgIHRoaXMgZGlmZmVyZW5jZSBzZWUgPEEgSFJFRj0idmlldzEuaHRtbCI+VmlldyAxPC9BPi48L1A+CisgICAgICA8UD48Qj5Xb3JraW5nIHdpdGggYSBSZXNvdXJjZSBCdW5kbGU8L0I+PC9QPgorICAgICAgPFA+VGhlIHNjcmVlbiBzaG90IGJlbG93IHNob3dzIFJCIE1hbmFnZXIgYW5kIHNvbWUgc3RhdGlzdGljcyBjb25jZXJuaW5nIAorICAgICAgICB0aGUgcmVzb3VyY2UgYnVuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb24uPC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2J1bmRsZS5naWYiIFdJRFRIPSI2NDIiIEhFSUdIVD0iNTQzIj48L1A+CisgICAgICA8UD5UaHJlZSBiYXNpYyBhcmVhcyBhcmUgY292ZXJlZCBieSB0aGlzIHZpZXcsIFJlc291cmNlIEZpbGVzLCBSZXNvdXJjZSAKKyAgICAgICAgR3JvdXBzLCBhbmQgUmVzb3VyY2UgSXRlbXMuPC9QPgorICAgICAgPFA+SW4gdGhlIFJlc291cmNlIEZpbGVzIHNlY3Rpb24sIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaXZpZHVhbCBmaWxlcyBpcyAKKyAgICAgICAgc2hvd24gYXMgd2VsbCBhcyB0aGUgbmFtZXMgb2YgdGhlc2UgZmlsZXMgKG1hZGUgdXAgb2YgdGhlIGxhbmd1YWdlLCBjb3VudHJ5LCAKKyAgICAgICAgYW5kIHZhcmlhbnQgaW5mb3JtYXRpb24ga25vd24gYWJvdXQgdGhlIGZpbGVzKS4gTmV3IHJlc291cmNlIGZpbGVzIGNhbiAKKyAgICAgICAgYmUgYWRkZWQgdG8gdGhlIGJ1bmRsZSBieSBwcmVzc2luZyB0aGUgJ0FkZCBhIE5ldyBSZXNvdXJjZSBGaWxlJyBidXR0b24gCisgICAgICAgIG9yIHVzaW5nIHRoZSBhY2NlbGVyYXRvciBrZXkgKGluIHRoaXMgY2FzZSAnTicpIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIAorICAgICAgICBieSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uIE5ldyBmaWxlcyBjYW4gYWxzbyBiZSBhZGRlZCB0aHJvdWdoIHRoZSBPcHRpb25zIAorICAgICAgICBtZW51LjwvUD4KKyAgICAgIDxQPkluIHRoZSBSZXNvdXJjZSBHcm91cHMgc2VjdGlvbiwgdGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgYXNzb2NpYXRlZCAKKyAgICAgICAgd2l0aCB0aGUgYnVuZGxlIGFzIHdlbGwgYXMgYW4gYWxwaGFiZXRpY2FsIGxpc3Qgb2YgdGhlIGdyb3VwcyBpcyBkaXNwbGF5ZWQuIAorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSZXNvdXJjZSBHcm91cHMsIHNlZSB0aGUgPEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+LiAKKyAgICAgICAgTmV3IGdyb3VwcyBjYW4gYmUgY3JlYXRlZCBieSBwcmVzc2luZyB0aGUgJ0FkZCBhIE5ldyBSZXNvdXJlY2UgR3JvdXAnIAorICAgICAgICBidXR0b24uIFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmcm9tIHRoZSBPcHRpb25zIG1lbnUgb3IgdGhlIEdyb3VwcyB0YWIgCisgICAgICAgIHZpZXcuPC9QPgorICAgICAgPFA+SW4gdGhlIFJlc291cmNlIEl0ZW1zIHZpZXcsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBidW5kbGUgCisgICAgICAgIGlzIGRpc3BsYXllZC4gVGhpcyBudW1iZXIgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgYmFzZSAKKyAgICAgICAgY2xhc3MgZmlsZSwgYXMgdGhlIG90aGVyIHJlc291cmNlIGZpbGVzIGFyZSBub3QgcmVxdWlyZWQgdG8gcG9zc2VzIGFsbCAKKyAgICAgICAgb2YgdGhlIHJlc291cmNlIGl0ZW1zLiBJbiBhZGRpdGlvbiwgdGhlIG51bWJlciBvZiBkdXBsaWNhdGVkIHJlc291cmNlIAorICAgICAgICBrZXlzIGlzIGRpc3BsYXllZC4gVGhpcyBudW1iZXIgc2hvdWxkIGJlIHplcm8gb3IgdGhlIHJlc291cmNlIGJ1bmRsZSBtYXkgCisgICAgICAgIG5vdCBmdW5jdGlvbiB0aGUgd2F5IGl0IHdhcyBpbnRlbmRlZCB0by4gVGhlIGxpc3QgYm94IHdpbGwgZGlzcGxheSB0aGUgCisgICAgICAgIG5hbWVzIG9mIHRoZSBkdXBsaWNhdGVkIGtleXMsIHNvIHRoYXQgdGhlIGVycm9ycyBjYW4gYmUgcmVtb3ZlZC4gTm90ZSAKKyAgICAgICAgdGhhdCBpZiB5b3UgY3JlYXRlIHlvdXIgUmVzb3VyY2UgQnVuZGxlcyB0aHJvdWdoIFJCIE1hbmFnZXIsIHlvdSBzaG91bGQgCisgICAgICAgIG5ldmVyIGhhdmUgZHVwbGljYXRlIGtleXMuIEhvd2V2ZXIsIGlmIHlvdSBpbXBvcnRlZCB0aGUgYnVuZGxlcyBmcm9tIGFub3RoZXIgCisgICAgICAgIHNvdXJjZSwgdGhpcyBlcnJvciBjYW4gYmUgYSBjb21tb24gb25lLjwvUD4KKyAgICAgIDxQPjxCPldvcmtpbmcgd2l0aCBhIFJlc291cmNlIEZpbGU8L0I+PC9QPgorICAgICAgPFA+VGhlIHNjcmVlbiBzaG90IGJlbG93IHNob3dzIHRoZSBzdGF0aXN0aWNzIHZpZXcgZm9yIGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgCisgICAgICAgIGZpbGUsIGluIHRoaXMgY2FzZSB0aGUgR2VybWFuIChEZXV0c2NoKSBmaWxlLiBGb3Igb3VyIGV4YW1wbGUsIEkgaGF2ZSAKKyAgICAgICAgcmVtb3ZlZCBzb21lIG9mIHRoZSB0cmFuc2xhdGlvbnMgZnJvbSB0aGlzIGZpbGUuPC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2ZpbGUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyI+PC9QPgorICAgICAgPFA+VGhpcyB2aWV3IHNob3dzIHNvbWUgbWV0YSBkYXRhIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBSZXNvdXJjZSBGaWxlLiAKKyAgICAgICAgVGhpcyBtZXRhIGRhdGEgaGFzIGFic29sdXRlbHkgbm8gaW1wYWN0IG9uIHRoZSBmdW5jdGlvbmluZyBvZiB0aGUgcmVzb3VyY2UgCisgICAgICAgIGJ1bmRsZSB3aXRoaW4gYW4gYXBwbGljYXRpb24uIEl0IGlzIHRoZXJlIHNvbGVseSB0byBhaWQgZGV2ZWxvcG1lbnQgYW5kIAorICAgICAgICB0cmFuc2xhdGlvbiB0ZWFtcyBpbiBtYW5hZ2luZyB0aGVpciBlZmZvcnRzLjwvUD4KKyAgICAgIDxQPlRoZSBSZXNvdXJjZSBUaXRsZSBpcyBhIHdheSB0byBpZGVudGlmeSB0aGlzIGZpbGUgYW5kIHdpbGwgc2hvdyBhdCB0aGUgCisgICAgICAgIHRvcCBvZiBtb3N0IHZpZXdzIHdoZW4gd29ya2luZyB3aXRoIGEgcmVzb3VyY2UgZmlsZS4gVGhlIENvbW1lbnQgY2FuIGJlIAorICAgICAgICB1c2VkIHRvIHNwZWNpZnkgYW55dGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGZpbGUuIFRoZSBSZXNvdXJjZSBGaWxlIE1hbmFnZXIgCisgICAgICAgIGlzIHRoZSBwZXJzb24gaW4gY2hhcmdlIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgICAgdGhlIGZpbGUuIFRoZSBMYW5ndWFnZSwgQ291bnRyeSwgYW5kIFZhcmlhbnQgcmVwcmVzZW50IHRoZSBsb25nIG5hbWVzIAorICAgICAgICAoaS5lLiBub3QgdGhlIElTTyBlbmNvZGluZ3MpIG9mIHRoZSBsYW5ndWFnZSwgY291bnRyeSwgYW5kIHZhcmlhbnQgYXNzb2NpYXRlIAorICAgICAgICB3aXRoIHRoZSBmaWxlLiBUaGVzZSBhcmUgdGhlIG5hbWVzIHRoYXQgc2hvdyB1cCBpbiB0aGUgUmVzb3VyY2UgVHJlZS48L1A+CisgICAgICA8UD5BbHNvIGRpc3BsYXllZCBmb3IgdGhlIHNlbGVjdGVkIGZpbGUgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB0cmFuc2xhdGlvbnMgCisgICAgICAgIGluIHRoaXMgZmlsZS4gVGhpcyBudW1iZXIgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIAorICAgICAgICB0cmFuc2xhdGlvbnMgaW4gdGhlIGJ1bmRsZS4gVGhlIG51bWJlciBvZiB1bnRyYW5zbGF0ZWQgcmVzb3VyY2UgaXRlbXMgCisgICAgICAgIGlzIGFsc28gc2hvd24uIFRoZXNlIHN0YXRpc3RpY3MgYXJlIHVzZWZ1bCBpbiBtb25pdG9yaW5nIHRoZSBwcm9ncmVzcyAKKyAgICAgICAgb2YgdHJhbnNsYXRpb24uIFRvIHdvcmsgd2l0aCB0aGUgdW50cmFuc2xhdGVkIGl0ZW1zLCBhIGNvbnZlbmllbnQgdmlldyAKKyAgICAgICAgaXMgZ2l2ZW4gaW4gdGhlIFVudHJhbnNsYXRlZCB0YWIgdmlldy48L1A+CisgICAgICA8UCBBTElHTj0iQ0VOVEVSIj48QSBIUkVGPSJ2aWV3My5odG1sIj5WaWV3IDMuIFRoZSBVbnRyYW5zbGF0ZWQgVGFiPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3My5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EyYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzMuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gVGhlIFVudHJhbnNsYXRlZCBUYWI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+VmlldyAzLiBUaGUgVW50cmFuc2xhdGVkIFRhYjwvSDM+CisgICAgICA8UD5UaGUgVW50cmFuc2xhdGVkIHRhYiB2aWV3LCBsaWtlIGFsbCB0YWIgdmlld3MsIGxvb2tzIGFuZCBmdW5jdGlvbnMgZGlmZmVyZW50bHkgCisgICAgICAgIHdoZW4gd29ya2luZyB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZSB0aGFuIHdoZW4gd29ya2luZyB3aXRoIAorICAgICAgICBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIEZvciBhbiBvdmVydmlldyBvZiB0aGlzIGRpZmZlcmVuY2Ugc2VlIDxBIEhSRUY9InZpZXcxLmh0bWwiPlZpZXcgCisgICAgICAgIDE8L0E+LiBUaGUgVW50cmFuc2xhdGVkIHRhYiB2aWV3IGlzIG1vc3Qgb2Z0ZW4gdXNlZCB3aGVuIHdvcmtpbmcgd2l0aCAKKyAgICAgICAgaW5kaXZpZHVhbCByZXNvdXJjZSBmaWxlcywgYW5kIGlzIHByb2JhYmx5IHRoZSBsYXJnZXN0IGNvbnZlbmllbmNlIHRoYXQgCisgICAgICAgIFJCIE1hbmFnZXIgb2ZmZXJzIG92ZXIgb3RoZXIgbWV0aG9kcyBvZiB3b3JraW5nIHdpdGggcmVzb3VyY2UgYnVuZGxlcy48L1A+CisgICAgICA8UD48Qj5Xb3JraW5nIHdpdGggYSBSZXNvdXJjZSBCdW5kbGU8L0I+PC9QPgorICAgICAgPFA+VGhlIHNjcmVlbiBzaG90IGJlbG93IHNob3dzIFJCIE1hbmFnZXIgYW5kIGEgdmlldyBvZiB1bnRyYW5zbGF0ZWQgaXRlbXMgCisgICAgICAgIGZvciB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZS48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19idW5kbGUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyI+PC9QPgorICAgICAgPFA+RnJvbSB0aGlzIHZpZXcsIHJlc291cmNlIGJ1bmRsZXMgY2FuIG5vdCBiZSBlZGl0ZWQuIFRvIGRvIHRoaXMgeW91IGVpdGhlciAKKyAgICAgICAgaGF2ZSB0byBnbyB0byB0aGUgR3JvdXBzIHRhYiB2aWV3IG9yIHNlbGVjdCBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIAorICAgICAgICBUaGUgdmlldyBpcyB1c2VmdWwgdGhvdWdoIGZvciBnZXR0aW5nIGEgcGljdHVyZSBvZiB0aGUgdHJhbnNsYXRpb24gc3RhdHVzIAorICAgICAgICBvZiB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZS48L1A+CisgICAgICA8UD5JbiB0aGlzIHZpZXcsIGVhY2ggb2YgdGhlIHJlc291cmNlIGZpbGVzIGlzIHJlcHJlc2VudGVkIGFuZCB0aGUgbnVtYmVyIAorICAgICAgICBvZiB1bnRyYW5zbGF0ZWQgaXRlbXMgaXMgZGlzcGxheWVkIGFzIHdlbGwgYXMgdGhlIHJlc291cmNlIGtleSBmb3IgZWFjaCAKKyAgICAgICAgb2YgdGhvc2UgaXRlbXMuIFNjcm9sbGluZyB1cCBhbmQgZG93biB0aGUgdmlldyBnaXZlcyBhIGNvbXBsZXRlIGxvb2sgYXQgCisgICAgICAgIHRoZSB2YXJpb3VzIGZpbGVzLjwvUD4KKyAgICAgIDxQPjxCPldvcmtpbmcgd2l0aCBhIFJlc291cmNlIEZpbGU8L0I+PC9QPgorICAgICAgPFA+VGhlIG5leHQgc2NyZWVuIHNob3Qgc2hvd3MgdGhlIFVudHJhbnNsYXRlZCB0YWIgdmlldyB3aGVuIHdvcmtpbmcgd2l0aCAKKyAgICAgICAgYW4gaW5kaXZpZHVhbCByZXNvdXJjZSBmaWxlLiBUaGlzIGlzIHRoZSB2aWV3IHRyYW5zbGF0b3JzIHdpbGwgcHJvYmFibHkgCisgICAgICAgIHVzZSB0aGUgbW9zdC48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19maWxlLmdpZiIgV0lEVEg9IjY3MSIgSEVJR0hUPSI1NDMiPjwvUD4KKyAgICAgIDxQPkxpc3RlZCBpbiB0aGUgdGFibGUgaXMgZWFjaCBvZiB0aGUgcmVzb3VyY2UgY3VycmVudGx5IG1hcmtlZCBhcyB1bnRyYW5zbGF0ZWQgCisgICAgICAgIChmb3IgbW9yZSBvbiB0aGUgbWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHJlc291cmNlLCBzZWUgdGhlIDxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPikuIAorICAgICAgICBUaGUgdGFibGUgc2hvd3MgdGhlIHJlc291cmNlIGtleSBhbmQgZ3JvdXAgb2YgdGhlIHJlc291cmNlLCB3aGljaCBjYW4gCisgICAgICAgIG5vdCBiZSBlZGl0ZWQgZnJvbSBhIHJlc291cmNlIGZpbGUgdmlldywgYW5kIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgcmVzb3VyY2UsIAorICAgICAgICB3aGljaCBjYW4gYmUgZWRpdGVkIGhlcmUuPC9QPgorICAgICAgPFA+VG8gdHJhbnNsYXRlIGEgcmVzb3VyY2UsIHNpbXBseSBkb3VibGUgY2xpY2sgdGhlIHJvdyBjb250YWluaW5nIHRoZSByZXNvdXJjZS4gCisgICAgICAgIEEgZGlhbG9nIGJveCB3aWxsIHBvcCB1cCBhbGxvd2luZyB0aGUgcmVzb3VyY2UgZmlsZSBzcGVjaWZpYyBlbGVtZW50cyAKKyAgICAgICAgb2YgdGhlIHJlc291cmNlIHRvIGJlIGVkaXRlZC4gVGhhdCBkaWFsb2cgYm94IGlzIHNob3duIGhlcmUuIEl0cyB1c2UgY2FuIAorICAgICAgICBiZSBmb3VuZCBpbiB0aGUgVHV0b3JpYWwuPC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfZGlhbG9nMC5naWYiIFdJRFRIPSI1MTMiIEhFSUdIVD0iMjY5Ij48L1A+CisgICAgICA8UD5JbiBzb21lIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gbGVhdmUgdGhlIHRyYW5zbGF0aW9uIGFzIGl0IHN0YW5kcy4gVGhpcyAKKyAgICAgICAgaXMgY29tbW9uIGZvciBpbnN0YW5jZSB3aGVuIHdvcmtpbmcgd2l0aCB2YXJpYW50cyBvZiBhIGxhbmd1YWdlIHdpdGggbGl0dGxlIAorICAgICAgICBjaGFuZ2UgZnJvbSB0aGUgbGFuZ3VhZ2UgcGFyZW50IChlLmcuIENhbmFkaWFuIEVuZ2xpc2ggYW5kIFUuUy4gRW5nbGlzaCAKKyAgICAgICAgaGF2ZSByZWxhdGl2ZWx5IGZldyBkaWZmZXJlbmNlcykuPC9QPgorICAgICAgPFA+VGhlcmUgYXJlIHR3byB3YXlzIHRvIGhhbmRsZSB0aGlzLiBPbmUgd2F5IGlzIHRvIHNlbGVjdCB0aGUgcmVzb3VyY2UgCisgICAgICAgIGFuZCBtYXJrIGl0IGFzIHRyYW5zbGF0ZWQuIFRoaXMgY2FuIGJlIGRvbmUgYnkgcHJlc3NpbmcgdGhlICdNYXJrIFJlc291cmNlIAorICAgICAgICBhcyBUcmFuc2xhdGVkJyBidXR0b24gb3IgZG91YmxlIGNsaWNraW5nIHRoZSByZXNvdXJjZSwgY2hlY2tpbmcgdGhlICdUcmFuc2xhdGVkJyAKKyAgICAgICAgY2hlY2sgYm94IGFuZCBjbGlja2luZyB0aGUgJ0VkaXQnIGJ1dHRvbi4gVGhlIG90aGVyIHdheSBpcyB0byByZW1vdmUgdGhlIAorICAgICAgICByZXNvdXJjZSBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGJ5IHNlbGVjdGluZyB0aGUgcmVzb3VyY2UgYW5kIGNsaWNraW5nIAorICAgICAgICAnRGVsZXRlIFJlc291cmNlJy48L1A+CisgICAgICA8UD5FaXRoZXIgd2F5LCB0aGUgcmVzb3VyY2UgYnVuZGxlIHNob3VsZCBhY3QgdGhlIHNhbWUgd2hlbiBwcmVzZW50aW5nIHRyYW5zbGF0aW9ucyAKKyAgICAgICAgdG8gdGhlIHVzZXIuIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIHRyYW5zbGF0aW9uIGZyb20gdGhlIHJlc291cmNlIGZpbGUgCisgICAgICAgIGlzIHVzZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHRyYW5zbGF0aW9uIGZhbGxzIGJhY2sgdG8gdGhlIG9uZSBmb3VuZCAKKyAgICAgICAgaW4gYW4gYW5jZXN0b3IgcmVzb3VyY2UgZmlsZS48L1A+CisgICAgICA8UD5Ob3RlIHRoYXQgb25seSBvbmUgcmVzb3VyY2UgY2FuIGJlIGVkaXRlZCBhdCBhIHRpbWUgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiAKKyAgICAgICAgb2YgUkIgTWFuYWdlci4gRnV0dXJlIHZlcnNpb25zIHdpbGwgYWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9ucyBvZiByZXNvdXJjZXMgCisgICAgICAgIGluIHRoaXMgdmlldy48L1A+CisgICAgICA8UCBBTElHTj0iQ0VOVEVSIj48QSBIUkVGPSJ2aWV3NC5odG1sIj5WaWV3IDQuIFRoZSBHcm91cHMgVGFiPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3NC5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmU0MjkyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzQuaHRtbApAQCAtMCwwICsxLDE0NSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gVGhlIEdyb3VwcyBUYWI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+VmlldyA0LiBUaGUgR3JvdXBzIFRhYjwvSDM+CisgICAgICA8UD5UaGUgR3JvdXBzIHRhYiB2aWV3LCBsaWtlIGFsbCB0YWIgdmlld3MsIGxvb2tzIGFuZCBmdW5jdGlvbnMgZGlmZmVyZW50bHkgCisgICAgICAgIHdoZW4gd29ya2luZyB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZSB0aGFuIHdoZW4gd29ya2luZyB3aXRoIAorICAgICAgICBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIEZvciBhbiBvdmVydmlldyBvZiB0aGlzIGRpZmZlcmVuY2Ugc2VlIDxBIEhSRUY9InZpZXcxLmh0bWwiPlZpZXcgCisgICAgICAgIDE8L0E+LiBSQiBNYW5hZ2VyIGFkZHMgYSBsZXZlbCBvZiBoZWlyYXJjaHkgbm90IGNvbW1vbmx5IGZvdW5kIGluIHJlc291cmNlIAorICAgICAgICBidW5kbGVzLiBUaGlzIGFkZHRpb25hbCBsZXZlbCBpcyBjYWxsZWQgR3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAKKyAgICAgICAgUmVzb3VyY2UgR3JvdXBzIHNlZSB0aGUgPEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+LjwvUD4KKyAgICAgIDxQPjxCPldvcmtpbmcgd2l0aCBhIFJlc291cmNlIEJ1bmRsZTwvQj48L1A+CisgICAgICA8UD5UaGUgc2NyZWVuIHNob3QgYmVsb3cgc2hvd3MgUkIgTWFuYWdlciBhbmQgYSB2aWV3IG9mIGdyb3VwcyBmb3IgdGhlIGVudGlyZSAKKyAgICAgICAgcmVzb3VyY2UgYnVuZGxlLjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfYnVuZGxlLmdpZiIgV0lEVEg9IjY3MSIgSEVJR0hUPSI1NDMiPjwvUD4KKyAgICAgIDxQPlVubGlrZSB0aGUgVW50cmFuc2xhdGVkIHRhYiB2aWV3LCB0aGlzIHZpZXcgYWxsb3dzIHRoZSBlZGl0aW5nIG9mIHJlc291cmNlcy4gCisgICAgICAgIEVkaXRpbmcgb3IgYWRkaW5nIHJlc291cmNlcyBhdCB0aGlzIGxldmVsIGFmZmVjdHMgdGhlIHJlc291cmNlIGJ1bmRsZSAKKyAgICAgICAgYXMgYSB3aG9sZS4gVGh1cyBpZiBhIHJlc291cmNlIGhhcyBhbGwgcmVhZHkgYmVlbiB0cmFuc2xhdGVkIGluIGEgcmVzb3VyY2UgCisgICAgICAgIGZpbGUsIGl0IHdpbGwgYmUgbWFya2VkIGFzIHVudHJhbnNsYXRlZCB0byByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gdGhlIGVudGlyZSAKKyAgICAgICAgYnVuZGxlLjwvUD4KKyAgICAgIDxQPkVkaXRpbmcgYSByZXNvdXJjZSBpcyBhcyBzaW1wbGUgYXMgc2VsZWN0aW5nIHRoZSBncm91cCBmcm9tIHRoZSBkcm9wIAorICAgICAgICBkb3duIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIGRvdWJsZSBjbGlja2luZyBhIHJlc291cmNlLCBtYWtpbmcgCisgICAgICAgIHRoZSBkZXNpcmVkIGNoYW5nZSwgYW5kIGNsaWNraW5nICdFZGl0JyBvbiB0aGUgZGlhbG9nIGJveCByZXN1bHRpbmcgZnJvbSAKKyAgICAgICAgdGhlIGRvdWJsZSBjbGljay4gT3B0aW9uYWxseSwgdGhlIHJlc291cmNlIGNhbiBiZSBlZGl0ZWQgYnkgc2VsZWN0aW5nIAorICAgICAgICBpdCBhbmQgcHJlc3NpbmcgdGhlICdFZGl0IFJlc291cmNlJyBidXR0b24gaW5zdGVhZCBvZiBkb3VibGUgY2xpY2tpbmcuPC9QPgorICAgICAgPFA+VGhlIFJlc291cmNlIEdyb3VwIGNhbiBhbHNvIGJlIGVkaXRlZC4gVGhlIG5hbWUgYW5kIGNvbW1lbnQgYXNzb2NpYXRlIAorICAgICAgICB3aXRoIHRoZSBncm91cCBjYW4gYmUgY2hhbmdlZCBieSBwcmVzc2luZyB0aGUgJ0VkaXQgR3JvdXAnIGJ1dHRvbi4gUHJlc3NpbmcgCisgICAgICAgIHRoZSAnRGVsZXRlIEdyb3VwJyBidXR0b24gd2lsbCBkZWxldGUgYm90aCB0aGUgZ3JvdXAgYW5kIGFsbCByZXNvdXJjZXMgCisgICAgICAgIGNvbnRhaW5lZCB3aXRoaW4gaXQuIEEgZGlhbG9nIHdpbGwgcHJvbXB0IHlvdSB3aGVuIHRoaXMgYnV0dG9uIGlzIHByZXNzZWQgCisgICAgICAgIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgeW91IGludGVuZCB0byBkby48L1A+CisgICAgICA8UD5SZXNvdXJjZXMgY3JlYXRlZCBpbiB0aGUgR3JvdXAgdmlldyB3aWxsIGJ5IGRlZmF1bHQgYmUgcGxhY2VkIGluIHRoZSAKKyAgICAgICAgZ3JvdXAgY3VycmVudGx5IGJlaW5nIHNob3duLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGhvd2V2ZXIgYnkgc2VsZWN0aW5nIAorICAgICAgICBhbm90aGVyIGdyb3VwIG5hbWUgZnJvbSB0aGUgcmVzb3VyY2UgY3JlYXRpb24gZGlhbG9nIGJveC48L1A+CisgICAgICA8UD5UaGlzIHZpZXcgaXMgcHJvYmFibHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCB2aWV3IGJ5IGRldmVsb3BlcnMgaW5zZXJ0aW5nIAorICAgICAgICBuZXcgcmVzb3VyY2VzIGludG8gYSBidW5kbGUuPC9QPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoIGEgUmVzb3VyY2UgRmlsZTwvQj48L1A+CisgICAgICA8UD5UaGUgbmV4dCBzY3JlZW4gc2hvdCBzaG93cyB0aGUgR3JvdXAgdGFiIHZpZXcgd2hlbiB3b3JraW5nIHdpdGggYW4gaW5kaXZpZHVhbCAKKyAgICAgICAgcmVzb3VyY2UgZmlsZS48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfZ3JvdXBzX2ZpbGUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyI+PC9QPgorICAgICAgPFA+VGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyB2aWV3IG1vc3RseSBtaXJyb3JzIHRoYXQgb2YgdGhlIFVudHJhbnNsYXRlZCAKKyAgICAgICAgdGFiIHZpZXcuIE1vcmUgb24gdGhhdCB2aWV3IGlzIGZvdW5kIGluIDxBIEhSRUY9InZpZXczLmh0bWwiPlZpZXcgMzwvQT4uIAorICAgICAgICBUaGUgb25seSBhZGRpdGlvbiBpcyB0aGF0IHJlc291cmNlcyBhbGwgcmVhZHkgbWFya2VkIGFzIHRyYW5zbGF0ZWQgY2FuIAorICAgICAgICBiZSBzZWVuIGFuZCBlZGl0ZWQgZnJvbSB0aGlzIHZpZXcuIFNlbGVjdGluZyBhIGdyb3VwIGZyb20gdGhlIGRyb3AgZG93biAKKyAgICAgICAgYm94IHdpbGwgdXBkYXRlIHRoZSBkaXNwbGF5IHdpdGggYWxsIHJlc291cmNlcywgdHJhbnNsYXRlZCBvciBub3QsIGZyb20gCisgICAgICAgIHRoYXQgZ3JvdXAuPC9QPgorICAgICAgPFAgQUxJR049IkNFTlRFUiI+PEEgSFJFRj0idmlldzUuaHRtbCI+VmlldyA1LiBUaGUgU2VhcmNoIFRhYjwvQT48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzUuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXc1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlYzA5ZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXc1Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciAtIFRoZSBTZWFyY2ggVGFiPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi90dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPlZpZXcgNS4gVGhlIFNlYXJjaCBUYWI8L0gzPgorICAgICAgPFA+VGhlIEdyb3VwcyB0YWIgdmlldywgbGlrZSBhbGwgdGFiIHZpZXdzLCBsb29rcyBhbmQgZnVuY3Rpb25zIGRpZmZlcmVudGx5IAorICAgICAgICB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgcmVzb3VyY2UgYnVuZGxlIGFzIGEgd2hvbGUgdGhhbiB3aGVuIHdvcmtpbmcgd2l0aCAKKyAgICAgICAgYW4gaW5kaXZpZHVhbCByZXNvdXJjZSBmaWxlLiBIb3dldmVyLCB1bmxpa2UgdGhlIG90aGVyIHRhYiB2aWV3cywgdGhlIAorICAgICAgICBkaWZmZXJlbmNlcyBhcmUgbWluaW1hbC4gU2VhcmNoaW5nIGZyb20gdGhlIGJ1bmRsZSBwZXJmb3JtcyB0aGUgc2VhcmNoIAorICAgICAgICBvbiB0aGUgYmFzZSBjbGFzcyBhbmQgZWRpdHMgdG8gdGhlIGZvdW5kIHJlc291cmNlcyBhZmZlY3QgdGhlIGVudGlyZSBidW5kbGUuIAorICAgICAgICBTZWFyY2hpbmcgZnJvbSBhIHJlc291cmNlIGZpbGUgcmVzdHJpY3RzIHRoZSBzZWFyY2ggdG8gdGhhdCBmaWxlIGFuZCB0aGUgCisgICAgICAgIGNoYW5nZXMgYXJlIGFsc28gcmVzdHJpY3RlZCB0byB0aGF0IHJlc291cmNlIGZpbGUuPC9QPgorICAgICAgPFA+QSBzY3JlZW4gc2hvdCBvZiB0aGUgU2VhcmNoIHRhYiB2aWV3IGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlIGlzIGdpdmVuIAorICAgICAgICBiZWxvdy4gVGhlIHZpZXcgZm9yIHRoZSBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGVzIGlzIG5lYXJseSBpZGVudGljYWwuPC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3NlYXJjaC5naWYiIFdJRFRIPSI2NzEiIEhFSUdIVD0iNTQzIj48L1A+CisgICAgICA8UD5UaGVyZSBhcmUgdHdvIGJhc2ljIGZ1bmN0aW9ucyB0byB0aGlzIHZpZXcsIEZpbmQgQWxsIGFuZCBSZXBsYWNlIEFsbC4gCisgICAgICAgIEZpbmQgQWxsIHRha2VzIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIGl0IGFuZCBwb3B1bGF0ZXMgdGhlIHJlc3VsdCB0YWJsZSAKKyAgICAgICAgd2l0aCBhbnkgbWF0Y2hlcyBmb3VuZCAobm90ZSB0aGF0IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUkIgTWFuYWdlciBkb2VzIAorICAgICAgICBub3Qgc3VwcG9ydCB3aWxkIGNhcmQgY2hhcmFjdGVycyBvciByZWd1bGFyIGV4cHJlc3Npb25zKS4gVGhlIHJlc3VsdGluZyAKKyAgICAgICAgdGFibGUgY2FuIGJlIGVkaXRlZCBhcyBpbiB0aGUgb3RoZXIgdmlld3MgYnkgZG91YmxpbmcgY2xpY2tpbmcgYSByb3cgaW4gCisgICAgICAgIHRoZSB0YWJsZS48L1A+CisgICAgICA8UD5SZXBsYWNlIEFsbCB3b3JrcyBieSBmaXJzdCBmaW5kaW5nIGFsbCBvZiB0aGUgcmVzb3VyY2VzIGluIHRoZSBzYW1lIG1hbm5lciAKKyAgICAgICAgYXMgRmluZCBBbGwgYW5kIHRoZW4gcmVwbGFjaW5nIHRoZSB0ZXh0IHRoYXQgaXMgZm91bmQgd2l0aCB0aGUgdGV4dCBnaXZlbiAKKyAgICAgICAgaW4gdGhlIFJlcGxhY2UgdGV4dCBib3guIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGZpcnN0IHBlcmZvcm0gRmluZCAKKyAgICAgICAgQWxsIGJlZm9yZSBSZXBsYWNlIEFsbC4gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSQiBNYW5hZ2VyIGRvZXMgYW4gYWxsIAorICAgICAgICBvciBub3RoaW5nIHJlcGxhY2UuIEZ1dHVyZSB2ZXJzaW9ucyBtYXkgYWxsb3cgc3RlcCBieSBzdGVwIHJlcGxhY2VtZW50LjwvUD4KKyAgICAgIDxQPlVzaW5nIHRoZSBjaGVjayBib3hlcyBvbiB0aGUgcGFnZSwgeW91IGNhbiBzcGVjaWZ5IGFueSBjb21iaW5hdGlvbiBvZiAKKyAgICAgICAgdGhyZWUgcGFydHMgb2YgdGhlIHJlc291cmNlcyB0byBzZWFyY2g6IFJlc291cmNlIEtleXMsIFRyYW5zbGF0aW9ucywgYW5kIAorICAgICAgICBDb21tZW50cy4gQSBmb3VydGggY2hlY2sgYm94IGFsbG93cyB5b3UgdG8gbWFrZSB0aGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZlLjwvUD4KKyAgICAgIDxQPlRoaXMgdmlldyB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDAuM2Egb2YgUkIgTWFuYWdlci48L1A+CisgICAgICA8UCBBTElHTj0iQ0VOVEVSIj48QSBIUkVGPSJpbmRleC5odG1sIj5CYWNrIHRvIHRoZSBGdW5jdGlvbmFsaXR5IGFuZCBWaWV3IAorICAgICAgICBJbmRleCA8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQWJvdXREaWFsb2cuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQWJvdXREaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI1Y2I4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9BYm91dERpYWxvZy5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCisKKy8qKiBBIGRpYWxvZyBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYXBwbGljYXRpb24gKi8KK2NsYXNzIEFib3V0RGlhbG9nIHsKKwlwcml2YXRlIHN0YXRpYyBKRGlhbG9nIGRpYWxvZyA9IG51bGw7CisJCisJcHVibGljIHN0YXRpYyB2b2lkIHNob3dEaWFsb2coRnJhbWUgcGFyZW50KSB7CisJCWlmIChkaWFsb2cgPT0gbnVsbCkgeworCQkJZGlhbG9nID0gbmV3IEpEaWFsb2cocGFyZW50LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9hYm91dF9yYm1hbmFnZXIiKSwgZmFsc2UpOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfQorCQlkaWFsb2cuc2V0VmlzaWJsZSh0cnVlKTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJZGlhbG9nLmdldENvbnRlbnRQYW5lKCkuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIEpMYWJlbCBsb2dvTGFiZWwgPSBudWxsOworCQlKTGFiZWwgdGl0bGVMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyYm1hbmFnZXIiKSk7CisJCUpMYWJlbCB2ZXJzaW9uTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidmVyc2lvbiIsIFBhY2thZ2UuZ2V0UGFja2FnZSgiY29tLmlibS5yYm0iKS5nZXRJbXBsZW1lbnRhdGlvblZlcnNpb24oKSkpOworCQlKTGFiZWwgY29weXJpZ2h0TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiY29weXJpZ2h0IikpOworCQlKTGFiZWwgY29udGFjdExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJibWFuYWdlcl9jb250YWN0IikpOworCQlKUGFuZWwgcGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCUJveCBib3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzIHRoaXNDbGFzcyA9IENsYXNzLmZvck5hbWUoImNvbS5pYm0ucmJtLmd1aS5BYm91dERpYWxvZyIpOworCQkgICAgbG9nb0xhYmVsID0gbmV3IEpMYWJlbChuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzLyIgKworCQkJCQkJCQkJICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsb2dvX2ZpbGVuYW1lIikpKSk7CisgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworCQlib3guYWRkKHRpdGxlTGFiZWwpOworCQlib3guYWRkKHZlcnNpb25MYWJlbCk7CisJCWJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoMTApKTsKKwkJYm94LmFkZChjb3B5cmlnaHRMYWJlbCk7CisJCWJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQlib3guYWRkKGNvbnRhY3RMYWJlbCk7CisJCQorCQlwYW5lbC5hZGQoYm94KTsKKwkJZGlhbG9nLmdldENvbnRlbnRQYW5lKCkuYWRkKGxvZ29MYWJlbCwgQm9yZGVyTGF5b3V0LldFU1QpOworCQlkaWFsb2cuZ2V0Q29udGVudFBhbmUoKS5hZGQocGFuZWwsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkKKwkJZGlhbG9nLmFkZE1vdXNlTGlzdGVuZXIobmV3IE1vdXNlQWRhcHRlcigpIHsKKwkJCXB1YmxpYyB2b2lkIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBldikgeworCQkJCWhpZGVEaWFsb2coKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvL2RpYWxvZy52YWxpZGF0ZSgpOworCQlkaWFsb2cucGFjaygpOworCQlQb2ludCBwYXJlbnRMb2MgPSBkaWFsb2cuZ2V0UGFyZW50KCkuZ2V0TG9jYXRpb24oKTsKKwkJZGlhbG9nLnNldExvY2F0aW9uKG5ldyBQb2ludChwYXJlbnRMb2MueCArIDUwLCBwYXJlbnRMb2MueSArIDUwKSk7CisJCWRpYWxvZy5zZXRSZXNpemFibGUoZmFsc2UpOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhpZGVEaWFsb2coKSB7CisJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJZGlhbG9nID0gbnVsbDsKKwl9Cit9CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUdyb3VwQ3JlYXRpb25EaWFsb2cuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWQyMTIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUdyb3VwQ3JlYXRpb25EaWFsb2cuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIEEgZGlhbG9nIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYSBuZXcgQnVuZGxlIEdyb3VwCisgKi8KK2NsYXNzIEJ1bmRsZUdyb3VwQ3JlYXRpb25EaWFsb2cgZXh0ZW5kcyBKRGlhbG9nIHsKKwlSQk1hbmFnZXIgcmJtOworCQorCS8vIEhlbHBlciBkYXRhCisJaW50IGxlZnRfY29sX3dpZHRoID0gMTI1OworCWludCByaWdodF9jb2xfd2lkdGggPSAyNzU7CisJaW50IHJvd19oZWlnaHQgPSAyNTsKKwlEaW1lbnNpb24gbGVmdERpbSA9IG5ldyBEaW1lbnNpb24obGVmdF9jb2xfd2lkdGgsIHJvd19oZWlnaHQpOworCURpbWVuc2lvbiByaWdodERpbSA9IG5ldyBEaW1lbnNpb24ocmlnaHRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwkKKwkvLyBDb21wb25lbnRzCisJQm94IG1haW5Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCUJveCBib3gxID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MiA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDMgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQorCUpUZXh0QXJlYSBpbnN0cnVjdGlvbnNBcmVhID0gbmV3IEpUZXh0QXJlYSgiIik7CisJSkxhYmVsIG5hbWVMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZ3JvdXAiKSk7CisJSkxhYmVsIGNvbW1lbnRMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZ3JvdXBfY29tbWVudCIpKTsKKwlKVGV4dEZpZWxkIG5hbWVGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKCIiKTsKKwlKVGV4dEZpZWxkIGNvbW1lbnRGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKCIiKTsKKwlKQnV0dG9uIGNyZWF0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZSIpKTsKKwlKQnV0dG9uIGNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwkKKwkKKwlwdWJsaWMgQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZyhSQk1hbmFnZXIgcmJtLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5yYm0gPSByYm07CisJCWluaXRDb21wb25lbnRzKCk7CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5LRVlfRVZFTlRfTUFTSyk7CisJfQorCQorCWJvb2xlYW4gY3JlYXRlR3JvdXAoKSB7CisJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gcmJtLmNyZWF0ZUdyb3VwKG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCBjb21tZW50RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldikgeworCQlpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0VOVEVSKSB7CisJCQlib29sZWFuIHN1Y2Nlc3MgPSBjcmVhdGVHcm91cCgpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfZ3JvdXAiKSArICIgIiArCisJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl90cnlfYWdhaW5fZ3JvdXAiKTsKKwkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCX0gZWxzZSB7CisJCQkJc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJZGlzcG9zZSgpOworCQkJfQorCQl9IGVsc2UgaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19DQU5DRUwpIHsKKwkJCWNsb3NlV2luZG93KCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCl7CisJCS8vIEVycm9yIGNoZWNrCisJCWlmIChyYm0gPT0gbnVsbCkgeworCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9ub19idW5kbGVfZm9yX2dyb3VwIik7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWNsb3NlV2luZG93KCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIEluaXRpYWxpemUgdmFsdWVzCisJCQorCQkvLyBTZXQgdXAgdGhlIGNvbXBvbmVudHMKKwkJbmFtZUxhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCW5hbWVGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJY29tbWVudExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCWNvbW1lbnRGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJZ2V0Um9vdFBhbmUoKS5zZXREZWZhdWx0QnV0dG9uKGNyZWF0ZUJ1dHRvbik7CisJCQorCQlib3gxLmFkZChuYW1lTGFiZWwpOyBib3gxLmFkZChuYW1lRmllbGQpOworCQlib3gyLmFkZChjb21tZW50TGFiZWwpOyBib3gyLmFkZChjb21tZW50RmllbGQpOworCQlib3gzLmFkZChjcmVhdGVCdXR0b24pOworCQlib3gzLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJYm94My5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJCisJCWluc3RydWN0aW9uc0FyZWEuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCkpOworCQkKKwkJLy8gQWRkIHRoZSBhcHByb3ByaWF0ZSBsaXN0ZW5lcnMKKwkJY2FuY2VsQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCUpEaWFsb2cgZGlhbG9nID0gKEpEaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJCX0KKwkJfSk7CisJCQorCQljcmVhdGVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZyBkaWFsb2cgPQorCQkJCQkoQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCWJvb2xlYW4gc3VjY2VzcyA9IGRpYWxvZy5jcmVhdGVHcm91cCgpOworCQkJCWlmICghc3VjY2VzcykgeworCQkJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9ncm91cCIpICsgIiAiICsKKwkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl90cnlfYWdhaW5fZ3JvdXAiKTsKKwkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCS8vIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnJhbWUKKwkJc2V0TG9jYXRpb24obmV3IGphdmEuYXd0LlBvaW50KDUwLCA1MCkpOworCQltYWluQm94LnJlbW92ZUFsbCgpOworCQltYWluQm94LmFkZChib3gxKTsKKwkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQltYWluQm94LmFkZChib3gyKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5yZW1vdmVBbGwoKTsKKwkJLy9nZXRDb250ZW50UGFuZSgpLmFkZChpbnN0cnVjdGlvbnNBcmVhLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQoYm94MywgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCXBhY2soKTsKKwkJc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy9zZXRSZXNpemFibGUoZmFsc2UpOworCX0KKwkKKwl2b2lkIGNsb3NlV2luZG93KCkgeworCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJZGlzcG9zZSgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVHcm91cEVkaXREaWFsb2cuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlR3JvdXBFZGl0RGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3NGJlZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlR3JvdXBFZGl0RGlhbG9nLmphdmEKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLyoqCisgKiBBIGRpYWxvZyB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIGEgbmV3IEJ1bmRsZSBHcm91cAorICovCitjbGFzcyBCdW5kbGVHcm91cEVkaXREaWFsb2cgZXh0ZW5kcyBKRGlhbG9nIHsKKwlCdW5kbGVHcm91cCBncm91cDsKKwkKKwkvLyBIZWxwZXIgZGF0YQorCWludCBsZWZ0X2NvbF93aWR0aCA9IDEyNTsKKwlpbnQgcmlnaHRfY29sX3dpZHRoID0gMjc1OworCWludCByb3dfaGVpZ2h0ID0gMjU7CisJRGltZW5zaW9uIGxlZnREaW0gPSBuZXcgRGltZW5zaW9uKGxlZnRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwlEaW1lbnNpb24gcmlnaHREaW0gPSBuZXcgRGltZW5zaW9uKHJpZ2h0X2NvbF93aWR0aCwgcm93X2hlaWdodCk7CisJCisJLy8gQ29tcG9uZW50cworCUJveCBtYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwlCb3ggYm94MSA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDIgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gzID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkKKwlKTGFiZWwgbmFtZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19ncm91cCIpKTsKKwlKTGFiZWwgY29tbWVudExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19ncm91cF9jb21tZW50IikpOworCUpUZXh0RmllbGQgbmFtZUZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgY29tbWVudEZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpCdXR0b24gZWRpdEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXQiKSk7CisJSkJ1dHRvbiBjYW5jZWxCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jYW5jZWwiKSk7CisJCisJCisJcHVibGljIEJ1bmRsZUdyb3VwRWRpdERpYWxvZyhCdW5kbGVHcm91cCBncm91cCwgSkZyYW1lIGZyYW1lLCBTdHJpbmcgdGl0bGUsIGJvb2xlYW4gbW9kYWwpIHsKKwkJc3VwZXIoZnJhbWUsIHRpdGxlLCBtb2RhbCk7CisJCXRoaXMuZ3JvdXAgPSBncm91cDsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwkJZW5hYmxlRXZlbnRzKEFXVEV2ZW50LktFWV9FVkVOVF9NQVNLKTsKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRU5URVIpIHsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGVkaXRHcm91cCgpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9tb2RpZnlfZ3JvdXAiKTsKKwkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9pbnRlcm5hbCIpLAorCQkJCQkJCQkJCQkgIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJfSBlbHNlIHsKKwkJCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaXNwb3NlKCk7CisJCQl9CisJCX0gZWxzZSBpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NBTkNFTCkgeworCQkJY2xvc2VXaW5kb3coKTsKKwkJfQorCX0KKwkKKwlib29sZWFuIGVkaXRHcm91cCgpIHsKKwkJaWYgKGdyb3VwID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJZ3JvdXAuc2V0TmFtZShuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7CisJCWdyb3VwLnNldENvbW1lbnQoY29tbWVudEZpZWxkLmdldFRleHQoKS50cmltKCkpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCl7CisJCS8vIEVycm9yIGNoZWNrCisJCWlmIChncm91cCA9PSBudWxsKSB7CisJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX21vZGlmeV9ncm91cCIpOworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgYWxlcnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfaW50ZXJuYWwiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQljbG9zZVdpbmRvdygpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkvLyBJbml0aWFsaXplIHZhbHVlcworCQkKKwkJLy8gU2V0IHVwIHRoZSBjb21wb25lbnRzCisJCW5hbWVMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQluYW1lRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCWNvbW1lbnRMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQljb21tZW50RmllbGQuc2V0Q29sdW1ucygzMCk7CisJCQorCQluYW1lRmllbGQuc2V0VGV4dChncm91cC5nZXROYW1lKCkpOworCQljb21tZW50RmllbGQuc2V0VGV4dChncm91cC5nZXRDb21tZW50KCkpOworCQlnZXRSb290UGFuZSgpLnNldERlZmF1bHRCdXR0b24oZWRpdEJ1dHRvbik7CisJCQorCQlib3gxLmFkZChuYW1lTGFiZWwpOyBib3gxLmFkZChuYW1lRmllbGQpOworCQlib3gyLmFkZChjb21tZW50TGFiZWwpOyBib3gyLmFkZChjb21tZW50RmllbGQpOworCQlib3gzLmFkZChlZGl0QnV0dG9uKTsKKwkJYm94My5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCWJveDMuYWRkKGNhbmNlbEJ1dHRvbik7CisJCQorCQkvLyBBZGQgdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVycworCQljYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJSkRpYWxvZyBkaWFsb2cgPSAoSkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJfQorCQl9KTsKKwkJCisJCWVkaXRCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJQnVuZGxlR3JvdXBFZGl0RGlhbG9nIGRpYWxvZyA9CisJCQkJCShCdW5kbGVHcm91cEVkaXREaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQlib29sZWFuIHN1Y2Nlc3MgPSBkaWFsb2cuZWRpdEdyb3VwKCk7CisJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfbW9kaWZ5X2dyb3VwIik7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKGRpYWxvZywgYWxlcnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfaW50ZXJuYWwiKSwKKwkJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCQorCQkvLyBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZyYW1lCisJCXNldExvY2F0aW9uKG5ldyBqYXZhLmF3dC5Qb2ludCg1MCwgNTApKTsKKwkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJbWFpbkJveC5hZGQoYm94MSk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94Mik7CisJCWdldENvbnRlbnRQYW5lKCkuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCWdldENvbnRlbnRQYW5lKCkucmVtb3ZlQWxsKCk7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChib3gzLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcGFjaygpOworCQlzZXRWaXNpYmxlKHRydWUpOworCQkvL3NldFJlc2l6YWJsZShmYWxzZSk7CisJfQorCQorCXZvaWQgY2xvc2VXaW5kb3coKSB7CisJCXNldFZpc2libGUoZmFsc2UpOworCQlkaXNwb3NlKCk7CisJfQorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzMzYmFkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cuamF2YQpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIEEgZGlhbG9nIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYSBuZXcgQnVuZGxlIEl0ZW0KKyAqLworY2xhc3MgQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyB7CisJUkJNYW5hZ2VyIHJibTsKKwlTdHJpbmcgZ3JvdXBOYW1lOworCUJ1bmRsZUl0ZW0gaXRlbTsKKwlib29sZWFuIGZpcnN0SW5pdCA9IHRydWU7CisJCisJLy8gSGVscGVyIGRhdGEKKwlpbnQgbGVmdF9jb2xfd2lkdGggPSAxMjU7CisJaW50IHJpZ2h0X2NvbF93aWR0aCA9IDI3NTsKKwlpbnQgcm93X2hlaWdodCA9IDI1OworCURpbWVuc2lvbiBsZWZ0RGltID0gbmV3IERpbWVuc2lvbihsZWZ0X2NvbF93aWR0aCwgcm93X2hlaWdodCk7CisJRGltZW5zaW9uIHJpZ2h0RGltID0gbmV3IERpbWVuc2lvbihyaWdodF9jb2xfd2lkdGgsIHJvd19oZWlnaHQpOworCQorCS8vIENvbXBvbmVudHMKKwlCb3ggbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJQm94IGJveDEgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gyID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MyA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDQgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3g1ID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94NiA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJCisJSkxhYmVsIGluc3RydWN0aW9uc0xhYmVsID0gbmV3IEpMYWJlbCgiIik7CisJSkxhYmVsIGdyb3VwTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2dyb3VwIikpOworCUpMYWJlbCBuYW1lTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2tleSIpKTsKKwlKTGFiZWwgdHJhbnNMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdHJhbnNsYXRpb24iKSk7CisJSkxhYmVsIGNvbW1lbnRMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfY29tbWVudCIpKTsKKwlKTGFiZWwgbG9va3VwTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2xvb2t1cHMiKSk7CisJCisJSkNvbWJvQm94IGdyb3VwQ29tYm9Cb3ggPSBuZXcgSkNvbWJvQm94KCk7CisJSlRleHRGaWVsZCBuYW1lRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCB0cmFuc0ZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgY29tbWVudEZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgbG9va3VwRmllbGRzW10gPSBudWxsOworCUpMYWJlbCBub0xvb2t1cExhYmVsID0gbnVsbDsKKwlCb3ggbG9va3VwQm94ID0gbnVsbDsKKwlCb3ggbG9va3VwQm94ZXNbXSA9IG51bGw7CisJSkxhYmVsIGxvb2t1cExhYmVsc1tdID0gbnVsbDsKKwkKKwlKQnV0dG9uIGNyZWF0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZSIpKTsKKwlKQnV0dG9uIGNyZWF0ZU1vcmVCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfbW9yZSIpKTsKKwlKQnV0dG9uIGNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwkKKwlIYXNodGFibGUgbG9va3VwcyA9IG5ldyBIYXNodGFibGUoKTsKKwkKKwlwdWJsaWMgQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nKFJCTWFuYWdlciByYm0sIEpGcmFtZSBmcmFtZSwgU3RyaW5nIHRpdGxlLCBib29sZWFuIG1vZGFsKSB7CisJCXN1cGVyKGZyYW1lLCB0aXRsZSwgbW9kYWwpOworCQl0aGlzLnJibSA9IHJibTsKKwkJZ3JvdXBOYW1lID0gbnVsbDsKKwkJaXRlbSA9IG51bGw7CisJCWluaXRDb21wb25lbnRzKCk7CisJfQorCQorCXB1YmxpYyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coU3RyaW5nIGdyb3VwTmFtZSwgUkJNYW5hZ2VyIHJibSwgSkZyYW1lIGZyYW1lLCBTdHJpbmcgdGl0bGUsIGJvb2xlYW4gbW9kYWwpIHsKKwkJc3VwZXIoZnJhbWUsIHRpdGxlLCBtb2RhbCk7CisJCXRoaXMucmJtID0gcmJtOworCQl0aGlzLmdyb3VwTmFtZSA9IGdyb3VwTmFtZTsKKwkJaXRlbSA9IG51bGw7CisJCWluaXRDb21wb25lbnRzKCk7CisJfQorCQorCXB1YmxpYyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coQnVuZGxlSXRlbSBpdGVtLCBSQk1hbmFnZXIgcmJtLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5pdGVtID0gaXRlbTsKKwkJdGhpcy5yYm0gPSByYm07CisJCWdyb3VwTmFtZSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCk7CisJCWluaXRDb21wb25lbnRzKCk7CisJfQorCQorCWJvb2xlYW4gY3JlYXRlSXRlbSgpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisJCUhhc2h0YWJsZSBsb29rdXBIYXNoID0gbmV3IEhhc2h0YWJsZSgpOworCQlpZiAobG9va3VwQm94ZXMgIT0gbnVsbCkgeworCQkJZm9yIChpbnQgaT0wOyBpIDwgbG9va3VwQm94ZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlTdHJpbmcgbmFtZVRleHQgPSBsb29rdXBMYWJlbHNbaV0uZ2V0VGV4dCgpLnRyaW0oKTsKKwkJCQlTdHJpbmcgbmFtZSA9IG5hbWVUZXh0LnN1YnN0cmluZyhuYW1lVGV4dC5pbmRleE9mKCJ7IikrMSxuYW1lVGV4dC5pbmRleE9mKCJ9IikpOworCQkJCVN0cmluZyB2YWx1ZSA9IGxvb2t1cEZpZWxkc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCWxvb2t1cEhhc2gucHV0KG5hbWUsdmFsdWUpOworCQkJfQorCQl9CisJCXJldHVybiByYm0uY3JlYXRlSXRlbShuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgdHJhbnNGaWVsZC5nZXRUZXh0KCkudHJpbSgpLAorCQkJCQkJCSAgKChCdW5kbGVHcm91cClncm91cENvbWJvQm94LmdldFNlbGVjdGVkSXRlbSgpKS5nZXROYW1lKCksCisJCQkJCQkJICBjb21tZW50RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgbG9va3VwSGFzaCk7CisJfQorCQorCWJvb2xlYW4gZWRpdEl0ZW0oKSB7CisJCWlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJSGFzaHRhYmxlIGxvb2t1cEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisJCWlmIChsb29rdXBCb3hlcyAhPSBudWxsKSB7CisJCQlmb3IgKGludCBpPTA7IGkgPCBsb29rdXBCb3hlcy5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBuYW1lVGV4dCA9IGxvb2t1cExhYmVsc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCVN0cmluZyBuYW1lID0gbmFtZVRleHQuc3Vic3RyaW5nKG5hbWVUZXh0LmluZGV4T2YoInsiKSsxLG5hbWVUZXh0LmluZGV4T2YoIn0iKSk7CisJCQkJU3RyaW5nIHZhbHVlID0gbG9va3VwRmllbGRzW2ldLmdldFRleHQoKS50cmltKCk7CisJCQkJbG9va3VwSGFzaC5wdXQobmFtZSx2YWx1ZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJibS5lZGl0SXRlbShpdGVtLCBuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwKKwkJCQkJCQl0cmFuc0ZpZWxkLmdldFRleHQoKS50cmltKCksICgoQnVuZGxlR3JvdXApZ3JvdXBDb21ib0JveC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0TmFtZSgpLAorCQkJCQkJCWNvbW1lbnRGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCBsb29rdXBIYXNoKTsgCisJfQorCQorCXByaXZhdGUgdm9pZCBjbGVhckNvbXBvbmVudHMoKSB7CisJCW5hbWVGaWVsZC5zZXRUZXh0KCIiKTsKKwkJdHJhbnNGaWVsZC5zZXRUZXh0KCIiKTsKKwkJY29tbWVudEZpZWxkLnNldFRleHQoIiIpOworCQlpbml0Q29tcG9uZW50cygpOworCX0KKwkKKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzS2V5RXZlbnQoS2V5RXZlbnQgZXYpIHsKKwkJaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19FTlRFUiAmJiBldi5nZXRJRCgpID09IEtleUV2ZW50LktFWV9SRUxFQVNFRCkgeworCQkJaWYgKHRyYW5zRmllbGQuaGFzRm9jdXMoKSkgeworCQkJCS8vIElmIHdlIGFyZSBpbiB0aGUgdHJhbnNsYXRpb24gZmllbGQsIHRoZW4gZW50ZXIgc2hvdWxkIGNyZWF0ZSBhIG5ldyBsaW5lIGNoYXJhY3Rlciwgbm90IGV4aXQgdGhlIGRpYWxvZworCQkJCWludCBjYXJldFBvcyA9IHRyYW5zRmllbGQuZ2V0Q2FyZXRQb3NpdGlvbigpOworCQkJCVN0cmluZyBvbGRUZXh0ID0gdHJhbnNGaWVsZC5nZXRUZXh0KCk7CisJCQkJdHJhbnNGaWVsZC5zZXRUZXh0KG9sZFRleHQuc3Vic3RyaW5nKDAsY2FyZXRQb3MpICsgIlxuIiArIG9sZFRleHQuc3Vic3RyaW5nKGNhcmV0UG9zLG9sZFRleHQubGVuZ3RoKCkpKTsKKwkJCQl0cmFuc0ZpZWxkLnNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MrMSk7CisJCQkJdmFsaWRhdGUoKTsKKwkJCQlzZXRTaXplKGdldFByZWZlcnJlZFNpemUoKSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJCisJCQlCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cgZGlhbG9nID0gdGhpczsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOworCQkJaWYgKGRpYWxvZy5pdGVtID09IG51bGwpIHN1Y2Nlc3MgPSBkaWFsb2cuY3JlYXRlSXRlbSgpOworCQkJZWxzZSBzdWNjZXNzID0gZGlhbG9nLmVkaXRJdGVtKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlTdHJpbmcgYWxlcnQgPSAoaXRlbSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfaXRlbSIpIDoKKwkJCQkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9tb2RpZnlfaXRlbSIpKTsKKwkJCQlhbGVydCArPSAiICIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9pdGVtIik7CisJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLAorCQkJCQkJCQkJCQkgIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJfSBlbHNlIHsKKwkJCQkoKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLnVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJCQkoKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLmludmFsaWRhdGUoKTsKKwkJCQkvLygoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudmFsaWRhdGVNeVRyZWUoKTsKKwkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRVNDQVBFKSB7CisJCQljbG9zZVdpbmRvdygpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpeworCQllbmFibGVFdmVudHMoQVdURXZlbnQuS0VZX0VWRU5UX01BU0spOworCQkvLyBFcnJvciBjaGVjaworCQlpZiAocmJtID09IG51bGwgfHwgcmJtLmdldEJ1bmRsZXMoKSA9PSBudWxsKSB7CisJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX25vX2J1bmRsZV9mb3JfaXRlbSIpOworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgYWxlcnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQljbG9zZVdpbmRvdygpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkvLyBJbml0aWFsaXplIHZhbHVlcworCQlCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5maXJzdEVsZW1lbnQoKTsKKwkJaWYgKGZpcnN0SW5pdCkgeworCQkJZ3JvdXBDb21ib0JveCA9IG5ldyBKQ29tYm9Cb3gobWFpbkJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpKTsKKwkJCWlmIChncm91cE5hbWUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBDb21ib0JveC5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQkJCUJ1bmRsZUdyb3VwIGJnID0gKEJ1bmRsZUdyb3VwKWdyb3VwQ29tYm9Cb3guZ2V0SXRlbUF0KGkpOworCQkJCQlpZiAoYmcuZ2V0TmFtZSgpLmVxdWFscyhncm91cE5hbWUpKSB7CisJCQkJCQlncm91cENvbWJvQm94LnNldFNlbGVjdGVkSW5kZXgoaSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQorCQlpZiAoZmlyc3RJbml0ICYmIGl0ZW0gIT0gbnVsbCkgeworCQkJLy8gV2UgYXJlIGVkaXRpbmcsIG5vdCBjcmVhdGluZyBhbiBpdGVtCisJCQljcmVhdGVCdXR0b24uc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9lZGl0IikpOworCQkJY3JlYXRlTW9yZUJ1dHRvbi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXRfbW9yZSIpKTsKKwkJCWlmIChpdGVtLmdldEtleSgpICE9IG51bGwpIG5hbWVGaWVsZC5zZXRUZXh0KGl0ZW0uZ2V0S2V5KCkpOworCQkJaWYgKGl0ZW0uZ2V0Q29tbWVudCgpICE9IG51bGwpIGNvbW1lbnRGaWVsZC5zZXRUZXh0KGl0ZW0uZ2V0Q29tbWVudCgpKTsKKwkJCWlmIChpdGVtLmdldFRyYW5zbGF0aW9uKCkgIT0gbnVsbCkgdHJhbnNGaWVsZC5zZXRUZXh0KGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSk7CisJCQlpZiAoaXRlbS5nZXRMb29rdXBzKCkgIT0gbnVsbCkgbG9va3VwcyA9IGl0ZW0uZ2V0TG9va3VwcygpOworCQl9CisJCQorCQlTdHJpbmcgY3VycmVudFRyYW5zID0gdHJhbnNGaWVsZC5nZXRUZXh0KCk7CisJCS8vICoqIExPT0tVUFMgKioKKwkJLy8gVXBkYXRlIHRoZSBsb29rdXBzIGlmIG5lY2Vzc2FyeQorCQlpZiAobG9va3VwQm94ZXMgIT0gbnVsbCkgeworCQkJZm9yIChpbnQgaT0wOyBpIDwgbG9va3VwQm94ZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlTdHJpbmcgbmFtZVRleHQgPSBsb29rdXBMYWJlbHNbaV0uZ2V0VGV4dCgpLnRyaW0oKTsKKwkJCQlTdHJpbmcgbmFtZSA9IG5hbWVUZXh0LnN1YnN0cmluZyhuYW1lVGV4dC5pbmRleE9mKCJ7IikrMSxuYW1lVGV4dC5pbmRleE9mKCJ9IikpOworCQkJCVN0cmluZyB2YWx1ZSA9IGxvb2t1cEZpZWxkc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCWxvb2t1cHMucHV0KG5hbWUsdmFsdWUpOworCQkJfQorCQl9CisJCS8vIFJlbW92ZSBvbGQgbG9va3VwcyBpZiBuZWNlc3NhcnkKKwkJRW51bWVyYXRpb24ga2V5cyA9IGxvb2t1cHMua2V5cygpOworCQl3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKwkJCWlmIChjdXJyZW50VHJhbnMuaW5kZXhPZigieyIgKyBuYW1lICsgIn0iKSA8IDApIHsKKwkJCQlsb29rdXBzLnJlbW92ZShuYW1lKTsKKwkJCX0KKwkJfQorCQkvLyBBZGQgbmV3IGxvb2t1cHMgaWYgbmVjY2VzYXJ5CisJCWlmIChjdXJyZW50VHJhbnMgIT0gbnVsbCAmJiBjdXJyZW50VHJhbnMuaW5kZXhPZigieyIpID49IDApIHsKKwkJCXdoaWxlIChjdXJyZW50VHJhbnMuaW5kZXhPZigieyIpID49IDApIHsKKwkJCQljdXJyZW50VHJhbnMgPSBjdXJyZW50VHJhbnMuc3Vic3RyaW5nKGN1cnJlbnRUcmFucy5pbmRleE9mKCJ7IikrMSxjdXJyZW50VHJhbnMubGVuZ3RoKCkpOworCQkJCVN0cmluZyBuYW1lID0gY3VycmVudFRyYW5zLnN1YnN0cmluZygwLGN1cnJlbnRUcmFucy5pbmRleE9mKCJ9IikpOworCQkJCWlmICghbG9va3Vwcy5jb250YWluc0tleShuYW1lKSkgeworCQkJCQlsb29rdXBzLnB1dChuYW1lLCIiKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJLy8gUmVtb3ZlIGNvbXBvbmVudHMKKwkJYm94NS5yZW1vdmVBbGwoKTsKKwkJCisJCS8vIE5vdyBjcmVhdGUgdGhlIHZpc3VhbCBjb21wb25lbnRzIGZvciB0aGUgbG9va3VwcworCQlpZiAobG9va3Vwcy5zaXplKCkgPiAwKSB7CisJCQlub0xvb2t1cExhYmVsID0gbnVsbDsKKwkJCWxvb2t1cEJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQlsb29rdXBCb3hlcyA9IG5ldyBCb3hbbG9va3Vwcy5zaXplKCldOworCQkJbG9va3VwRmllbGRzID0gbmV3IEpUZXh0RmllbGRbbG9va3Vwcy5zaXplKCldOworCQkJbG9va3VwTGFiZWxzID0gbmV3IEpMYWJlbFtsb29rdXBzLnNpemUoKV07CisJCQlpbnQgY291bnQgPSAwOworCQkJa2V5cyA9IGxvb2t1cHMua2V5cygpOworCQkJd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworCQkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpbG9va3Vwcy5nZXQobmFtZSk7CisJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJMb29rdXA6ICIgKyBuYW1lICsgIiAtPiAiICsgdmFsdWUpOworCQkJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZyhsb29rdXBzLnRvU3RyaW5nKCkpOworCQkJCWxvb2t1cEJveGVzW2NvdW50XSA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJCQkJbG9va3VwRmllbGRzW2NvdW50XSA9IG5ldyBKVGV4dEZpZWxkKCh2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSkpOworCQkJCWxvb2t1cExhYmVsc1tjb3VudF0gPSBuZXcgSkxhYmVsKCJ7IiArIG5hbWUgKyAifSIpOworCQkJCWxvb2t1cEJveGVzW2NvdW50XS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworCQkJCWxvb2t1cEJveGVzW2NvdW50XS5hZGQobG9va3VwTGFiZWxzW2NvdW50XSk7CisJCQkJbG9va3VwQm94ZXNbY291bnRdLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCQlsb29rdXBCb3hlc1tjb3VudF0uYWRkKGxvb2t1cEZpZWxkc1tjb3VudF0pOworCQkJCWxvb2t1cEJveC5hZGQobG9va3VwQm94ZXNbY291bnRdKTsKKwkJCQljb3VudCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJbG9va3VwQm94ID0gbnVsbDsKKwkJCWxvb2t1cEJveGVzID0gbnVsbDsKKwkJCWxvb2t1cEZpZWxkcyA9IG51bGw7CisJCQlsb29rdXBMYWJlbHMgPSBudWxsOworCQkJbm9Mb29rdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJub25lIikpOworCQl9CisJCQorCQkvLyBTZXQgdXAgdGhlIGNvbXBvbmVudHMKKwkJaWYgKGZpcnN0SW5pdCkgeworCQkJZ3JvdXBMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkJZ3JvdXBDb21ib0JveC5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJCW5hbWVMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkJbmFtZUZpZWxkLnNldENvbHVtbnMoMzApOworCQkJY29tbWVudExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCQljb21tZW50RmllbGQuc2V0Q29sdW1ucygzMCk7CisJCQl0cmFuc0xhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCQl0cmFuc0ZpZWxkLnNldENvbHVtbnMoMzApOworCQkJbG9va3VwTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJCQorCQkJYm94MS5hZGQoZ3JvdXBMYWJlbCk7IGJveDEuYWRkKGdyb3VwQ29tYm9Cb3gpOworCQkJYm94Mi5hZGQobmFtZUxhYmVsKTsgYm94Mi5hZGQobmFtZUZpZWxkKTsKKwkJCWJveDQuYWRkKGNvbW1lbnRMYWJlbCk7IGJveDQuYWRkKGNvbW1lbnRGaWVsZCk7CisJCQlib3gzLmFkZCh0cmFuc0xhYmVsKTsgYm94My5hZGQodHJhbnNGaWVsZCk7CisJCQkKKwkJCWNyZWF0ZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV90cmlnZ2VyIikpKTsKKwkJCWNyZWF0ZU1vcmVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfbW9yZV90cmlnZ2VyIikpKTsKKwkJCWdldFJvb3RQYW5lKCkuc2V0RGVmYXVsdEJ1dHRvbihjcmVhdGVCdXR0b24pOworCQl9CisJCWJveDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsR2x1ZSgpKTsgYm94NS5hZGQobG9va3VwTGFiZWwpOyBib3g1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJaWYgKG5vTG9va3VwTGFiZWwgIT0gbnVsbCkgeworCQkJbm9Mb29rdXBMYWJlbC5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJCWJveDUuYWRkKG5vTG9va3VwTGFiZWwpOworCQl9CisJCWVsc2UKKwkJCWJveDUuYWRkKGxvb2t1cEJveCk7CisJCWlmIChmaXJzdEluaXQpIHsKKwkJCWJveDYuYWRkKGNyZWF0ZUJ1dHRvbik7CisJCQlib3g2LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCWlmIChpdGVtID09IG51bGwpCisJCQkJYm94Ni5hZGQoY3JlYXRlTW9yZUJ1dHRvbik7CisJCQlib3g2LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCWJveDYuYWRkKGNhbmNlbEJ1dHRvbik7CisJCX0KKwkJCisJCWluc3RydWN0aW9uc0xhYmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpKTsKKwkJCisJCS8vIEFkZCB0aGUgYXBwcm9wcmlhdGUgbGlzdGVuZXJzCisJCWlmIChmaXJzdEluaXQpIHsKKwkJCWNhbmNlbEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUpEaWFsb2cgZGlhbG9nID0gKEpEaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJCX0KKwkJCX0pOworCQkKKwkJCWNyZWF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyBkaWFsb2cgPQorCQkJCQkJKEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCQlib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJCQkJaWYgKGRpYWxvZy5pdGVtID09IG51bGwpIHN1Y2Nlc3MgPSBkaWFsb2cuY3JlYXRlSXRlbSgpOworCQkJCQllbHNlIHN1Y2Nlc3MgPSBkaWFsb2cuZWRpdEl0ZW0oKTsKKwkJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCQlTdHJpbmcgYWxlcnQgPSAoaXRlbSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfaXRlbSIpIDoKKwkJCQkJCQkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX21vZGlmeV9pdGVtIikpOworCQkJCQkJYWxlcnQgKz0gIiAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl90cnlfYWdhaW5faXRlbSIpOworCQkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLAorCQkJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkoKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLnVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkuaW52YWxpZGF0ZSgpOworCQkJCQkJLy8oKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLnZhbGlkYXRlTXlUcmVlKCk7CisJCQkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJCQl9CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCWNyZWF0ZU1vcmVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cgZGlhbG9nID0KKwkJCQkJCShCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQkJYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisJCQkJCWlmIChkaWFsb2cuaXRlbSA9PSBudWxsKSBzdWNjZXNzID0gY3JlYXRlSXRlbSgpOworCQkJCQllbHNlIHN1Y2Nlc3MgPSBkaWFsb2cuZWRpdEl0ZW0oKTsKKwkJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCQlTdHJpbmcgYWxlcnQgPSAoaXRlbSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfaXRlbSIpIDoKKwkJCQkJCQkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX21vZGlmeV9pdGVtIikpOworCQkJCQkJYWxlcnQgKz0gIiAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl90cnlfYWdhaW5faXRlbSIpOworCQkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLAorCQkJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkoKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLnVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkuaW52YWxpZGF0ZSgpOworCQkJCQkJLy8oKFJCTWFuYWdlckdVSSlkaWFsb2cuZ2V0UGFyZW50KCkpLnZhbGlkYXRlTXlUcmVlKCk7CisJCQkJCQlkaWFsb2cuY2xlYXJDb21wb25lbnRzKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJCisJCQl0cmFuc0ZpZWxkLmFkZEZvY3VzTGlzdGVuZXIobmV3IEZvY3VzTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgZm9jdXNHYWluZWQoRm9jdXNFdmVudCBldikge30KKwkJCQlwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBldikgeworCQkJCQlCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cgZGlhbG9nID0KKwkJCQkJCShCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cpKChKVGV4dEZpZWxkKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQkJZmlyc3RJbml0ID0gZmFsc2U7CisJCQkJCWRpYWxvZy5pbml0Q29tcG9uZW50cygpOworCQkJCX0KKwkJCX0pOworCQl9CisJCQorCQkvLyBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZyYW1lCisJCWlmIChmaXJzdEluaXQpCisJCQlzZXRMb2NhdGlvbihuZXcgamF2YS5hd3QuUG9pbnQoNTAsIDUwKSk7CisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCS8vbWFpbkJveC5hZGQoaW5zdHJ1Y3Rpb25zTGFiZWwpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDEpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDIpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDMpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDQpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCWlmIChub0xvb2t1cExhYmVsID09IG51bGwpIHsKKwkJCW1haW5Cb3guYWRkKGJveDUpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQl9CisJCW1haW5Cb3guYWRkKGJveDYpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCXBhY2soKTsKKwkJc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy9zZXRSZXNpemFibGUoZmFsc2UpOworCQlmaXJzdEluaXQgPSBmYWxzZTsKKwl9CisJCisJdm9pZCBjbG9zZVdpbmRvdygpIHsKKwkJc2V0VmlzaWJsZShmYWxzZSk7CisJCWRpc3Bvc2UoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlSXRlbURpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVJdGVtRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYzVjZQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlSXRlbURpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8vQSBkaWFsb2cgd2hpY2ggZGlzcGxheXMgdGhlIHByb3BlcnRpZXMgb2YgYSBCdW5kbGUgSXRlbSBpbiBhbiBlZGl0YWJsZSB3YXkKKworY2xhc3MgQnVuZGxlSXRlbURpYWxvZyBleHRlbmRzIEpEaWFsb2cgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisJUkJNYW5hZ2VyIHJibTsKKwlCdW5kbGVJdGVtIGl0ZW07CisJU3RyaW5nIHVzZXI7CisJYm9vbGVhbiBmaXJzdEluaXQgPSB0cnVlOwkKKwkKKwkvLyBIZWxwZXIgZGF0YQorCWludCBsZWZ0X2NvbF93aWR0aCA9IDEyNTsKKwlpbnQgcmlnaHRfY29sX3dpZHRoID0gMzc1OworCWludCByb3dfaGVpZ2h0ID0gMjU7CisJRGltZW5zaW9uIGxlZnREaW0gPSBuZXcgRGltZW5zaW9uKGxlZnRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwlEaW1lbnNpb24gcmlnaHREaW0gPSBuZXcgRGltZW5zaW9uKHJpZ2h0X2NvbF93aWR0aCwgcm93X2hlaWdodCk7CisJCisJLy8gQ29tcG9uZW50cworCUJveCBtYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwlCb3ggYm94MCA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDEgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gyID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MyA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDQgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3g1ID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94NiA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDcgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3g4ID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkKKwlKTGFiZWwgZ3JvdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZ3JvdXAiKSk7IAorCUpMYWJlbCBrZXlMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfa2V5IikpOworCUpMYWJlbCBkZWZUcmFuc0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19kZWZhdWx0X3RyYW5zbGF0aW9uIikpOworCUpMYWJlbCB0cmFuc0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190cmFuc2xhdGlvbiIpKTsKKwlKTGFiZWwgY29tbWVudExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19jb21tZW50IikpOworCUpMYWJlbCBsb29rdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbG9va3VwcyIpKTsKKwlKTGFiZWwgY3JlYXRlZExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19jcmVhdGVkIikpOworCUpMYWJlbCBtb2RpZmllZExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19tb2RpZmllZCIpKTsKKwkKKwlKQ29tYm9Cb3ggZ3JvdXBDb21ib0JveDsKKwlKVGV4dEZpZWxkIGtleUZpZWxkOworCUpUZXh0RmllbGQgdHJhbnNGaWVsZDsKKwlKVGV4dEZpZWxkIGRlZlRyYW5zRmllbGQ7CisJSlRleHRGaWVsZCBjb21tZW50RmllbGQ7CisJSkxhYmVsIGNyZWF0ZWRMYWJlbDI7CisJSkxhYmVsIG1vZGlmaWVkTGFiZWwyOworCUpMYWJlbCBsb29rdXBMYWJlbDIgPSBudWxsOworCUpDaGVja0JveCB0cmFuc0NoZWNrQm94OworCUpCdXR0b24gc2F2ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXQiKSk7CisJSkJ1dHRvbiBjYW5jZWxCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jYW5jZWwiKSk7CisJQm94IGxvb2t1cEJveCA9IG51bGw7CisJQm94IGxvb2t1cHNbXSA9IG51bGw7CisJSkxhYmVsIGxvb2t1cExhYmVsc1tdID0gbnVsbDsKKwlKVGV4dEZpZWxkIGxvb2t1cEZpZWxkc1tdID0gbnVsbDsKKwkKKwlwdWJsaWMgQnVuZGxlSXRlbURpYWxvZyhSQk1hbmFnZXIgcmJtLCBCdW5kbGVJdGVtIGl0ZW0sIFN0cmluZyB1c2VyLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5yYm0gPSByYm07CisJCXRoaXMudXNlciA9IHVzZXI7CisJCXRoaXMuaXRlbSA9IGl0ZW07CisJCWluaXRDb21wb25lbnRzKCk7CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5LRVlfRVZFTlRfTUFTSyk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldikgeworCQlpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0VOVEVSICYmIGV2LmdldElEKCkgPT0gS2V5RXZlbnQuS0VZX1JFTEVBU0VEKSB7CisJCQlhY3Rpb25QZXJmb3JtZWQobnVsbCk7CisJCX0gZWxzZSBpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NBTkNFTCkgeworCQkJY2xvc2VXaW5kb3coKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKXsKKwkJLy8gRXJyb3IgY2hlY2sKKwkJaWYgKGl0ZW0gPT0gbnVsbCkgY2xvc2VXaW5kb3coKTsKKwkJaWYgKCFmaXJzdEluaXQpIGNsb3NlV2luZG93KCk7CisJCQorCQkvLyBJbml0aWFsaXplIHZhbHVlcworCQlEYXRlRm9ybWF0IGRmID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCk7CisJCUJ1bmRsZSBidW5kbGUgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCk7CisJCQorCQkvLyBMb29rdXAgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb24KKwkJU3RyaW5nIGRlZlRyYW5zID0gbmV3IFN0cmluZygpOworCQlPYmplY3QgbyA9ICgoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZmlyc3RFbGVtZW50KCkpLmFsbEl0ZW1zLmdldChpdGVtLmdldEtleSgpKTsKKwkJaWYgKG8gIT0gbnVsbCkKKwkJCWRlZlRyYW5zID0gKChCdW5kbGVJdGVtKW8pLmdldFRyYW5zbGF0aW9uKCk7CisJCQorCQlrZXlGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKGl0ZW0uZ2V0S2V5KCkpOworCQlrZXlGaWVsZC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJZGVmVHJhbnNGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKGRlZlRyYW5zKTsKKwkJZGVmVHJhbnNGaWVsZC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJdHJhbnNGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSk7CisJCWNvbW1lbnRGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKGl0ZW0uZ2V0Q29tbWVudCgpKTsKKwkJU3RyaW5nIGNyZWF0ZWRbXSA9IHtkZi5mb3JtYXQoaXRlbS5nZXRDcmVhdGVkRGF0ZSgpKSwgaXRlbS5nZXRDcmVhdG9yKCl9OworCQlTdHJpbmcgbW9kaWZpZWRbXSA9IHtkZi5mb3JtYXQoaXRlbS5nZXRNb2RpZmllZERhdGUoKSksIGl0ZW0uZ2V0TW9kaWZpZXIoKX07CisJCVN0cmluZyBjcmVhdGVkU3RyaW5nID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZGF0ZV9wZXJzb24iLCBjcmVhdGVkKTsKKwkJU3RyaW5nIG1vZGlmaWVkU3RyaW5nID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZGF0ZV9wZXJzb24iLCBtb2RpZmllZCk7CisJCWNyZWF0ZWRMYWJlbDIgPSBuZXcgSkxhYmVsKGl0ZW0uZ2V0Q3JlYXRvcigpID09IG51bGwgPyBkZi5mb3JtYXQoaXRlbS5nZXRDcmVhdGVkRGF0ZSgpKSA6IGNyZWF0ZWRTdHJpbmcpOworCQltb2RpZmllZExhYmVsMiA9IG5ldyBKTGFiZWwoaXRlbS5nZXRNb2RpZmllcigpID09IG51bGwgPyBkZi5mb3JtYXQoaXRlbS5nZXRNb2RpZmllZERhdGUoKSkgOiBtb2RpZmllZFN0cmluZyk7CisJCXRyYW5zQ2hlY2tCb3ggPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2NoZWNrYm94X3RyYW5zbGF0ZWQiKSxpdGVtLmlzVHJhbnNsYXRlZCgpKTsKKwkJCisJCWdyb3VwQ29tYm9Cb3ggPSBuZXcgSkNvbWJvQm94KGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgZ3JvdXBDb21ib0JveC5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlCdW5kbGVHcm91cCBiZyA9IChCdW5kbGVHcm91cClncm91cENvbWJvQm94LmdldEl0ZW1BdChpKTsKKwkJCWlmIChiZy5nZXROYW1lKCkuZXF1YWxzKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkpKSB7CisJCQkJZ3JvdXBDb21ib0JveC5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWdyb3VwQ29tYm9Cb3guc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQkvLyBTZXQgdXAgdGhlIGNvbXBvbmVudHMKKwkJZ3JvdXBMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQlncm91cENvbWJvQm94LnNldFByZWZlcnJlZFNpemUocmlnaHREaW0pOworCQlrZXlMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkvL2tleUZpZWxkLnNldFByZWZlcnJlZFNpemUocmlnaHREaW0pOworCQlrZXlGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJZGVmVHJhbnNMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkvL2RlZlRyYW5zRmllbGQuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCWRlZlRyYW5zRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCXRyYW5zTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJLy90cmFuc0ZpZWxkLnNldFByZWZlcnJlZFNpemUocmlnaHREaW0pOworCQl0cmFuc0ZpZWxkLnNldENvbHVtbnMoMzApOworCQljb21tZW50TGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJLy9jb21tZW50RmllbGQuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCWNvbW1lbnRGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJbG9va3VwTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJY3JlYXRlZExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCWNyZWF0ZWRMYWJlbDIuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCW1vZGlmaWVkTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJbW9kaWZpZWRMYWJlbDIuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCS8vIFNwZWNpYWwgc2V0dXAgZm9yIHRoZSBsb29rdXAgaXRlbXMgaWYgdGhleSBleGlzdAorCQlpZiAoaXRlbS5nZXRMb29rdXBzKCkuc2l6ZSgpIDwgMSkgeworCQkJbG9va3VwTGFiZWwyID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm5vbmUiKSk7CisJCQlsb29rdXBMYWJlbDIuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCX0gZWxzZSB7CisJCQlsb29rdXBCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkJbG9va3VwcyA9IG5ldyBCb3hbaXRlbS5nZXRMb29rdXBzKCkuc2l6ZSgpXTsKKwkJCWxvb2t1cExhYmVscyA9IG5ldyBKTGFiZWxbaXRlbS5nZXRMb29rdXBzKCkuc2l6ZSgpXTsKKwkJCWxvb2t1cEZpZWxkcyA9IG5ldyBKVGV4dEZpZWxkW2l0ZW0uZ2V0TG9va3VwcygpLnNpemUoKV07CisJCQlFbnVtZXJhdGlvbiBrZXlzID0gaXRlbS5nZXRMb29rdXBzKCkua2V5cygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtLmdldExvb2t1cHMoKS5zaXplKCk7IGkrKykgeworCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisJCQkJU3RyaW5nIHZhbHVlID0gKFN0cmluZylpdGVtLmdldExvb2t1cHMoKS5nZXQobmFtZSk7CisJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJYIC0gTG9va3VwOiAiICsgbmFtZSArICIgLT4gIiArIHZhbHVlKTsKKwkJCQlsb29rdXBzW2ldID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkJCQlsb29rdXBMYWJlbHNbaV0gPSBuZXcgSkxhYmVsKCJ7IiArIG5hbWUgKyAifSIpOworCQkJCWxvb2t1cExhYmVsc1tpXS5zZXRQcmVmZXJyZWRTaXplKG5ldyBEaW1lbnNpb24oMzAscm93X2hlaWdodCkpOworCQkJCWxvb2t1cEZpZWxkc1tpXSA9IG5ldyBKVGV4dEZpZWxkKHZhbHVlKTsKKwkJCQlsb29rdXBGaWVsZHNbaV0uc2V0UHJlZmVycmVkU2l6ZShuZXcgRGltZW5zaW9uKHJpZ2h0X2NvbF93aWR0aC0zNSxyb3dfaGVpZ2h0KSk7CisJCQkJbG9va3Vwc1tpXS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworCQkJCWxvb2t1cHNbaV0uYWRkKGxvb2t1cExhYmVsc1tpXSk7CisJCQkJbG9va3Vwc1tpXS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCQkJbG9va3Vwc1tpXS5hZGQobG9va3VwRmllbGRzW2ldKTsKKwkJCQlsb29rdXBCb3guYWRkKGxvb2t1cHNbaV0pOworCQkJfQorCQl9CisJCQorCQkvLyBBZGQgdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVycworCQlpZiAoZmlyc3RJbml0KSB7CisJCQljYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlKRGlhbG9nIGRpYWxvZyA9IChKRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJCQl9CisJCQl9KTsKKwkJCisJCQlzYXZlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJZ2V0Um9vdFBhbmUoKS5zZXREZWZhdWx0QnV0dG9uKHNhdmVCdXR0b24pOworCisJCQl0cmFuc0ZpZWxkLmFkZEZvY3VzTGlzdGVuZXIobmV3IFRyYW5zbGF0aW9uRm9jdXNMaXN0ZW5lcihpdGVtLmdldFRyYW5zbGF0aW9uKCksdHJhbnNDaGVja0JveCkpOworCQl9CisJCQorCQlib3gwLmFkZChncm91cExhYmVsKTsgYm94MC5hZGQoZ3JvdXBDb21ib0JveCk7CisJCWJveDEuYWRkKGtleUxhYmVsKTsgYm94MS5hZGQoa2V5RmllbGQpOworCQlib3g4LmFkZChkZWZUcmFuc0xhYmVsKTsgYm94OC5hZGQoZGVmVHJhbnNGaWVsZCk7CisJCWJveDIuYWRkKHRyYW5zTGFiZWwpOyBib3gyLmFkZCh0cmFuc0ZpZWxkKTsKKwkJYm94My5hZGQoY29tbWVudExhYmVsKTsgYm94My5hZGQoY29tbWVudEZpZWxkKTsKKwkJYm94NC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOyBib3g0LmFkZChsb29rdXBMYWJlbCk7CisJCWlmIChsb29rdXBMYWJlbDIgIT0gbnVsbCkgeworCQkJYm94NC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCQlib3g0LmFkZChsb29rdXBMYWJlbDIpOworCQl9IGVsc2UgaWYgKGxvb2t1cEJveCAhPSBudWxsKSB7CisJCQlib3g0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCWJveDQuYWRkKGxvb2t1cEJveCk7CisJCX0KKwkJYm94NS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOyBib3g1LmFkZChjcmVhdGVkTGFiZWwpOworCQlib3g1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsgYm94NS5hZGQoY3JlYXRlZExhYmVsMik7CisJCWJveDYuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsR2x1ZSgpKTsgYm94Ni5hZGQobW9kaWZpZWRMYWJlbCk7CisJCWJveDYuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOyBib3g2LmFkZChtb2RpZmllZExhYmVsMik7CisJCWJveDcuYWRkKHRyYW5zQ2hlY2tCb3gpOyBib3g3LmFkZChzYXZlQnV0dG9uKTsgYm94Ny5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJCisJCS8vIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnJhbWUKKwkJc2V0TG9jYXRpb24obmV3IGphdmEuYXd0LlBvaW50KDUwLCA1MCkpOworCQltYWluQm94LnJlbW92ZUFsbCgpOworCQltYWluQm94LmFkZChib3gwKTsKKwkJbWFpbkJveC5hZGQoYm94MSk7CisJCW1haW5Cb3guYWRkKGJveDgpOworCQltYWluQm94LmFkZChib3gyKTsKKwkJbWFpbkJveC5hZGQoYm94Myk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94NCk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94NSk7CisJCW1haW5Cb3guYWRkKGJveDYpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDcpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCXBhY2soKTsKKwkJc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy9zZXRSZXNpemFibGUoZmFsc2UpOworCQkKKwkJZmlyc3RJbml0ID0gZmFsc2U7CisJfQorCQorCXZvaWQgY2xvc2VXaW5kb3coKSB7CisJCXNldFZpc2libGUoZmFsc2UpOworCQlkaXNwb3NlKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQlpZiAoZXYgPT0gbnVsbCAmJiB0cmFuc0ZpZWxkLmhhc0ZvY3VzKCkpIHsKKwkJCS8vIElmIHdlIGFyZSBpbiB0aGUgdHJhbnNsYXRpb24gZmllbGQsIHRoZW4gZW50ZXIgc2hvdWxkIGNyZWF0ZSBhIG5ldyBsaW5lIGNoYXJhY3Rlciwgbm90IGV4aXQgdGhlIGRpYWxvZworCQkJaW50IGNhcmV0UG9zID0gdHJhbnNGaWVsZC5nZXRDYXJldFBvc2l0aW9uKCk7CisJCQlTdHJpbmcgb2xkVGV4dCA9IHRyYW5zRmllbGQuZ2V0VGV4dCgpOworCQkJdHJhbnNGaWVsZC5zZXRUZXh0KG9sZFRleHQuc3Vic3RyaW5nKDAsY2FyZXRQb3MpICsgIlxuIiArIG9sZFRleHQuc3Vic3RyaW5nKGNhcmV0UG9zLG9sZFRleHQubGVuZ3RoKCkpKTsKKwkJCXRyYW5zRmllbGQuc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcysxKTsKKwkJCXZhbGlkYXRlKCk7CisJCQlzZXRTaXplKGdldFByZWZlcnJlZFNpemUoKSk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIFRoaXMgYWN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAnRWRpdCcgYnV0dG9uIGlzIHByZXNzZWQKKwkJaXRlbS5zZXRUcmFuc2xhdGlvbih0cmFuc0ZpZWxkLmdldFRleHQoKS50cmltKCkpOworCQlpZiAoIWl0ZW0uZ2V0S2V5KCkuZXF1YWxzKGtleUZpZWxkLmdldFRleHQoKSkpIGl0ZW0uc2V0S2V5KGtleUZpZWxkLmdldFRleHQoKS50cmltKCkpOworCQlpdGVtLnNldENvbW1lbnQoY29tbWVudEZpZWxkLmdldFRleHQoKSk7CisJCWl0ZW0uc2V0TW9kaWZpZWREYXRlKG5ldyBEYXRlKCkpOworCQlpdGVtLnNldE1vZGlmaWVyKHVzZXIpOworCQlpdGVtLnNldFRyYW5zbGF0ZWQodHJhbnNDaGVja0JveC5pc1NlbGVjdGVkKCkpOworCQlpZiAodHJhbnNDaGVja0JveC5pc1NlbGVjdGVkKCkpIHsKKwkJCS8vIFJlbW92ZSB0aGlzIGl0ZW0gZnJvbSB0aGUgdW50cmFuc2xhdGVkIGl0ZW1zLCBpZiBpdCBpcyB0aGVyZQorCQkJaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpLnJlbW92ZVVudHJhbnNsYXRlZEl0ZW0oaXRlbS5nZXRLZXkoKSk7CisJCX0gZWxzZSB7CisJCQlpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkuYWRkVW50cmFuc2xhdGVkSXRlbShpdGVtKTsKKwkJfQorCQlpZiAobG9va3VwcyAhPSBudWxsKSB7CisJCQlpdGVtLnNldExvb2t1cHMobmV3IEhhc2h0YWJsZSgpKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGxvb2t1cHMubGVuZ3RoOyBpKyspIHsKKwkJCQlTdHJpbmcgbmFtZSA9IGxvb2t1cExhYmVsc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCWlmIChuYW1lLmluZGV4T2YoInsiKSA+PSAwKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcobmFtZS5pbmRleE9mKCJ7IikrMSxuYW1lLmxlbmd0aCgpKTsKKwkJCQlpZiAobmFtZS5pbmRleE9mKCJ9IikgPj0gMCkgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUuaW5kZXhPZigifSIpKTsKKwkJCQlTdHJpbmcgdmFsdWUgPSBsb29rdXBGaWVsZHNbaV0uZ2V0VGV4dCgpLnRyaW0oKTsKKwkJCQlpdGVtLmdldExvb2t1cHMoKS5wdXQobmFtZSx2YWx1ZSk7CisJCQl9CisJCX0KKwkJY2xvc2VXaW5kb3coKTsKKwl9Cit9CisgCisvKioKKyAqIEEgbGlzdGVuZXIgd2hpY2ggY2hlY2tzIGEgdHJhbnNsYXRpb24gYm94IHRvIHNlZSBpZiBpdCBjaGFuZ2VzLCBpZiBpdCBkb2VzLCBpdCBtYXJrcyB0aGUgd29yZCBhcyB0cmFuc2xhdGVkIGluIGEgY2hlY2sgYm94CisgKi8KK2NsYXNzIFRyYW5zbGF0aW9uRm9jdXNMaXN0ZW5lciBpbXBsZW1lbnRzIEZvY3VzTGlzdGVuZXIgeworCVN0cmluZyBvcmlnaW5hbDsKKwlKQ2hlY2tCb3ggY2JveDsKKwlib29sZWFuIHNlbGVjdGVkOworCQorCXB1YmxpYyBUcmFuc2xhdGlvbkZvY3VzTGlzdGVuZXIoU3RyaW5nIG9yaWdpbmFsLCBKQ2hlY2tCb3ggY2JveCkgeworCQl0aGlzLm9yaWdpbmFsID0gb3JpZ2luYWw7CisJCXRoaXMuY2JveCA9IGNib3g7CisJCXNlbGVjdGVkID0gY2JveC5pc1NlbGVjdGVkKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZXYpIHt9CisJCisJcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZXYpIHsKKwkJSlRleHRGaWVsZCBmaWVsZCA9IChKVGV4dEZpZWxkKWV2LmdldFNvdXJjZSgpOworCQlpZiAoZmllbGQuZ2V0VGV4dCgpLmVxdWFscyhvcmlnaW5hbCkpIHsKKwkJCWNib3guc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOworCQkJcmV0dXJuOworCQl9CisJCWNib3guc2V0U2VsZWN0ZWQodHJ1ZSk7CisJfQorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1ByZWZlcmVuY2VzRGlhbG9nLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1ByZWZlcmVuY2VzRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzY2U4NwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUHJlZmVyZW5jZXNEaWFsb2cuamF2YQpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLyoqCisgKiBEaWFsb2cgdG8gZGlzcGxheSB0byBhIHVzZXIgYWJvdXQgdGhlaXIgcHJlZmVyZW5jZXMuIAorICovCitjbGFzcyBQcmVmZXJlbmNlc0RpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworCVN0cmluZyB1c2VyTmFtZTsKKwlMb2NhbGUgbG9jYWxlOworCUxvb2tBbmRGZWVsIGxhZjsKKwlSQk1hbmFnZXJHVUkgZ3VpOworCQorCS8vICoqIENPTVBPTkVOVFMgKioKKwlKVGV4dEZpZWxkICAgbmFtZUZpZWxkOworCUpSYWRpb0J1dHRvbiBtYWNoaW5lUmFkaW87CisJSlJhZGlvQnV0dG9uIGRlZmluZWRSYWRpbzsKKwlKUmFkaW9CdXR0b24gaXNvUmFkaW87CisJSkNvbWJvQm94ICAgIG1hY2hpbmVDb21ibzsKKwlKQ29tYm9Cb3ggICAgZGVmaW5lZENvbWJvOworCUpDb21ib0JveCAgICBpc29MYW5nQ29tYm87CisJSkNvbWJvQm94ICAgIGlzb0NvdW5Db21ibzsKKwlKQ29tYm9Cb3ggICAgbGFmQ29tYm87CisJSkJ1dHRvbiAgICAgIG9rQnV0dG9uOworCUpCdXR0b24gICAgICBjYW5jZWxCdXR0b247CisJCisJcHVibGljIFByZWZlcmVuY2VzRGlhbG9nKFJCTWFuYWdlckdVSSBndWkpIHsKKwkJc3VwZXIoZ3VpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9wcmVmZXJlbmNlcyIpLCB0cnVlKTsKKwkJdGhpcy5ndWkgPSBndWk7CisJCXVzZXJOYW1lID0gZ3VpLmdldFVzZXIoKTsKKwkJbG9jYWxlID0gUmVzb3VyY2VzLmdldExvY2FsZSgpOworCQlsYWYgPSBVSU1hbmFnZXIuZ2V0TG9va0FuZEZlZWwoKTsKKwkJCisJCWluaXRDb21wb25lbnRzKCk7CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5LRVlfRVZFTlRfTUFTSyk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldikgeworCQlpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0VOVEVSKSB7CisJCQl1cGRhdGVQcmVmZXJlbmNlcygpOworCQl9IGVsc2UgaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19DQU5DRUwpIHsKKwkJCXRoaXNXaW5kb3dDbG9zaW5nKCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQlVSU1hbmFnZXIuTG9va0FuZEZlZWxJbmZvIGxhZmlbXSA9IFVJTWFuYWdlci5nZXRJbnN0YWxsZWRMb29rQW5kRmVlbHMoKTsKKwkJU3RyaW5nIGxhZm5bXSA9IG5ldyBTdHJpbmdbbGFmaS5sZW5ndGhdOworCQlmb3IgKGludCBpPTA7IGkgPCBsYWZpLmxlbmd0aDsgaSsrKSB7CisJCQlsYWZuW2ldID0gbGFmaVtpXS5nZXROYW1lKCk7CisJCX0KKwkJCisJCS8vIENPTVBPTkVOVFMKKwkJCisJCUpQYW5lbCBwYW5lbDEgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCBwYW5lbDIgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCBwYW5lbDMgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCBwYW5lbDQgPSBuZXcgSlBhbmVsKCk7CisJCUJveCAgICBtYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJQm94ICAgIGxvY2FsZUJveDEgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlCb3ggICAgbG9jYWxlQm94MiA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCUpQYW5lbCBsb2NhbGVQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJCisJCURpbWVuc2lvbiBsb2NhbGVEaW0xID0gbmV3IERpbWVuc2lvbigyMDAsMjUpOworCQlEaW1lbnNpb24gbG9jYWxlRGltMiA9IG5ldyBEaW1lbnNpb24oMTUwLDI1KTsKKwkJRGltZW5zaW9uIGxvY2FsZURpbTMgPSBuZXcgRGltZW5zaW9uKDUwLDI1KTsKKwkJCisJCUpMYWJlbCBuYW1lTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ByZWZlcmVuY2VzX3VzZXJuYW1lIikpOworCQlKTGFiZWwgbGFmTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ByZWZlcmVuY2VzX2xvb2thbmRmZWVsIikpOworCQlKTGFiZWwgd2FybkxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfd2FybmluZyIpKTsKKwkJSkxhYmVsIHVuZGVyc2NvcmVMYWJlbCA9IG5ldyBKTGFiZWwoIl8iKTsKKwkJCisJCW5hbWVGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKHVzZXJOYW1lKTsKKwkJbWFjaGluZVJhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfbWFjaGluZSIpLCBmYWxzZSk7CisJCWRlZmluZWRSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX2RlZmluZWQiKSwgdHJ1ZSk7CisJCWlzb1JhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfaXNvIiksIGZhbHNlKTsKKwkJbWFjaGluZUNvbWJvID0gbmV3IEpDb21ib0JveChMb2NhbGUuZ2V0QXZhaWxhYmxlTG9jYWxlcygpKTsKKwkJZGVmaW5lZENvbWJvID0gbmV3IEpDb21ib0JveChSZXNvdXJjZXMuZ2V0QXZhaWxhYmxlTG9jYWxlcygpKTsKKwkJaXNvTGFuZ0NvbWJvID0gbmV3IEpDb21ib0JveChMb2NhbGUuZ2V0SVNPTGFuZ3VhZ2VzKCkpOworCQlpc29Db3VuQ29tYm8gPSBuZXcgSkNvbWJvQm94KExvY2FsZS5nZXRJU09Db3VudHJpZXMoKSk7CisJCWxhZkNvbWJvID0gbmV3IEpDb21ib0JveChsYWZuKTsKKwkJb2tCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl91cGRhdGUiKSk7CisJCWNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwkJCisJCW1hY2hpbmVSYWRpby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTEpOworCQlkZWZpbmVkUmFkaW8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0xKTsKKwkJaXNvUmFkaW8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0xKTsKKwkJCisJCW5hbWVMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTEpOworCQlsYWZMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTEpOworCQkKKwkJLy9sb2NhbGVQYW5lbC5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTIpOworCQltYWNoaW5lQ29tYm8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0yKTsKKwkJZGVmaW5lZENvbWJvLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMik7CisJCQorCQluYW1lRmllbGQuc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0yKTsKKwkJbGFmQ29tYm8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0yKTsKKwkJCisJCWlzb0xhbmdDb21iby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTMpOworCQlpc29Db3VuQ29tYm8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0zKTsKKwkJCisJCS8vIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllcyBpbiB0aGUgY29tYm8gYm94ZXMKKwkJU3RyaW5nIGxhZm5hbWUgPSBVSU1hbmFnZXIuZ2V0TG9va0FuZEZlZWwoKS5nZXROYW1lKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGFmQ29tYm8uZ2V0SXRlbUNvdW50KCk7IGkrKykgeworCQkJaWYgKGxhZkNvbWJvLmdldEl0ZW1BdChpKS50b1N0cmluZygpLmVxdWFscyhsYWZuYW1lKSkgeworCQkJCWxhZkNvbWJvLnNldFNlbGVjdGVkSW5kZXgoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJU3RyaW5nIGxvY25hbWUgPSBSZXNvdXJjZXMuZ2V0TG9jYWxlKCkudG9TdHJpbmcoKTsKKwkJU3RyaW5nIGxvY2xhbmcgPSBSZXNvdXJjZXMuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKTsKKwkJU3RyaW5nIGxvY2NvdW4gPSBSZXNvdXJjZXMuZ2V0TG9jYWxlKCkuZ2V0Q291bnRyeSgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG1hY2hpbmVDb21iby5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlpZiAobWFjaGluZUNvbWJvLmdldEl0ZW1BdChpKS50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UobG9jbmFtZSkpIHsKKwkJCQltYWNoaW5lQ29tYm8uc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlmb3IgKGludCBpID0gMDsgaSA8IGRlZmluZWRDb21iby5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlpZiAoZGVmaW5lZENvbWJvLmdldEl0ZW1BdChpKS50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UobG9jbmFtZSkpIHsKKwkJCQlkZWZpbmVkQ29tYm8uc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlmb3IgKGludCBpID0gMDsgaSA8IGlzb0xhbmdDb21iby5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlpZiAoaXNvTGFuZ0NvbWJvLmdldEl0ZW1BdChpKS50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UobG9jbGFuZykpIHsKKwkJCQlpc29MYW5nQ29tYm8uc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlmb3IgKGludCBpID0gMDsgaSA8IGlzb0NvdW5Db21iby5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlpZiAoaXNvQ291bkNvbWJvLmdldEl0ZW1BdChpKS50b1N0cmluZygpLmVxdWFsc0lnbm9yZUNhc2UobG9jY291bikpIHsKKwkJCQlpc29Db3VuQ29tYm8uc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkKKwkJLy8gU2V0IHRoZSByYWRpbyBidXR0b24gZ3JvdXAKKwkJQnV0dG9uR3JvdXAgZ3JvdXAgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKwkJZ3JvdXAuYWRkKG1hY2hpbmVSYWRpbyk7CisJCWdyb3VwLmFkZChkZWZpbmVkUmFkaW8pOworCQlncm91cC5hZGQoaXNvUmFkaW8pOworCQkKKwkJbmFtZUZpZWxkLnNldENvbHVtbnMoMTUpOworCQkKKwkJLy8gQWRkIGFjdGlvbiBsaXN0ZW5lcnMKKwkJY2FuY2VsQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXRoaXNXaW5kb3dDbG9zaW5nKCk7CisJCQl9CisJCX0pOworCQkKKwkJb2tCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJdXBkYXRlUHJlZmVyZW5jZXMoKTsKKwkJCX0KKwkJfSk7CisJCWdldFJvb3RQYW5lKCkuc2V0RGVmYXVsdEJ1dHRvbihva0J1dHRvbik7CisJCQorCQlwYW5lbDMuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlIikpKTsKKwkJcGFuZWwzLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQkKKwkJbG9jYWxlUGFuZWwuYWRkKGlzb0xhbmdDb21ibyk7CisJCWxvY2FsZVBhbmVsLmFkZCh1bmRlcnNjb3JlTGFiZWwpOworCQlsb2NhbGVQYW5lbC5hZGQoaXNvQ291bkNvbWJvKTsKKwkJCisJCWxvY2FsZUJveDEuYWRkKG1hY2hpbmVSYWRpbyk7CisJCWxvY2FsZUJveDEuYWRkKGRlZmluZWRSYWRpbyk7CisJCWxvY2FsZUJveDEuYWRkKGlzb1JhZGlvKTsKKwkJbG9jYWxlQm94Mi5hZGQobWFjaGluZUNvbWJvKTsKKwkJbG9jYWxlQm94Mi5hZGQoZGVmaW5lZENvbWJvKTsKKwkJbG9jYWxlQm94Mi5hZGQobG9jYWxlUGFuZWwpOworCQlsb2NhbGVCb3gxLmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCWxvY2FsZUJveDIuYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCisJCXBhbmVsMS5hZGQobmFtZUxhYmVsKTsKKwkJcGFuZWwxLmFkZChuYW1lRmllbGQpOworCQlwYW5lbDIuYWRkKGxhZkxhYmVsKTsKKwkJcGFuZWwyLmFkZChsYWZDb21ibyk7CisJCXBhbmVsMy5hZGQobG9jYWxlQm94MSwgQm9yZGVyTGF5b3V0LldFU1QpOworCQlwYW5lbDMuYWRkKGxvY2FsZUJveDIsIEJvcmRlckxheW91dC5FQVNUKTsKKwkJcGFuZWwzLmFkZCh3YXJuTGFiZWwsIEJvcmRlckxheW91dC5TT1VUSCk7CisJCXBhbmVsNC5hZGQob2tCdXR0b24pOworCQlwYW5lbDQuYWRkKGNhbmNlbEJ1dHRvbik7CisJCQorCQltYWluQm94LmFkZChwYW5lbDEpOworCQltYWluQm94LmFkZChwYW5lbDIpOworCQltYWluQm94LmFkZChwYW5lbDMpOworCQltYWluQm94LmFkZChwYW5lbDQpOworCQkKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQobWFpbkJveCk7CisJCS8vdmFsaWRhdGUoKTsKKwkJcGFjaygpOworCQlzZXRWaXNpYmxlKHRydWUpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgdGhpc1dpbmRvd0Nsb3NpbmcoKSB7CisJCXNldFZpc2libGUoZmFsc2UpOworCQlkaXNwb3NlKCk7CisJfQorCQorCXZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoKSB7CisJCS8vIFNldCB0aGUgdXNlciBuYW1lCisJCWd1aS5zZXRVc2VyKG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpKTsKKwkJLy8gU2V0IHRoZSBsb29rIGFuZCBmZWVsCisJCXRyeSB7CisJCQlVSU1hbmFnZXIuTG9va0FuZEZlZWxJbmZvIGxhZmlbXSA9IFVJTWFuYWdlci5nZXRJbnN0YWxsZWRMb29rQW5kRmVlbHMoKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGxhZmkubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAobGFmaVtpXS5nZXROYW1lKCkuZXF1YWxzKGxhZkNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpKSB7CisJCQkJCVVJTWFuYWdlci5zZXRMb29rQW5kRmVlbChsYWZpW2ldLmdldENsYXNzTmFtZSgpKTsKKwkJCQkJZ3VpLnVwZGF0ZVVJKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGNoYW5nZSB0aGUgbG9vayBhbmQgZmVlbCIpOworCQkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKwkJLy8gU2V0IHRoZSBsb2NhbGUKKwkJU3RyaW5nIGxhbmd1YWdlID0gbnVsbDsKKwkJU3RyaW5nIGNvdW50cnkgPSBudWxsOworCQlTdHJpbmcgdmFyaWFudCA9IG51bGw7CisJCWlmIChkZWZpbmVkUmFkaW8uaXNTZWxlY3RlZCgpKSB7CisJCQlTdHJpbmcgZW5jb2RpbmcgPSAiIjsKKwkJCWlmIChkZWZpbmVkQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkgIT0gbnVsbCkgeworCQkJCWVuY29kaW5nID0gZGVmaW5lZENvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCk7CisJCQl9CisJCQlsYW5ndWFnZSA9IFJlc291cmNlcy5nZXRMYW5ndWFnZShlbmNvZGluZyk7CisJCQljb3VudHJ5ID0gUmVzb3VyY2VzLmdldENvdW50cnkoZW5jb2RpbmcpOworCQkJdmFyaWFudCA9IFJlc291cmNlcy5nZXRWYXJpYW50KGVuY29kaW5nKTsKKwkJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZygiQmVmb3JlOiAiICsgbGFuZ3VhZ2UgKyAiXyIgKyBjb3VudHJ5ICsgIl8iICsgdmFyaWFudCk7CisJCQlpZiAoY291bnRyeSA9PSBudWxsKSBjb3VudHJ5ID0gbmV3IFN0cmluZygpOworCQkJaWYgKHZhcmlhbnQgPT0gbnVsbCkgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSk7CisJCQllbHNlIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpOworCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJBZnRlcjogIiArIGxvY2FsZS50b1N0cmluZygpKTsKKwkJfSBlbHNlIGlmIChtYWNoaW5lUmFkaW8uaXNTZWxlY3RlZCgpKSB7CisJCQlTdHJpbmcgZW5jb2RpbmcgPSBtYWNoaW5lQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKTsKKwkJCWxhbmd1YWdlID0gUmVzb3VyY2VzLmdldExhbmd1YWdlKGVuY29kaW5nKTsKKwkJCWNvdW50cnkgPSBSZXNvdXJjZXMuZ2V0Q291bnRyeShlbmNvZGluZyk7CisJCQl2YXJpYW50ID0gUmVzb3VyY2VzLmdldFZhcmlhbnQoZW5jb2RpbmcpOworCQkJaWYgKGNvdW50cnkgPT0gbnVsbCkgY291bnRyeSA9IG5ldyBTdHJpbmcoKTsKKwkJCWlmICh2YXJpYW50ID09IG51bGwpIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnkpOworCQkJZWxzZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKKwkJfSBlbHNlIGlmIChpc29SYWRpby5pc1NlbGVjdGVkKCkpIHsKKwkJCWxhbmd1YWdlID0gaXNvTGFuZ0NvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCk7CisJCQljb3VudHJ5ID0gaXNvQ291bkNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCk7CisJCQlpZiAodmFyaWFudCA9PSBudWxsKSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5KTsKKwkJCWVsc2UgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisJCX0KKwkJUmVzb3VyY2VzLnNldExvY2FsZShsb2NhbGUpOworCQlndWkudXBkYXRlTG9jYWxlKGxvY2FsZSk7CisJCQkKKwkJLy8gV3JpdGUgdGhlIHByZWZlcmVuY2VzCisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInVzZXJuYW1lIiwgZ3VpLmdldFVzZXIoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoImxvb2thbmRmZWVsIiwgVUlNYW5hZ2VyLmdldExvb2tBbmRGZWVsKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJsb2NhbGUiLCBsb2NhbGUudG9TdHJpbmcoKSk7CisJCXRyeSB7CisJCQlQcmVmZXJlbmNlcy5zYXZlUHJlZmVyZW5jZXMoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3ByZWZlcmVuY2VzX3NhdmUiKSwKKwkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQlpb2UucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisJCQorCQkvLyBDbG9zZSB0aGUgd2luZG93CisJCXRoaXNXaW5kb3dDbG9zaW5nKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQkdyb3VwUGFuZWwuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJHcm91cFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJHcm91cFBhbmVsLmphdmEKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLio7CitpbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogVGhlIGNsYXNzIHVzZWQgdG8gZGlzcGxheSBncm91cHMKKyAqLworY2xhc3MgUkJHcm91cFBhbmVsIGV4dGVuZHMgSlBhbmVsIHsKKwlSQk1hbmFnZXIgcmJtOworCUJ1bmRsZSBidW5kbGU7CisJUkJNYW5hZ2VyR1VJIGxpc3RlbmVyOworCQorCS8vIENvbXBvbmVudHMKKwlKTGFiZWwgICAgICBqTGFiZWxHcm91cFRpdGxlOworCUpMYWJlbCAgICAgIGpMYWJlbEdyb3VwTmFtZVRpdGxlOworCUpMYWJlbCAgICAgIGpMYWJlbEdyb3VwQ29tbWVudFRpdGxlOworCUpMYWJlbCAgICAgIGpMYWJlbEdyb3VwQ29tbWVudDsKKwlKQ29tYm9Cb3ggICBqQ29tYm9Cb3hHcm91cDsKKwlKVGFibGUgICAgICBqVGFibGVHcm91cFRhYmxlOworCUpTY3JvbGxQYW5lIGpTY3JvbGxQYW5lR3JvdXBUYWJsZTsKKwkKKwkvLyBDb21wb25lbnRzIC0gTWFuYWdlcgorCUpMaXN0ICAgICAgIGpMaXN0R3JvdXA7CisJSkJ1dHRvbiAgICAgY3JlYXRlSXRlbUJ1dHRvbjsKKwlKQnV0dG9uICAgICBjcmVhdGVHcm91cEJ1dHRvbjsKKwlKQnV0dG9uICAgICBlZGl0SXRlbUJ1dHRvbjsKKwlKQnV0dG9uICAgICBlZGl0R3JvdXBCdXR0b247CisJSkJ1dHRvbiAgICAgZGVsZXRlSXRlbUJ1dHRvbjsKKwlKQnV0dG9uICAgICBkZWxldGVHcm91cEJ1dHRvbjsKKwlKUGFuZWwgICAgICBpdGVtUGFuZWw7CisJSlBhbmVsICAgICAgZ3JvdXBQYW5lbDsKKwkKKwlwdWJsaWMgUkJHcm91cFBhbmVsKFJCTWFuYWdlckdVSSBndWkpIHsKKwkJc3VwZXIoKTsKKwkJbGlzdGVuZXIgPSBndWk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldEJ1bmRsZShCdW5kbGUgYikgeworCQlyYm0gPSBudWxsOworCQlpZiAoYnVuZGxlID09IG51bGwpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKGJ1bmRsZSAhPSBiKSB7CisJCQlidW5kbGUgPSBiOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHNldE1hbmFnZXIoUkJNYW5hZ2VyIG0pIHsKKwkJYnVuZGxlID0gbnVsbDsKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlyYm0gPSBtOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbSkgeworCQkJcmJtID0gbTsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50cygpIHsKKwkJaWYgKHJibSAhPSBudWxsIHx8IGJ1bmRsZSAhPSBudWxsKSB7CisJCQlyYm0gPSBudWxsOworCQkJYnVuZGxlID0gbnVsbDsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJLy8gTWFya3MgdGhlIHNlbGVjdGVkIHJlc291cmNlIGFzIHRyYW5zbGF0ZWQgYW5kIHJlbW92ZXMgZnJvbSB0aGlzIHZpZXcKKwlwcml2YXRlIHZvaWQgbWFya1NlbGVjdGVkUmVzb3VyY2VBc1RyYW5zbGF0ZWQoKSB7CisJCWlmIChidW5kbGUgPT0gbnVsbCkgcmV0dXJuOworCQlpZiAoalRhYmxlR3JvdXBUYWJsZS5nZXRTZWxlY3RlZFJvdygpIDwgMCkgcmV0dXJuOworCQlpZiAoalRhYmxlR3JvdXBUYWJsZS5nZXRNb2RlbCgpIGluc3RhbmNlb2YgR3JvdXBJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCWludCByb3cgPSBqVGFibGVHcm91cFRhYmxlLmdldFNlbGVjdGVkUm93KCk7CisJCQlHcm91cEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChHcm91cEl0ZW1zVGFibGVNb2RlbClqVGFibGVHcm91cFRhYmxlLmdldE1vZGVsKCk7CisJCQlCdW5kbGVJdGVtIGl0ZW0gPSBtb2RlbC5nZXRCdW5kbGVJdGVtKHJvdyk7CisJCQlpdGVtLnNldFRyYW5zbGF0ZWQodHJ1ZSk7CisJCQltb2RlbC51cGRhdGUoKTsKKwkJfQorCX0KKwkKKwkvLyBSZW1vdmVzIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBmcm9tIHRoZSByZXNvdXJjZSBmaWxlCisJcHJpdmF0ZSB2b2lkIGRlbGV0ZVNlbGVjdGVkUmVzb3VyY2UoKSB7CisJCWlmIChidW5kbGUgPT0gbnVsbCkgcmV0dXJuOworCQlpZiAoalRhYmxlR3JvdXBUYWJsZS5nZXRTZWxlY3RlZFJvdygpIDwgMCkgcmV0dXJuOworCQlpZiAoalRhYmxlR3JvdXBUYWJsZS5nZXRNb2RlbCgpIGluc3RhbmNlb2YgR3JvdXBJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCWludCByb3cgPSBqVGFibGVHcm91cFRhYmxlLmdldFNlbGVjdGVkUm93KCk7CisJCQlHcm91cEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChHcm91cEl0ZW1zVGFibGVNb2RlbClqVGFibGVHcm91cFRhYmxlLmdldE1vZGVsKCk7CisJCQlCdW5kbGVJdGVtIGl0ZW0gPSBtb2RlbC5nZXRCdW5kbGVJdGVtKHJvdyk7CisJCQlpZiAoaXRlbS5nZXRQYXJlbnRHcm91cCgpICE9IG51bGwgJiYgaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpICE9IG51bGwpIHsKKwkJCQlCdW5kbGUgcGFyZW50QnVuZGxlID0gaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpOworCQkJCXBhcmVudEJ1bmRsZS5yZW1vdmVJdGVtKGl0ZW0uZ2V0S2V5KCkpOworCQkJfQorCQkJbW9kZWwudXBkYXRlKCk7CisJCX0KKwl9CisJCQorCXByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJLy8gSW5pdGlhbGl6ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJakxhYmVsR3JvdXBUaXRsZSAgICAgICAgICA9IG5ldyBKTGFiZWwoYnVuZGxlLm5hbWUpOworCQkJakNvbWJvQm94R3JvdXAgICAgICAgICAgICA9IG5ldyBKQ29tYm9Cb3gobmV3IEdyb3VwQ29tYm9Cb3hNb2RlbChidW5kbGUpKTsKKwkJCQorCQkJalRhYmxlR3JvdXBUYWJsZSAgICAgICAgICA9IG5ldyBKVGFibGUobmV3IEdyb3VwSXRlbXNUYWJsZU1vZGVsKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkpOworCQkJalNjcm9sbFBhbmVHcm91cFRhYmxlICAgICA9IG5ldyBKU2Nyb2xsUGFuZShqVGFibGVHcm91cFRhYmxlKTsKKwkJCWpMYWJlbEdyb3VwTmFtZVRpdGxlICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZWdyb3VwX2dyb3VwX25hbWUiKSk7CisJCQlqTGFiZWxHcm91cENvbW1lbnRUaXRsZSAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2Vncm91cF9ncm91cF9jb21tZW50IikpOworCQkJakxhYmVsR3JvdXBDb21tZW50ICAgICAgICA9IG5ldyBKTGFiZWwoKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0Q29tbWVudCgpKTsKKwkJCQorCQkJLy8gTG93ZXIgcGFuZWwgY29tcG9uZW50cworCQkJSlBhbmVsICBsb3dlclBhbmVsID0gbmV3IEpQYW5lbCgpOworCQkJSkJ1dHRvbiBkZWxldGVCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfcmVzb3VyY2UiKSk7CisJCQlKQnV0dG9uIHRyYW5zbGF0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX21hcmtfdHJhbnNsYXRlZCIpKTsKKwkJCQorCQkJZGVsZXRlQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZGVsZXRlX3Jlc291cmNlX3RyaWdnZXIiKSkpOworCQkJdHJhbnNsYXRlQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fbWFya190cmFuc2xhdGVkX3RyaWdnZXIiKSkpOworCQkJbG93ZXJQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXVudHJhbnNfc2VsZWN0ZWRfcmVzb3VyY2VzX29wdGlvbnMiKSkpOworCQkJbG93ZXJQYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwyKSk7CisJCQkKKwkJCWpMYWJlbEdyb3VwTmFtZVRpdGxlLnNldEhvcml6b250YWxBbGlnbm1lbnQoU3dpbmdDb25zdGFudHMuTEVGVCk7CisJCQkKKwkJCWpUYWJsZUdyb3VwVGFibGUuc2V0U2VsZWN0aW9uTW9kZShMaXN0U2VsZWN0aW9uTW9kZWwuU0lOR0xFX1NFTEVDVElPTik7CisJCQlqVGFibGVHcm91cFRhYmxlLmFkZE1vdXNlTGlzdGVuZXIobGlzdGVuZXIpOworCQkJCisJCQlqQ29tYm9Cb3hHcm91cC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgR3JvdXBDb21ib0FjdGlvbkxpc3RlbmVyKHRoaXMpKTsKKwkJCQorCQkJakxhYmVsR3JvdXBUaXRsZS5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLEZvbnQuUExBSU4sMTgpKTsKKwkJCQorCQkJLy8gQWRkIGFjdGlvbiBsaXN0ZW5lcnMKKwkJCWRlbGV0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJZGVsZXRlU2VsZWN0ZWRSZXNvdXJjZSgpOworCQkJCX0KKwkJCX0pOworCQkJCisJCQl0cmFuc2xhdGVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCW1hcmtTZWxlY3RlZFJlc291cmNlQXNUcmFuc2xhdGVkKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCS8vIFVwZGF0ZSB0aGUgZGlzcGxheQorCQkJc2V0TGF5b3V0KG5ldyBHcmlkQmFnTGF5b3V0KCkpOworCQkJR3JpZEJhZ0NvbnN0cmFpbnRzIGdiYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKKwkJCXJlbW92ZUFsbCgpOworCQkJbG93ZXJQYW5lbC5hZGQoZGVsZXRlQnV0dG9uKTsKKwkJCWxvd2VyUGFuZWwuYWRkKHRyYW5zbGF0ZUJ1dHRvbik7CisKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLndlaWdodHkgPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsKKwkJCWdiYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLkhPUklaT05UQUw7CisJCQlhZGQoakxhYmVsR3JvdXBUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMC4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IDE7CisJCQlhZGQoakxhYmVsR3JvdXBOYW1lVGl0bGUsIGdiYyk7CisJCQlnYmMud2VpZ2h0eCA9IDEuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworCQkJYWRkKGpDb21ib0JveEdyb3VwLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gMTsKKwkJCWFkZChqTGFiZWxHcm91cENvbW1lbnRUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7CisJCQlhZGQoakxhYmVsR3JvdXBDb21tZW50LCBnYmMpOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuQk9USDsKKwkJCWdiYy53ZWlnaHR5ID0gMS4wOworCQkJYWRkKGpTY3JvbGxQYW5lR3JvdXBUYWJsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR5ID0gMC4wOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuSE9SSVpPTlRBTDsKKwkJCWFkZChsb3dlclBhbmVsLCBnYmMpOworCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQlCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5maXJzdEVsZW1lbnQoKTsKKwkJCWpMYWJlbEdyb3VwVGl0bGUgICAgICAgICAgPSBuZXcgSkxhYmVsKHJibS5nZXRCYXNlQ2xhc3MoKSArICIgLSAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJncm91cHMiKSk7CisJCQlqQ29tYm9Cb3hHcm91cCAgICAgICAgICAgID0gbmV3IEpDb21ib0JveChuZXcgR3JvdXBDb21ib0JveE1vZGVsKG1haW5CdW5kbGUpKTsvL21haW5CdW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKSk7CisJCQkKKwkJCWpMaXN0R3JvdXAgICAgICAgICAgICAgICAgPSBuZXcgSkxpc3QobmV3IEdyb3VwSXRlbXNMaXN0TW9kZWwoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKSk7CisJCQlqU2Nyb2xsUGFuZUdyb3VwVGFibGUgICAgID0gbmV3IEpTY3JvbGxQYW5lKGpMaXN0R3JvdXApOworCQkJakxhYmVsR3JvdXBOYW1lVGl0bGUgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlZ3JvdXBfZ3JvdXBfbmFtZSIpKTsKKwkJCWpMYWJlbEdyb3VwQ29tbWVudFRpdGxlICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZWdyb3VwX2dyb3VwX2NvbW1lbnQiKSk7CisJCQl0cnkgeworCQkJCWpMYWJlbEdyb3VwQ29tbWVudCAgICA9IG5ldyBKTGFiZWwoKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0Q29tbWVudCgpKTsKKwkJCX0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkgeworCQkJCWpMYWJlbEdyb3VwQ29tbWVudCAgICA9IG5ldyBKTGFiZWwoIiIpOworCQkJfQorCQkJCisJCQljcmVhdGVJdGVtQnV0dG9uICAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlX3Jlc291cmNlIikpOworCQkJY3JlYXRlR3JvdXBCdXR0b24gICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV9ncm91cCIpKTsKKwkJCWRlbGV0ZUl0ZW1CdXR0b24gICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfcmVzb3VyY2UiKSk7CisJCQlkZWxldGVHcm91cEJ1dHRvbiAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZGVsZXRlX2dyb3VwIikpOworCQkJZWRpdEl0ZW1CdXR0b24gICAgICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXRfcmVzb3VyY2UiKSk7CisJCQllZGl0R3JvdXBCdXR0b24gICAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdF9ncm91cCIpKTsKKwkJCQorCQkJaXRlbVBhbmVsICAgICAgICAgICAgICAgICA9IG5ldyBKUGFuZWwoKTsKKwkJCWdyb3VwUGFuZWwgICAgICAgICAgICAgICAgPSBuZXcgSlBhbmVsKCk7CisJCQkKKwkJCWl0ZW1QYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZWdyb3VwX2l0ZW1fb3B0aW9ucyIpKSk7CisJCQlncm91cFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlZ3JvdXBfZ3JvdXBfb3B0aW9ucyIpKSk7CisJCQlpdGVtUGFuZWwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsMykpOworCQkJZ3JvdXBQYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwzKSk7CisJCQlpdGVtUGFuZWwuc2V0TWF4aW11bVNpemUobmV3IERpbWVuc2lvbigyMDAwMCw1MCkpOworCQkJZ3JvdXBQYW5lbC5zZXRNYXhpbXVtU2l6ZShuZXcgRGltZW5zaW9uKDIwMDAwLDUwKSk7CisJCQkKKwkJCWNyZWF0ZUl0ZW1CdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQllZGl0SXRlbUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXRfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQlkZWxldGVJdGVtQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZGVsZXRlX3Jlc291cmNlX3RyaWdnZXIiKSkpOworCQkJY3JlYXRlR3JvdXBCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfZ3JvdXBfdHJpZ2dlciIpKSk7CisJCQkKKwkJCWpMaXN0R3JvdXAuc2V0U2VsZWN0aW9uTW9kZShMaXN0U2VsZWN0aW9uTW9kZWwuU0lOR0xFX1NFTEVDVElPTik7CisJCQkKKwkJCWpDb21ib0JveEdyb3VwLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBHcm91cENvbWJvQWN0aW9uTGlzdGVuZXIodGhpcykpOworCQkJCisJCQlqTGFiZWxHcm91cFRpdGxlLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCisJCQkvLyBBZGQgdGhlIGxpc3RlbmVycworCQkJakxpc3RHcm91cC5hZGRNb3VzZUxpc3RlbmVyKG5ldyBNb3VzZUFkYXB0ZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW91c2VDbGlja2VkKE1vdXNlRXZlbnQgZXYpIHsgCisJCQkJCWlmKGV2LmdldENsaWNrQ291bnQoKSA9PSAyICYmIGV2LmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSkxpc3QpIHsKKwkJCQkJCS8vIEEgZG91YmxlIGNsaWNrIG1lYW5zIHRoZXkgd2FudCB0byBlZGl0IGEgYnVuZGxlIGl0ZW0KKwkJCQkJCWlmICgoKEpMaXN0KWV2LmdldFNvdXJjZSgpKS5nZXRTZWxlY3RlZFZhbHVlKCkgIT0gbnVsbCkKKwkJCQkJCQluZXcgQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nKChCdW5kbGVJdGVtKSgoSkxpc3QpZXYuZ2V0U291cmNlKCkpLmdldFNlbGVjdGVkVmFsdWUoKSwKKwkJCQkJCQkJbGlzdGVuZXIucmJtLCBsaXN0ZW5lciwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZWRpdF9pdGVtIiksIHRydWUpOworCQkJCQl9CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCWNyZWF0ZUl0ZW1CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCW5ldyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0TmFtZSgpLAorCQkJCQkJCQkJCQkJIGxpc3RlbmVyLnJibSwgbGlzdGVuZXIsCisJCQkJCQkJCQkJCQkgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfbmV3X2l0ZW0iKSwgdHJ1ZSk7CisJCQkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJCQl9CisJCQl9KTsKKwkJCWNyZWF0ZUdyb3VwQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCWVkaXRJdGVtQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJaWYgKGpMaXN0R3JvdXAuZ2V0U2VsZWN0ZWRWYWx1ZSgpICE9IG51bGwpCisJCQkJCQluZXcgQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nKChCdW5kbGVJdGVtKWpMaXN0R3JvdXAuZ2V0U2VsZWN0ZWRWYWx1ZSgpLAorCQkJCQkJCWxpc3RlbmVyLnJibSwgbGlzdGVuZXIsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2VkaXRfaXRlbSIpLCB0cnVlKTsKKwkJCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQkJCX0KKwkJCX0pOworCQkJZWRpdEdyb3VwQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJbmV3IEJ1bmRsZUdyb3VwRWRpdERpYWxvZygoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCksCisJCQkJCQkJCQkJCSAgbGlzdGVuZXIsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2VkaXRfZ3JvdXAiKSwgdHJ1ZSk7CisJCQkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJCQl9CisJCQl9KTsKKwkJCWRlbGV0ZUdyb3VwQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJaW50IHJlc3BvbnNlID0gSk9wdGlvblBhbmUuc2hvd0NvbmZpcm1EaWFsb2cobGlzdGVuZXIsCisJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ193YXJuaW5nX2RlbGV0ZV9ncm91cCIpLAorCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZGVsZXRlX2dyb3VwIiksIEpPcHRpb25QYW5lLk9LX0NBTkNFTF9PUFRJT04sCisJCQkJCQlKT3B0aW9uUGFuZS5XQVJOSU5HX01FU1NBR0UpOworCQkJCQlpZiAocmVzcG9uc2UgPT0gSk9wdGlvblBhbmUuT0tfT1BUSU9OKSB7CisJCQkJCQkvLyBEZWxldGUgdGhlIGdyb3VwIAorCQkJCQkJaW50IGluZGV4ID0gakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJbmRleCgpOworCQkJCQkJQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCk7CisJCQkJCQlpZiAoZ3JvdXAuZ2V0TmFtZSgpLmVxdWFscygiVW5ncm91cGVkIEl0ZW1zIikpCisJCQkJCQkJcmV0dXJuOworCQkJCQkJaWYgKGluZGV4IDwgakNvbWJvQm94R3JvdXAuZ2V0SXRlbUNvdW50KCktMSkKKwkJCQkJCQlqQ29tYm9Cb3hHcm91cC5zZXRTZWxlY3RlZEluZGV4KGluZGV4KzEpOworCQkJCQkJZWxzZQorCQkJCQkJCWpDb21ib0JveEdyb3VwLnNldFNlbGVjdGVkSW5kZXgoaW5kZXgtMSk7CisJCQkJCQlyYm0uZGVsZXRlR3JvdXAoZ3JvdXAuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCWRlbGV0ZUl0ZW1CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlpbnQgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxvZyhsaXN0ZW5lciwKKwkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2l0ZW0iKSwKKwkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2RlbGV0ZV9pdGVtIiksIEpPcHRpb25QYW5lLk9LX0NBTkNFTF9PUFRJT04sCisJCQkJCQlKT3B0aW9uUGFuZS5XQVJOSU5HX01FU1NBR0UpOworCQkJCQlpZiAocmVzcG9uc2UgPT0gSk9wdGlvblBhbmUuT0tfT1BUSU9OKSB7CisJCQkJCQlPYmplY3QgbyA9IGpMaXN0R3JvdXAuZ2V0U2VsZWN0ZWRWYWx1ZSgpOworCQkJCQkJaWYgKG8gIT0gbnVsbCkgeworCQkJCQkJCUJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKSBvOworCQkJCQkJCWhhbmRsZURlbGV0ZUl0ZW0oaXRlbS5nZXRLZXkoKSk7CisJCQkJCQkJLy9wYW5lbC5yYm0uZGVsZXRlSXRlbShpdGVtLmdldEtleSgpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCS8vIFVwZGF0ZSB0aGUgZGlzcGxheQorCQkJc2V0TGF5b3V0KG5ldyBHcmlkQmFnTGF5b3V0KCkpOworCQkJR3JpZEJhZ0NvbnN0cmFpbnRzIGdiYyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKKwkJCXJlbW92ZUFsbCgpOworCQkJaXRlbVBhbmVsLmFkZChjcmVhdGVJdGVtQnV0dG9uLCBCb3JkZXJMYXlvdXQuV0VTVCk7CisJCQlpdGVtUGFuZWwuYWRkKGVkaXRJdGVtQnV0dG9uLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCWl0ZW1QYW5lbC5hZGQoZGVsZXRlSXRlbUJ1dHRvbiwgQm9yZGVyTGF5b3V0LkVBU1QpOworCQkJZ3JvdXBQYW5lbC5hZGQoY3JlYXRlR3JvdXBCdXR0b24sIEJvcmRlckxheW91dC5XRVNUKTsKKwkJCWdyb3VwUGFuZWwuYWRkKGVkaXRHcm91cEJ1dHRvbiwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQlncm91cFBhbmVsLmFkZChkZWxldGVHcm91cEJ1dHRvbiwgQm9yZGVyTGF5b3V0LkVBU1QpOworCisJCQkKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLndlaWdodHkgPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsKKwkJCWdiYy5maWxsID0gR3JpZEJhZ0NvbnN0cmFpbnRzLkhPUklaT05UQUw7CisJCQlhZGQoakxhYmVsR3JvdXBUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMC4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IDE7CisJCQlhZGQoakxhYmVsR3JvdXBOYW1lVGl0bGUsIGdiYyk7CisJCQlnYmMud2VpZ2h0eCA9IDEuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworCQkJYWRkKGpDb21ib0JveEdyb3VwLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gMTsKKwkJCWFkZChqTGFiZWxHcm91cENvbW1lbnRUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7CisJCQlhZGQoakxhYmVsR3JvdXBDb21tZW50LCBnYmMpOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuQk9USDsKKwkJCWdiYy53ZWlnaHR5ID0gMS4wOworCQkJYWRkKGpTY3JvbGxQYW5lR3JvdXBUYWJsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR5ID0gMC4wOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuSE9SSVpPTlRBTDsKKwkJCWFkZChncm91cFBhbmVsLCBnYmMpOworCQkJYWRkKGl0ZW1QYW5lbCwgZ2JjKTsKKwkJfSBlbHNlIHsKKwkJCXJlbW92ZUFsbCgpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbXBvbmVudHMoKSB7CisJCS8vIEluaXRpYWxpemUgY29tcG9uZW50cworCQlpZiAoYnVuZGxlICE9IG51bGwpIHsKKwkJCWpMYWJlbEdyb3VwVGl0bGUuc2V0VGV4dChidW5kbGUubmFtZSk7CisJCQkKKwkJCSgoR3JvdXBJdGVtc1RhYmxlTW9kZWwpalRhYmxlR3JvdXBUYWJsZS5nZXRNb2RlbCgpKS5zZXRHcm91cCgoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCkpOworCQkJakxhYmVsR3JvdXBDb21tZW50LnNldFRleHQoKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0Q29tbWVudCgpKTsKKwkJCQorCQkJalRhYmxlR3JvdXBUYWJsZS5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfU0VMRUNUSU9OKTsKKwkJCQorCQkJLy8gVXBkYXRlIHRoZSBncm91cCBjb21tZW50CisJCQlqTGFiZWxHcm91cENvbW1lbnQuc2V0VGV4dCgoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRDb21tZW50KCkpOworCQkJKChHcm91cENvbWJvQm94TW9kZWwpakNvbWJvQm94R3JvdXAuZ2V0TW9kZWwoKSkudXBkYXRlKCk7CisJCX0gZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCQorCQkJLy8gVXBkYXRlIHRoZSBsaXN0IG9mIGdyb3VwcworLy8JCQl0cnkgeworCQkJCSgoR3JvdXBDb21ib0JveE1vZGVsKWpDb21ib0JveEdyb3VwLmdldE1vZGVsKCkpLnVwZGF0ZSgpOworLy8JCQl9CisvLwkJCWNhdGNoIChFeGNlcHRpb24gZSkge30KKwkJCS8vIFVwZGF0ZSB0aGUgZ3JvdXAgY29tbWVudAorCQkJaWYgKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxsKQorCQkJCWpMYWJlbEdyb3VwQ29tbWVudC5zZXRUZXh0KCgoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldENvbW1lbnQoKSk7CisJCQllbHNlCisJCQkJakxhYmVsR3JvdXBDb21tZW50LnNldFRleHQoIiIpOworCQkJLy8gVXBkYXRlIHRoZSBsaXN0IG9mIHJlc291cmNlcworCQkJTGlzdE1vZGVsIGxtb2RlbCA9IGpMaXN0R3JvdXAuZ2V0TW9kZWwoKTsKKwkJCWlmIChsbW9kZWwgaW5zdGFuY2VvZiBHcm91cEl0ZW1zTGlzdE1vZGVsKSB7CisJCQkJLy8oKEdyb3VwSXRlbXNMaXN0TW9kZWwpbG1vZGVsKS51cGRhdGUoKTsKKwkJCQkoKEdyb3VwSXRlbXNMaXN0TW9kZWwpbG1vZGVsKS5zZXRHcm91cCgoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCkpOworCQkJfQorCQkJZWxzZSB7CisJCQkJR3JvdXBJdGVtc0xpc3RNb2RlbCBuZXdNb2RlbCA9IG5ldyBHcm91cEl0ZW1zTGlzdE1vZGVsKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSk7CisJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJMaXN0IE1vZGVsIG5vdCBhcyBhbnRpY2lwYXRlZDogIiArIGxtb2RlbC5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisJCQkJakxpc3RHcm91cC5zZXRNb2RlbChuZXdNb2RlbCk7CisJCQkJbmV3TW9kZWwudXBkYXRlKCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIlVwZGF0ZSwgYnV0IG5vIGFjdGl2ZSBjb21wb25lbnRzIik7CisJCQlyZW1vdmVBbGwoKTsKKwkJfQorCQkvL3ZhbGlkYXRlKCk7CisJfQorCQorCXByaXZhdGUgdm9pZCBoYW5kbGVEZWxldGVJdGVtKFN0cmluZyBrZXkpIHsKKwkJaWYgKHJibSAhPSBudWxsKSByYm0uZGVsZXRlSXRlbShrZXkpOworCX0KK30KKworLyoqCisgKiBUaGUgYWN0aW9uIGxpc3RlbmVyIHdoaWNoIG1vbml0b3JzIGNoYW5nZXMgaW4gdGhlIGdyb3VwIHRvIGRpc3BsYXkKKyAqLworY2xhc3MgR3JvdXBDb21ib0FjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXIgeworCVJCR3JvdXBQYW5lbCBwYW5lbDsKKwkKKwlwcm90ZWN0ZWQgR3JvdXBDb21ib0FjdGlvbkxpc3RlbmVyKFJCR3JvdXBQYW5lbCBwYW5lbCkgeworCQl0aGlzLnBhbmVsID0gcGFuZWw7CisJfQorCQorCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQlwYW5lbC51cGRhdGVDb21wb25lbnRzKCk7CisJfQorfQorCisvKioKKyAqIFRoZSBsaXN0IG1vZGVsIGZvciBncm91cHMKKyAqLworY2xhc3MgR3JvdXBJdGVtc0xpc3RNb2RlbCBleHRlbmRzIEFic3RyYWN0TGlzdE1vZGVsIHsKKwlCdW5kbGVHcm91cCBncm91cDsKKwkKKwlwdWJsaWMgdm9pZCBzZXRHcm91cChCdW5kbGVHcm91cCBncm91cCkgeworCQl0aGlzLmdyb3VwID0gZ3JvdXA7CisJCXVwZGF0ZSgpOworCX0KKwkKKwlwdWJsaWMgR3JvdXBJdGVtc0xpc3RNb2RlbChCdW5kbGVHcm91cCBncm91cCkgeworCQl0aGlzLmdyb3VwID0gZ3JvdXA7CisJfQorCQorCXB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsKKwkJaWYgKGdyb3VwID09IG51bGwpCisJCQlyZXR1cm4gMDsKKwkJaW50IHJlc3VsdCA9IGdyb3VwLmdldEl0ZW1Db3VudCgpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwdWJsaWMgT2JqZWN0IGdldEVsZW1lbnRBdChpbnQgaW5kZXgpIHsKKwkJcmV0dXJuIGdyb3VwLmdldEJ1bmRsZUl0ZW0oaW5kZXgpOworCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisJCWZpcmVDb250ZW50c0NoYW5nZWQodGhpcywgMCwgZ2V0U2l6ZSgpLTEpOworCX0KK30KKworLyoqCisgKiBUaGUgdGFibGUgbW9kZWwgZm9yIHNlYXJjaGVkIEl0ZW1zCisgKi8KK2NsYXNzIEdyb3VwQ29tYm9Cb3hNb2RlbCBleHRlbmRzIERlZmF1bHRDb21ib0JveE1vZGVsIHsKKwlCdW5kbGUgYnVuZGxlOworCQorCXB1YmxpYyBHcm91cENvbWJvQm94TW9kZWwgKEJ1bmRsZSBidW5kbGUpIHsKKwkJdGhpcy5idW5kbGUgPSBidW5kbGU7CisJCXNldFNlbGVjdGVkSXRlbShidW5kbGUuZ2V0QnVuZGxlR3JvdXAoMCkpOworCX0KKwkKKwlwdWJsaWMgaW50IGdldFNpemUoKSB7CisJCXJldHVybiBidW5kbGUuZ2V0R3JvdXBDb3VudCgpOworCX0KKwkKKwlwdWJsaWMgT2JqZWN0IGdldEVsZW1lbnRBdChpbnQgaW5kZXgpIHsKKwkJcmV0dXJuIGJ1bmRsZS5nZXRCdW5kbGVHcm91cChpbmRleCk7CisJfQorCQorCXB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0ZWRJdGVtKCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0U2VsZWN0ZWRJdGVtKCk7CisJCS8vcmV0dXJuIGdldEVsZW1lbnRBdCgwKTsKKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlKCkgeworCQlmaXJlQ29udGVudHNDaGFuZ2VkKHRoaXMsIDAsIGdldFNpemUoKS0xKTsKKwl9Cit9CisKKy8qKgorICogVGhlIHRhYmxlIG1vZGVsIGZvciBidW5kbGUgZ3JvdXBzCisgKi8KK2NsYXNzIEdyb3VwSXRlbXNUYWJsZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RUYWJsZU1vZGVsIHsKKwlCdW5kbGVHcm91cCBncm91cDsKKwkKKwlwdWJsaWMgR3JvdXBJdGVtc1RhYmxlTW9kZWwoQnVuZGxlR3JvdXAgZ3JvdXApIHsKKwkJdGhpcy5ncm91cCA9IGdyb3VwOworCX0KKwkKKwlwdWJsaWMgaW50IGdldENvbHVtbkNvdW50KCkgeyByZXR1cm4gMzsgfQorCQkgICAgCisJcHVibGljIGludCBnZXRSb3dDb3VudCgpIHsKKwkJcmV0dXJuIGdyb3VwLmdldEl0ZW1Db3VudCgpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRHcm91cChCdW5kbGVHcm91cCBiZykgeworCQlncm91cCA9IGJnOworCQlmaXJlVGFibGVDaGFuZ2VkKG5ldyBUYWJsZU1vZGVsRXZlbnQodGhpcykpOworCX0KKwkJCQorCXB1YmxpYyBPYmplY3QgZ2V0VmFsdWVBdChpbnQgcm93LCBpbnQgY29sKSB7CisJCUJ1bmRsZUl0ZW0gaXRlbSA9IGdyb3VwLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCQkKKwkJU3RyaW5nIHJldFN0ciA9IG51bGw7CisJCQkJCisJCXN3aXRjaChjb2wpIHsKKwkJY2FzZSAwOgorCQkJcmV0U3RyID0gaXRlbS5nZXRLZXkoKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyZXRTdHIgPSBpdGVtLmdldFRyYW5zbGF0aW9uKCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcmV0U3RyID0gKGl0ZW0uZ2V0Q29tbWVudCgpID09IG51bGwgPyAiIiA6IGl0ZW0uZ2V0Q29tbWVudCgpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0U3RyID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJsZV9jZWxsX2Vycm9yIik7CisJCX0KKwkJCQkKKwkJcmV0dXJuIHJldFN0cjsKKwl9CisJCisJcHVibGljIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpIHsKKwkJaWYgKGNvbCA9PSAwKSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZWdyb3VwX2NvbHVtbl9rZXkiKTsKKwkJZWxzZSBpZiAoY29sID09IDEpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlZ3JvdXBfY29sdW1uX3RyYW5zbGF0aW9uIik7CisJCWVsc2UgaWYgKGNvbCA9PSAyKSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZWdyb3VwX2NvbHVtbl9jb21tZW50Iik7CisJCWVsc2UgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFibGVfY29sdW1uX2Vycm9yIik7CisJfQorCQorCXB1YmxpYyBCdW5kbGVJdGVtIGdldEJ1bmRsZUl0ZW0oaW50IHJvdykgeworCQlpZiAocm93ID49IGdyb3VwLmdldEl0ZW1Db3VudCgpKQorCQkgICAgcmV0dXJuIG51bGw7CisJCXJldHVybiBncm91cC5nZXRCdW5kbGVJdGVtKHJvdyk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKKwkJZmlyZVRhYmxlRGF0YUNoYW5nZWQoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJNYW5hZ2VyR1VJLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCTWFuYWdlckdVSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjQ1NjYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCTWFuYWdlckdVSS5qYXZhCkBAIC0wLDAgKzEsMTgxNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZheC5zd2luZy5ldmVudC4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogVGhlIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZSBmb3Igd29ya2luZyB3aXRoIGFuZCB0aHJvdWdoIGEgUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIuIFRoZSBHVUkgaGFzIG5vIHB1YmxpYyBtYWluCisgKiBtZXRob2QuIEl0IGlzIGluc3RlYWQgaW5zdGFudGlhdGVkIGZyb20gcnVubmluZyB0aGUgbWFpbiBtZXRob2QgaW4gUkJNYW5hZ2VyLiBGb3IgaGVscCB3aXRoIHVzaW5nIHRoaXMgaW50ZXJmYWNlLAorICogY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcHJvamVjdC4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJNYW5hZ2VyR1VJIGV4dGVuZHMgSkZyYW1lIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXIsIE1vdXNlTGlzdGVuZXIsIENoYW5nZUxpc3RlbmVyLCBUcmVlU2VsZWN0aW9uTGlzdGVuZXIKK3sKKwkvLyBDT05TVEFOVFMKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgYnVmZmVyID0gMjA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbU1haW4gPSBuZXcgRGltZW5zaW9uKDc1MCw1NTApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1NYWluTWF4ID0gbmV3IERpbWVuc2lvbigyMDAwLDE1MDApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1NYWluTWluID0gbmV3IERpbWVuc2lvbig1NTAsMzUwKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltVG9wID0gbmV3IERpbWVuc2lvbihkaW1NYWluLndpZHRoIC0gYnVmZmVyLDUwKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltVG9wTWF4ID0gbmV3IERpbWVuc2lvbihkaW1NYWluTWF4LndpZHRoIC0gYnVmZmVyLDUwKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltVG9wTWluID0gbmV3IERpbWVuc2lvbihkaW1NYWluTWluLndpZHRoIC0gYnVmZmVyLDUwKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltQm90dG9tID0gbmV3IERpbWVuc2lvbihkaW1NYWluLndpZHRoIC0gYnVmZmVyLGRpbU1haW4uaGVpZ2h0LWRpbVRvcC5oZWlnaHQgLSBidWZmZXIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1Cb3R0b21NYXggPSBuZXcgRGltZW5zaW9uKGRpbU1haW5NYXgud2lkdGggLSBidWZmZXIsZGltTWFpbk1heC5oZWlnaHQtZGltVG9wTWluLmhlaWdodCAtIGJ1ZmZlcik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbUJvdHRvbU1pbiA9IG5ldyBEaW1lbnNpb24oZGltTWFpbk1pbi53aWR0aCAtIGJ1ZmZlcixkaW1NYWluTWluLmhlaWdodC1kaW1Ub3BNYXguaGVpZ2h0IC0gYnVmZmVyKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltTGVmdCA9IG5ldyBEaW1lbnNpb24oMTc1LGRpbUJvdHRvbS5oZWlnaHQgLSBidWZmZXIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1SaWdodCA9IG5ldyBEaW1lbnNpb24oZGltTWFpbi53aWR0aC1kaW1MZWZ0LndpZHRoIC0gYnVmZmVyLGRpbUJvdHRvbS5oZWlnaHQgLSBidWZmZXIpOworCQorCS8qKgorCSAqIFVzZWQgZm9yIHRvZ2dsaW5nIHRoZSBkZWJ1ZyBtb2RlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnID0gZmFsc2U7CisJLyoqCisJICogVXNlZCB0byBjb3VudCBkZWJ1ZyBtZXNzYWdlcworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGRlYnVnY291bnQgPSAwOworCQorCS8vIG1lbWJlciBkZWNsYXJhdGlvbnMKKwkKKwkvLyAqKiBEQVRBICoqCisJUkJNYW5hZ2VyIHJibSA9IG51bGw7CisJU3RyaW5nIHVzZXJOYW1lID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKTsKKwkKKwlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGFjdGl2ZU5vZGUgPSBudWxsOworCQorCS8vICoqIE1BSU4gTUVOVSAqKgorCVJCTWFuYWdlck1lbnVCYXIgICAgICAgICBqTWVudUJhck1haW4gPSBudWxsOworCisJLy8gKiogQ09OVEVOVCBQQU5FUyAqKgorCUJveCAgICAgICAgICBib3hNYWluID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkvL0pQYW5lbCAgICAgICBqUGFuZWxUb3AgPSBuZXcgSlBhbmVsKCk7CisJSlBhbmVsICAgICAgIGpQYW5lbEJvdHRvbSA9IG5ldyBKUGFuZWwoKTsKKwlKU3BsaXRQYW5lICAgalNwbGl0UGFuZU1haW4gPSBuZXcgSlNwbGl0UGFuZShKU3BsaXRQYW5lLkhPUklaT05UQUxfU1BMSVQpOworCisJLy8gKiogU1BMSVQgUEFORSBDT01QT05FTlRTICoqCisJSlRyZWUgICAgICAgIGpUcmVlRGlzcGxheSA9IG5ldyBKVHJlZSgpOworCUpUYWJiZWRQYW5lICBqVGFiYmVkUGFuZU1haW4gPSBuZXcgSlRhYmJlZFBhbmUoKTsKKwlSQlN0YXRpc3RpY3NQYW5lbCAgICAgICAgalBhbmVsU3RhdHMgPSBuZXcgUkJTdGF0aXN0aWNzUGFuZWwoKTsKKwlSQlVudHJhbnNsYXRlZFBhbmVsICAgICAgalBhbmVsVW50cmFucyA9IG5ldyBSQlVudHJhbnNsYXRlZFBhbmVsKHRoaXMpOworCVJCR3JvdXBQYW5lbCAgICAgICAgICAgICBqUGFuZWxHcm91cHMgPSBuZXcgUkJHcm91cFBhbmVsKHRoaXMpOworCVJCU2VhcmNoUGFuZWwgICAgICAgICAgICBqUGFuZWxTZWFyY2ggPSBuZXcgUkJTZWFyY2hQYW5lbCh0aGlzKTsKKwlKU2Nyb2xsUGFuZSAgalNjcm9sbFBhbmVUcmVlID0gbmV3IEpTY3JvbGxQYW5lKGpUcmVlRGlzcGxheSwKKwkJCQkJCQkJCQkJCQlTY3JvbGxQYW5lQ29uc3RhbnRzLlZFUlRJQ0FMX1NDUk9MTEJBUl9BU19ORUVERUQsCisJCQkJCQkJCQkJCQkJU2Nyb2xsUGFuZUNvbnN0YW50cy5IT1JJWk9OVEFMX1NDUk9MTEJBUl9BU19ORUVERUQpOworCS8vICoqIFBST0pFQ1QgVklFVyBTUExJVCBQQU5FIENPTVBPTkVOVFMKKwlKVGFiYmVkUGFuZSAgICAgICAgICAgICAgdHJlZVRhYmJlZFBhbmUgPSBuZXcgSlRhYmJlZFBhbmUoKTsKKwlKVHJlZSAgICAgICAgICAgICAgICAgICAgcHJvamVjdFRyZWUgPSBuZXcgSlRyZWUoKTsKKwlKU2Nyb2xsUGFuZSAgICAgICAgICAgICAgcHJvamVjdFNjcm9sbFBhbmUgPSBuZXcgSlNjcm9sbFBhbmUocHJvamVjdFRyZWUsIAorCQkJCQkJCQkJCQkJCQkJCVNjcm9sbFBhbmVDb25zdGFudHMuVkVSVElDQUxfU0NST0xMQkFSX0FTX05FRURFRCwKKwkJCQkJCQkJCQkJCQkJCQlTY3JvbGxQYW5lQ29uc3RhbnRzLkhPUklaT05UQUxfU0NST0xMQkFSX0FTX05FRURFRCk7CisJUkJQcm9qZWN0SXRlbVBhbmVsICAgICAgIHByb2plY3RQYW5lbCA9IG5ldyBSQlByb2plY3RJdGVtUGFuZWwodGhpcyk7CisJUkJQcm9qZWN0ICAgICAgICAgICAgICAgIHByb2plY3QgPSBudWxsOworCQorCS8vICoqIEZpbGUgQ2hvb3NlciAqKgorCUpGaWxlQ2hvb3NlciBvcGVuRmlsZUNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJSkZpbGVDaG9vc2VyIHNhdmVGaWxlQ2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKwlKRmlsZUNob29zZXIgcHJvamVjdEZpbGVDaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworCQorCS8qKgorCSAqIENyZWF0aW9uIG9mIHRoZSBHVUkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBtZXRob2QgY2FsbHMgdG8gaW5pdENvbXBvbmVudHMoKSBhbmQgc2V0VmlzaWJsZSh0cnVlKS4KKwkgKiBUaGVzZSBtZXRob2RzIHdlcmUgbm90IGNhbGxlZCBieSBkZWZhdWx0IGZvciBwcm9ncmFtbWluZyBkaXNjcmV0aW9uCisJICovCisJCisJcHVibGljIFJCTWFuYWdlckdVSSgpCisJeworCX0KKwkKKwkvKioKKwkgKiBJbmhlcml0cyBmcm9tIEpGcmFtZS52YWxpZGF0ZSgpLCB3aXRoIHNvbWUgY29tcG9uZW50IHVwZGF0ZXMKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHsKKwkJc3VwZXIudmFsaWRhdGUoKTsKKwkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCX0KKwkKKwkvKioKKwkgKiBJbml0aWFsIGNvbnN0cnVjdGlvbiBvZiBhbGwgb2YgdGhlIEdVSSBjb21wb25lbnRzLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUKKwkgKiBjb25zdHJ1Y3Rpb24gb2YgdGhlIEdVSSBvYmplY3QuCisJICovCisJCisJcHVibGljIHZvaWQgaW5pdENvbXBvbmVudHMoKSB0aHJvd3MgRXhjZXB0aW9uCisJeworCQl0aGlzLnNldERlZmF1bHRDbG9zZU9wZXJhdGlvbihXaW5kb3dDb25zdGFudHMuRE9fTk9USElOR19PTl9DTE9TRSk7CisJCS8vIHRoZSBmb2xsb3dpbmcgY29kZSBzZXRzIHRoZSBmcmFtZSdzIGluaXRpYWwgc3RhdGUKKwkJCisJCW9wZW5GaWxlQ2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCkgeworCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCWlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworCQkJCQorCQkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQkJaWYgKCEobmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIucHJvcGVydGllcyIpKSkgcmV0dXJuIGZhbHNlOworCQkJCWlmIChuYW1lLmluZGV4T2YoIl8iKSA+IDApIHJldHVybiBmYWxzZTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQkJcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uIik7CisJCQl9CisJCX0pOworCQkKKwkJc2F2ZUZpbGVDaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKSB7CisJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisJCQkJCisJCQkJU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKwkJCQlpZiAoIShuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpKSByZXR1cm4gZmFsc2U7CisJCQkJaWYgKG5hbWUuaW5kZXhPZigiXyIpID4gMCkgcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQorCQkJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJCQlyZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb24iKTsKKwkJCX0KKwkJfSk7CisJCQorCQlwcm9qZWN0RmlsZUNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpIHsKKwkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKwkJCQlpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKwkJCQkKKwkJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCQkJCWlmICghKG5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnJicHJvamVjdCIpKSkgcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJCisJCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQkJCXJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcm9qZWN0X2ZpbHRlcl9kZXNjcmlwdGlvbiIpOwkKKwkJCX0KKwkJfSk7CisKKyAgICAgICAgLy8gKiogVGhlIE1haW4gcHJvZ3JhbSBpY29uICoqCisgICAgICAgIHNldEljb25JbWFnZSgobmV3IEltYWdlSWNvbihnZXRDbGFzcygpLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX2J1bmRsZS5naWYiKSkpLmdldEltYWdlKCkpOworCQkKKwkJLy8gKiogTUFJTiBNRU5VIEJBUiBJVEVNUyAqKgorCQlqTWVudUJhck1haW4gPSBuZXcgUkJNYW5hZ2VyTWVudUJhcih0aGlzKTsKKwkJCisJCS8vICoqIERJU1BMQVkgVFJFRSAqKgorCQkvL2pTY3JvbGxQYW5lVHJlZS5zZXRTaXplKGRpbUxlZnQpOworCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCQorCQlqUGFuZWxTdGF0cy5zZXRTaXplKGRpbVJpZ2h0KTsKKwkJalBhbmVsVW50cmFucy5zZXRTaXplKGRpbVJpZ2h0KTsKKwkJalBhbmVsR3JvdXBzLnNldFNpemUoZGltUmlnaHQpOworCQlqUGFuZWxTZWFyY2guc2V0U2l6ZShkaW1SaWdodCk7CisJCQorCQkvLyAqKiBNQUlOIFRBQkJFRCBQQU5FICoqCisJCWpUYWJiZWRQYW5lTWFpbi5zZXRTaXplKGRpbVJpZ2h0KTsKKwkJalRhYmJlZFBhbmVNYWluLmFkZFRhYihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9zdGF0aXN0aWNzIiksIGpQYW5lbFN0YXRzKTsKKwkJalRhYmJlZFBhbmVNYWluLmFkZFRhYihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl91bnRyYW5zbGF0ZWQiKSwgalBhbmVsVW50cmFucyk7CisJCWpUYWJiZWRQYW5lTWFpbi5hZGRUYWIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfZ3JvdXBzIiksIGpQYW5lbEdyb3Vwcyk7CisJCWpUYWJiZWRQYW5lTWFpbi5hZGRUYWIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfc2VhcmNoIiksIGpQYW5lbFNlYXJjaCk7CisJCQorCQkvLyAqKiBMRUZUIFRBQkJFRCBQQU5FICoqCisJCXRyZWVUYWJiZWRQYW5lLnNldFNpemUoZGltTGVmdCk7CisJCXRyZWVUYWJiZWRQYW5lLnNldFByZWZlcnJlZFNpemUoZGltTGVmdCk7CisJCXRyZWVUYWJiZWRQYW5lLmFkZFRhYihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9idW5kbGUiKSwgalNjcm9sbFBhbmVUcmVlKTsKKwkJdHJlZVRhYmJlZFBhbmUuYWRkVGFiKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX3Byb2plY3QiKSwgcHJvamVjdFNjcm9sbFBhbmUpOworCQl0cmVlVGFiYmVkUGFuZS5hZGRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKKwkJCisJCS8vICoqIE1BSU4gU1BMSVQgUEFORSAqKgorCQkvL2pTcGxpdFBhbmVNYWluLnNldFNpemUoZGltQm90dG9tKTsKKwkJLy9qU3BsaXRQYW5lTWFpbi5zZXRMZWZ0Q29tcG9uZW50KGpTY3JvbGxQYW5lVHJlZSk7CisJCWpTcGxpdFBhbmVNYWluLnNldExlZnRDb21wb25lbnQodHJlZVRhYmJlZFBhbmUpOworCQlqU3BsaXRQYW5lTWFpbi5zZXRSaWdodENvbXBvbmVudChqVGFiYmVkUGFuZU1haW4pOworCQlqU3BsaXRQYW5lTWFpbi5zZXRDb250aW51b3VzTGF5b3V0KHRydWUpOworCQkKKwkJLy8gKiogQk9UVE9NIFBBTkVMICoqCisJCS8valBhbmVsQm90dG9tLnNldFByZWZlcnJlZFNpemUoZGltQm90dG9tKTsKKwkJalBhbmVsQm90dG9tLnNldE1heGltdW1TaXplKGRpbUJvdHRvbU1heCk7CisJCWpQYW5lbEJvdHRvbS5zZXRNaW5pbXVtU2l6ZShkaW1Cb3R0b21NaW4pOworCQlqUGFuZWxCb3R0b20uc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlTGluZUJvcmRlcihDb2xvci5ibGFjaykpOworCQlqUGFuZWxCb3R0b20uc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoMSwxKSk7CisJCWpQYW5lbEJvdHRvbS5yZW1vdmVBbGwoKTsKKwkJalBhbmVsQm90dG9tLmFkZChqU3BsaXRQYW5lTWFpbiwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorCQkvLyAqKiBNQUlOIEZSQU1FIFNFVFVQICoqCisJCWRpbU1haW4uaGVpZ2h0ICs9IGpNZW51QmFyTWFpbi5nZXRQcmVmZXJyZWRTaXplKCkuaGVpZ2h0OworCQlzZXRTaXplKGRpbU1haW4pOworCQkoKEpDb21wb25lbnQpZ2V0Q29udGVudFBhbmUoKSkuc2V0TWF4aW11bVNpemUoZGltTWFpbk1heCk7CisJCSgoSkNvbXBvbmVudClnZXRDb250ZW50UGFuZSgpKS5zZXRNaW5pbXVtU2l6ZShkaW1NYWluTWluKTsKKwkJc2V0Sk1lbnVCYXIoak1lbnVCYXJNYWluKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5yZW1vdmVBbGwoKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQoalBhbmVsQm90dG9tLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJc2V0VGl0bGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXNvdXJjZV9idW5kbGVfbWFuYWdlciIpKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCQorCQlhZGRXaW5kb3dMaXN0ZW5lcihuZXcgamF2YS5hd3QuZXZlbnQuV2luZG93QWRhcHRlcigpIHsKKwkJCXB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQgZSkgeworCQkJCXRoaXNXaW5kb3dDbG9zaW5nKGUpOworCQkJfQorCQl9KTsKKwl9CisgIAorICAJcHJpdmF0ZSBib29sZWFuIG1TaG93biA9IGZhbHNlOworCQorCS8qKgorCSAqIFJldmVhbHMgdGhlIHByaXZhdGUgbWV0aG9kIG9mIEpGcmFtZS52YWxpZGF0ZVRyZWUoKQorCSAqLworCQorCXB1YmxpYyB2b2lkIHZhbGlkYXRlTXlUcmVlKCkgeworCQl2YWxpZGF0ZVRyZWUoKTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZSBGaWxlIChpLmUuIEVuZ2xpc2gsIEVuZ2xpc2ggQ2FuYWRhLCBGaW5uaXNoLCBldGMuKQorCSAqLworCQorCXB1YmxpYyB2b2lkIGNyZWF0ZVJlc291cmNlRmlsZSgpIHsKKwkJbmV3IFJlc291cmNlQ3JlYXRpb25EaWFsb2cocmJtLCB0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9uZXdfZmlsZSIpLCB0cnVlKTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZ3JvdXBpbmcgQnVuZGxlSXRlbXMKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBjcmVhdGVCdW5kbGVHcm91cCgpIHsKKwkJbmV3IEJ1bmRsZUdyb3VwQ3JlYXRpb25EaWFsb2cocmJtLCB0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9uZXdfZ3JvdXAiKSwgdHJ1ZSk7CisJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBCdW5kbGVJdGVtCisJICovCisJCisJcHVibGljIHZvaWQgY3JlYXRlQnVuZGxlSXRlbSgpIHsKKwkJbmV3IEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyhyYm0sIHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX25ld19pdGVtIiksIHRydWUpOworCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJfQorCQorCS8qKgorCSAqIEhhbmRsZXMgZXZlbnRzIGdlbmVyYXRlZAorCSAqLworCQorCXB1YmxpYyB2b2lkIHZhbHVlQ2hhbmdlZChUcmVlU2VsZWN0aW9uRXZlbnQgZXYpIHsKKwkJaWYgKGV2LmdldFNvdXJjZSgpID09IHByb2plY3RUcmVlKSB1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCWVsc2UgaWYgKGV2LmdldFNvdXJjZSgpID09IGpUcmVlRGlzcGxheSkgeworCQkJVHJlZVBhdGggc2VsUGF0aCA9IGpUcmVlRGlzcGxheS5nZXRTZWxlY3Rpb25QYXRoKCk7CisJCQlhY3RpdmVOb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpc2VsUGF0aC5nZXRMYXN0UGF0aENvbXBvbmVudCgpOworCQkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJLyoKKwkJCWludCBzZWxSb3cgPSBqVHJlZURpc3BsYXkuZ2V0Um93Rm9yTG9jYXRpb24oZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJVHJlZVBhdGggc2VsUGF0aCA9IGpUcmVlRGlzcGxheS5nZXRQYXRoRm9yTG9jYXRpb24oZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJaWYgKHNlbFJvdyAhPSAtMSkgeworICAgICAgICAgICAgaWYgKGV2LmdldENsaWNrQ291bnQoKSA9PSAxICYmIGV2LmdldFNvdXJjZSgpID09IGpUcmVlRGlzcGxheSkgeworCQkJCQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3RoZXIgdHJlZSIpOworCQkJfSBlbHNlIGlmIChldi5nZXRDbGlja0NvdW50KCkgPT0gMSAmJiBldi5nZXRTb3VyY2UoKSA9PSBwcm9qZWN0VHJlZSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTW91c2UgcHJlc3NlZCIpOworCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsJCisJCQl9IGVsc2UgU3lzdGVtLm91dC5wcmludGxuKFN0cmluZy52YWx1ZU9mKGV2LmdldENsaWNrQ291bnQoKSkgKyAiICIgKyBldi5nZXRTb3VyY2UoKS50b1N0cmluZygpKTsKKwkJCQorCQkJKi8KKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBzdGF0ZUNoYW5nZWQoQ2hhbmdlRXZlbnQgZXYpIHsKKwkJaWYgKGV2LmdldFNvdXJjZSgpID09IHRyZWVUYWJiZWRQYW5lKSB7CisJCQlpbnQgaW5kZXggPSB0cmVlVGFiYmVkUGFuZS5nZXRTZWxlY3RlZEluZGV4KCk7CQorCQkJU3RyaW5nIHRpdGxlID0gdHJlZVRhYmJlZFBhbmUuZ2V0VGl0bGVBdChpbmRleCk7CisJCQlpZiAodGl0bGUuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX2J1bmRsZSIpKSkgeworCQkJCWpTcGxpdFBhbmVNYWluLnNldFJpZ2h0Q29tcG9uZW50KGpUYWJiZWRQYW5lTWFpbik7CisJCQkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJfSBlbHNlIGlmICh0aXRsZS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfcHJvamVjdCIpKSkgeworCQkJCWpTcGxpdFBhbmVNYWluLnNldFJpZ2h0Q29tcG9uZW50KHByb2plY3RQYW5lbCk7CisJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJfQorCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQlpZiAoZXYuZ2V0SUQoKSA9PSBBY3Rpb25FdmVudC5BQ1RJT05fUEVSRk9STUVEKSB7CisJCQlpZiAoZXYuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBKTWVudUl0ZW0gJiYgKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKSAhPSBudWxsICYmCisJCQkJKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKS5zdGFydHNXaXRoKCJfXyIpKSB7ICAgICAgICAgICAgICAgLy8gTWVudSAtPiBGaWxlIC0+IF9fUmVjZW50IEZpbGUKKwkJCQkvLyBUaGlzIGl0ZW0gaXMgYSByZWNlbnQgZmlsZSBzZWxlY3Rpb24uIFdlIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUKKwkJCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKTsKKwkJCQlmaWxlTG9jYXRpb24gPSBmaWxlTG9jYXRpb24uc3Vic3RyaW5nKDIsZmlsZUxvY2F0aW9uLmxlbmd0aCgpKTsKKwkJCQl0cnkgeworCQkJCQlyYm0gPSBuZXcgUkJNYW5hZ2VyKG5ldyBGaWxlKGZpbGVMb2NhdGlvbikpOworCQkJCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQkJCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9vcGVuaW5nX2ZpbGUiLCBldi5nZXRBY3Rpb25Db21tYW5kKCkpLAorCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvcl9vcGVuaW5nX2ZpbGUiKSwKKwkJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCXJibSA9IG51bGw7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3NhdmUiKSkgJiYKKwkJCQkJICAgKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKSAhPSBudWxsKSB7ICAgICAgICAgICAgICAgIC8vIFBvcHVwIFRyZWUgTWVudSAtPiBTYXZlCisJCQkJU3RyaW5nIHNlbGVjdGVkRW5jb2RpbmcgPSAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpOworCQkJCXNhdmVSZXNvdXJjZXMoc2VsZWN0ZWRFbmNvZGluZyk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfaGlkZSIpKSAmJgorCQkJCQkgICAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpICE9IG51bGwpIHsgICAgICAgICAgICAgICAgLy8gUG9wdXAgVHJlZSBNZW51IC0+IEhpZGUKKwkJCQlTdHJpbmcgc2VsZWN0ZWRFbmNvZGluZyA9ICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCk7CisJCQkJLy8gU2hvdWxkIEkgcHJvbXB0IGZvciB0aGlzPworCQkJCWhpZGVSZXNvdXJjZXMoc2VsZWN0ZWRFbmNvZGluZyk7CisJCQl9ICBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX2RlbGV0ZSIpKSAmJgorCQkJCQkgICAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpICE9IG51bGwpIHsgICAgICAgICAgICAgICAgLy8gUG9wdXAgVHJlZSBNZW51IC0+IERlbGV0ZQorCQkJCVN0cmluZyBzZWxlY3RlZEVuY29kaW5nID0gKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKTsKKwkJCQlpbnQgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxvZyh0aGlzLAorCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19kZWxldGVfd2FybmluZyIpLAorCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9xdWl0IiksIEpPcHRpb25QYW5lLllFU19OT19DQU5DRUxfT1BUSU9OLAorCQkJCQlKT3B0aW9uUGFuZS5XQVJOSU5HX01FU1NBR0UpOworCQkJCWlmIChyZXNwb25zZSA9PSBKT3B0aW9uUGFuZS5ZRVNfT1BUSU9OKSB7CisJCQkJCWRlbGV0ZVJlc291cmNlcyhzZWxlY3RlZEVuY29kaW5nKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfbmV3X3Byb2plY3QiKSkpIHsKKwkJCQlTdHJpbmcgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93SW5wdXREaWFsb2codGhpcywgICAgICAgICAgICAgICAgICAgLy8gUG9wdXAgUHJvamVjdCBNZW51IC0+IE5ldyBQcm9qZWN0CisJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX25ld19wcm9qZWN0IiksIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX25ld19wcm9qZWN0IiksCisJCQkJCUpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UpOworCQkJCWlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlLnRyaW0oKS5lcXVhbHMoIiIpKSByZXR1cm47CisJCQkJcHJvamVjdCA9IG5ldyBSQlByb2plY3QocmVzcG9uc2UpOworCQkJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX29wZW5fcHJvamVjdCIpKSkgeworCQkJCWludCByZXN1bHQgPSBwcm9qZWN0RmlsZUNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7ICAgICAgICAgICAgICAgIC8vIFBvcHVwIFByb2plY3QgTWVudSAtPiBPcGVuIFByb2plY3QKKwkJCQlpZiAocmVzdWx0ID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworCQkJCQlGaWxlIGYgPSBwcm9qZWN0RmlsZUNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisJCQkJCXRyeSB7CisJCQkJCQlwcm9qZWN0ID0gbmV3IFJCUHJvamVjdChmKTsKKwkJCQkJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCQkJCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCQkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0aW5nX3Byb2plY3QiKSwKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9zYXZlX3Byb2plY3QiKSkpIHsKKwkJCQlpbnQgcmVzdWx0ID0gcHJvamVjdEZpbGVDaG9vc2VyLnNob3dTYXZlRGlhbG9nKHRoaXMpOyAgICAgICAgICAgICAgICAvLyBQb3B1cCBQcm9qZWN0IE1lbnUgLT4gU2F2ZSBQcm9qZWN0CisJCQkJaWYgKHJlc3VsdCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKwkJCQkJRmlsZSBmID0gcHJvamVjdEZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworCQkJCQl0cnkgeworCQkJCQkJcHJvamVjdC53cml0ZShmKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisJCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLAorCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3Jfc2F2aW5nX3Byb2plY3QiKSwKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9hZGRfcHJvamVjdF9idW5kbGUiKSkpIHsKKwkJCQlpbnQgcmVzdWx0ID0gb3BlbkZpbGVDaG9vc2VyLnNob3dPcGVuRGlhbG9nKHRoaXMpOyAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBQcm9qZWN0IE1lbnUgLT4gQWRkIEJ1bmRsZQorCQkJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQkJCUZpbGUgZiA9IG9wZW5GaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXByb2plY3QuYWRkQnVuZGxlKGYuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisJCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLAorCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfYWRkaW5nX3Byb2plY3RfYnVuZGxlIiksCisJCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfcmVtb3ZlX3Byb2plY3RfYnVuZGxlIikpKSB7CisJCQkJU3RyaW5nIGJ1bmRsZU5hbWUgPSAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpOyAgICAgICAgICAgLy8gUG9wdXAgUHJvamVjdCBNZW51IC0+IFJlbW92ZSBCdW5kbGUKKwkJCQlwcm9qZWN0LnJlbW92ZUJ1bmRsZShidW5kbGVOYW1lKTsKKwkJCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9zZWxlY3RfcHJvamVjdF9idW5kbGUiKSkpIHsKKwkJCQlTdHJpbmcgYnVuZGxlTmFtZSA9ICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCk7ICAgICAgICAgICAvLyBQb3B1cCBQcm9qZWN0IE1lbnUgLT4gU2VsZWN0IEJ1bmRsZQorCQkJCVJCTWFuYWdlciBidW5kbGUgPSBwcm9qZWN0LmdldEJ1bmRsZShidW5kbGVOYW1lKTsKKwkJCQlyYm0gPSBidW5kbGU7CisJCQkJdXBkYXRlRGlzcGxheVRyZWUoKTsKKwkJCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfcXVpdCIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IFF1aXQKKwkJCQl0aGlzV2luZG93Q2xvc2luZyhudWxsKTsKKwkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfbmV3IikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gTmV3IFJlc291cmNlIEJ1bmRsZQorCQkJCXByb21wdEZvclNhdmUobnVsbCk7CisJCQkJU3RyaW5nIG9sZFVzZXIgPSBnZXRVc2VyKCk7CisJCQkJaWYgKHJibSAhPSBudWxsICYmIHJibS5nZXRVc2VyKCkgIT0gbnVsbCAmJiAhKHJibS5nZXRVc2VyKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidW5rbm93bl91c2VyIikpKSkKKwkJCQkJb2xkVXNlciA9IHJibS5nZXRVc2VyKCk7CisJCQkJU3RyaW5nIHJlc3BvbnNlID0gSk9wdGlvblBhbmUuc2hvd0lucHV0RGlhbG9nKHRoaXMsCisJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX25ld19iYXNlY2xhc3MiKSwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfbmV3X2J1bmRsZSIpLAorCQkJCQlKT3B0aW9uUGFuZS5RVUVTVElPTl9NRVNTQUdFKTsKKwkJCQlpZiAocmVzcG9uc2UgIT0gbnVsbCkgeworCQkJCQkvLyBUZXN0IHRoZSByZXNwb25zZSBmb3Igd2hpdGUgc3BhY2UKKwkJCQkJaWYgKHJlc3BvbnNlLmluZGV4T2YoIiAiKSA+IDAgfHwgcmVzcG9uc2UuaW5kZXhPZigiXHQiKSA+IDAgfHwgcmVzcG9uc2UuaW5kZXhPZigiXG4iKSA+IDApIHsKKwkJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsCisJCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9iYXNlY2xhc3Nfd2hpdGVzcGFjZSIpICsgIlxuIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfYnVuZGxlX25vdF9jcmVhdGVkIiksCisJCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZXJyb3JfY3JlYXRpbmdfYnVuZGxlIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcmJtID0gbmV3IFJCTWFuYWdlcihyZXNwb25zZSk7CisJCQkJCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQkJCQkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCQkJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkvLyBVcGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24KKwkJCQlpZiAob2xkVXNlci5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKSkpIHsKKwkJCQkJU3RyaW5nIHVzZXIgPSBKT3B0aW9uUGFuZS5zaG93SW5wdXREaWFsb2codGhpcywKKwkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3VzZXJfbmFtZSIpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV91c2VyX25hbWUiKSwKKwkJCQkJCUpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UpOworCQkJCQlpZiAodXNlciAhPSBudWxsICYmICEodXNlci5lcXVhbHMoIiIpKSkgc2V0VXNlcih1c2VyKTsKKwkJCQl9IGVsc2UgcmJtLnNldFVzZXIob2xkVXNlcik7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfb3BlbiIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IE9wZW4gUmVzb3VyY2UgQnVuZGxlCisJCQkJcHJvbXB0Rm9yU2F2ZShudWxsKTsKKwkJCQlTdHJpbmcgb2xkVXNlciA9IGdldFVzZXIoKTsKKwkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldFVzZXIoKSAhPSBudWxsICYmICEocmJtLmdldFVzZXIoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKSkpKQorCQkJCQlvbGRVc2VyID0gcmJtLmdldFVzZXIoKTsKKwkJCQlvcGVuRmlsZUNob29zZXIuc2V0U2VsZWN0ZWRGaWxlKG5ldyBGaWxlKCJSZXNvdXJjZXMiICsgRmlsZS5zZXBhcmF0b3IgKyAiUkJNYW5hZ2VyLnByb3BlcnRpZXMiKSk7CisJCQkJaW50IHN0YXR1cyA9IG9wZW5GaWxlQ2hvb3Nlci5zaG93T3BlbkRpYWxvZyh0aGlzKTsKKwkJCQlpZiAoc3RhdHVzID09IEpGaWxlQ2hvb3Nlci5DQU5DRUxfT1BUSU9OKSB7CisJCQkJCS8vIEZpbGUgb3BlbmluZyBjYW5jZWxlZAorCQkJCX0gZWxzZSBpZiAoc3RhdHVzID09IEpGaWxlQ2hvb3Nlci5FUlJPUl9PUFRJT04pIHsKKwkJCQkJLy8gRXJyb3IgaW4gZmlsZSBvcGVuCisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gQSBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkCisJCQkJCXRyeSB7CisJCQkJCQlyYm0gPSBuZXcgUkJNYW5hZ2VyKG9wZW5GaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKSk7CisJCQkJCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQkJCQkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCQkvLyBTaG91bGQgcHJvdmlkZSBzb21lIGFsZXJ0IGhlcmUKKwkJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IG9wZW4gdGhlIGZpbGUgIiArIG9wZW5GaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArCisJCQkJCQkJCQkJICAgIjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJcmJtID0gbnVsbDsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAocmJtID09IG51bGwpIHJldHVybjsKKwkJCQkvLyBVcGRhdGUgdGhlIHVzZXIgaW5mb3JtYXRpb24KKwkJCQlpZiAob2xkVXNlci5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKSkpIHsKKwkJCQkJU3RyaW5nIHVzZXIgPSBKT3B0aW9uUGFuZS5zaG93SW5wdXREaWFsb2codGhpcywKKwkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3VzZXJfbmFtZSIpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV91c2VyX25hbWUiKSwKKwkJCQkJCUpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UpOworCQkJCQlpZiAodXNlciAhPSBudWxsICYmICEodXNlci5lcXVhbHMoIiIpKSkKKwkJCQkJCXNldFVzZXIodXNlcik7CisJCQkJfSBlbHNlCisJCQkJCXJibS5zZXRVc2VyKG9sZFVzZXIpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmUiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBTYXZlIFJlc291cmNlIEJ1bmRsZQorCQkJCXNhdmVSZXNvdXJjZXMoKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlYXMiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBTYXZlIFJlc291cmNlIEJ1bmRsZSBBcworCQkJCXNhdmVSZXNvdXJjZXNBcygpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gSW1wb3J0IC0+IFByb3BlcnRpZXMKKwkJCQlpZiAocmJtID09IG51bGwgfHwgcmJtLmdldEJ1bmRsZXMoKSA9PSBudWxsKSByZXR1cm47CisJCQkJUkJQcm9wZXJ0aWVzSW1wb3J0ZXIgaW1wb3J0ZXIgPSBuZXcgUkJQcm9wZXJ0aWVzSW1wb3J0ZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcHJvcGVydGllc190aXRsZSIpLCByYm0sIHRoaXMpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9qYXZhIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gSW1wb3J0IC0+IEphdmEKKwkJCQlpZiAocmJtID09IG51bGwgfHwgcmJtLmdldEJ1bmRsZXMoKSA9PSBudWxsKSByZXR1cm47CisJCQkJUkJKYXZhSW1wb3J0ZXIgaW1wb3J0ZXIgPSBuZXcgUkJKYXZhSW1wb3J0ZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfamF2YV90aXRsZSIpLCByYm0sIHRoaXMpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9UTVgiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBJbXBvcnQgLT4gVE1YCisJCQkJaWYgKHJibSA9PSBudWxsIHx8IHJibS5nZXRCdW5kbGVzKCkgPT0gbnVsbCkKKwkJCQkJcmV0dXJuOworCQkJCVJCVE1YSW1wb3J0ZXIgaW1wb3J0ZXIgPSBuZXcgUkJUTVhJbXBvcnRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9UTVhfdGl0bGUiKSwgcmJtLCB0aGlzKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfWExGIikpKSB7CisJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IEltcG9ydCAtPiBYTElGRgorCQkJCWlmIChyYm0gPT0gbnVsbCB8fCByYm0uZ2V0QnVuZGxlcygpID09IG51bGwpCisJCQkJICAgIHJldHVybjsKKwkJCQlSQnhsaWZmSW1wb3J0ZXIgaW1wb3J0ZXIgPSBuZXcgUkJ4bGlmZkltcG9ydGVyKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X1hMRl90aXRsZSIpLCByYm0sIHRoaXMpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gRXhwb3J0IC0+IFByb3BlcnRpZXMKKwkJCQlSQlByb3BlcnRpZXNFeHBvcnRlciBleHAgPSBuZXcgUkJQcm9wZXJ0aWVzRXhwb3J0ZXIoKTsKKwkJCQl0cnkgeworCQkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldEJ1bmRsZXMoKSAhPSBudWxsKQorCQkJCQkJZXhwLmV4cG9ydChyYm0pOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2V4cG9ydCIpLAorCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfamF2YSIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IEV4cG9ydCAtPiBKYXZhCisJCQkJUkJKYXZhRXhwb3J0ZXIgZXhwID0gbmV3IFJCSmF2YUV4cG9ydGVyKCk7CisJCQkJdHJ5IHsKKwkJCQkJaWYgKHJibSAhPSBudWxsICYmIHJibS5nZXRCdW5kbGVzKCkgIT0gbnVsbCkgZXhwLmV4cG9ydChyYm0pOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2V4cG9ydCIpLAorCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfSUNVIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gRXhwb3J0IC0+IEphdmEKKwkJCQlSQklDVUV4cG9ydGVyIGV4cCA9IG5ldyBSQklDVUV4cG9ydGVyKCk7CisJCQkJdHJ5IHsKKwkJCQkJaWYgKHJibSAhPSBudWxsICYmIHJibS5nZXRCdW5kbGVzKCkgIT0gbnVsbCkgZXhwLmV4cG9ydChyYm0pOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2V4cG9ydCIpLAorCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfVE1YIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gRXhwb3J0IC0+IFRNWAorCQkJCVJCVE1YRXhwb3J0ZXIgZXhwID0gbmV3IFJCVE1YRXhwb3J0ZXIoKTsKKwkJCQl0cnkgeworCQkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldEJ1bmRsZXMoKSAhPSBudWxsKSBleHAuZXhwb3J0KHJibSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZXhwb3J0IiksCisJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9YTEYiKSkpIHsKKwkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gRXhwb3J0IC0+IFhMSUZGCisJCQkJUkJ4bGlmZkV4cG9ydGVyIGV4cCA9IG5ldyBSQnhsaWZmRXhwb3J0ZXIoKTsKKwkJCQl0cnkgeworCQkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldEJ1bmRsZXMoKSAhPSBudWxsKQorCQkJCQkgICAgZXhwLmV4cG9ydChyYm0pOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2V4cG9ydCIpLAorCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRmaWxlIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IE9wdGlvbnMgLT4gQWRkIE5ldyBSZXNvdXJjZQorCQkJCWNyZWF0ZVJlc291cmNlRmlsZSgpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGdyb3VwIikpIHx8CisJCQkJCSAgIGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlX2dyb3VwIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IE9wdGlvbnMgLT4gQWRkIE5ldyBHcm91cAorCQkJCWNyZWF0ZUJ1bmRsZUdyb3VwKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZW50cnkiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gT3B0aW9ucyAtPiBBZGQgTmV3IEVudHJ5CisJCQkJY3JlYXRlQnVuZGxlSXRlbSgpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3ByZWZlcmVuY2VzIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IE9wdGlvbnMgLT4gUHJlZmVyZW5jZXMKKwkJCQlQcmVmZXJlbmNlc0RpYWxvZyBwZCA9IG5ldyBQcmVmZXJlbmNlc0RpYWxvZyh0aGlzKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscF9hYm91dCIpKSkgeyAKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gSGVscCAtPiBBYm91dCBSQk1hbmFnZXIKKwkJCQlBYm91dERpYWxvZy5zaG93RGlhbG9nKHRoaXMpOworCQkJfSBlbHNlIFJCTWFuYWdlckdVSS5kZWJ1Z01zZygiTWlzc2VkIEFjdGlvbiBDb21tYW5kOiAiICsgZXYuZ2V0QWN0aW9uQ29tbWFuZCgpKTsKKwkJCQorCQl9CisJCQorCX0KKwkKKwkvKioKKwkgKiBIYW5kbGVzIGV2ZW50cyBnZW5lcmF0ZWQKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBtb3VzZVBvcHVwKE1vdXNlRXZlbnQgZXYpIHsKKwkJaWYgKGV2LmdldFNvdXJjZSgpID09IGpUcmVlRGlzcGxheSkgeworCQkJaW50IHNlbFJvdyA9IGpUcmVlRGlzcGxheS5nZXRSb3dGb3JMb2NhdGlvbihldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQlUcmVlUGF0aCBzZWxQYXRoID0galRyZWVEaXNwbGF5LmdldFBhdGhGb3JMb2NhdGlvbihldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQlpZiAoc2VsUm93ICE9IC0xKSB7CisJCQkgICAgaWYgKGV2LmdldENsaWNrQ291bnQoKSA9PSAxKSB7CisJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKXNlbFBhdGguZ2V0TGFzdFBhdGhDb21wb25lbnQoKTsKKwkJCQkJT2JqZWN0IG9iaiA9IG5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQlpZiAob2JqID09IG51bGwgfHwgIShvYmogaW5zdGFuY2VvZiBCdW5kbGUpKSByZXR1cm47CisJCQkJCUJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKW9iajsKKwkJCQkJU3RyaW5nIGVuY29kaW5nID0gYnVuZGxlLmVuY29kaW5nOworCQkJCQlpZiAoZW5jb2RpbmcgPT0gbnVsbCkgZW5jb2RpbmcgPSBuZXcgU3RyaW5nKCk7CisJCQkJCQkJCisJCQkJCS8vIENyZWF0ZSB0aGUgbWVudSB0byBkaXNwbGF5CisJCQkJCUpQb3B1cE1lbnUgcG9wdXBNZW51ID0gbmV3IEpQb3B1cE1lbnUoKTsKKwkJCQkJSk1lbnVJdGVtIHNhdmVJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9zYXZlIikpOworCQkJCQlKTWVudUl0ZW0gaGlkZUl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX2hpZGUiKSk7CisJCQkJCUpNZW51SXRlbSBkZWxldGVJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9kZWxldGUiKSk7CisJCQkJCQkJCisJCQkJCXNhdmVJdGVtLnNldE5hbWUoZW5jb2RpbmcpOyBzYXZlSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJaGlkZUl0ZW0uc2V0TmFtZShlbmNvZGluZyk7IGhpZGVJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlkZWxldGVJdGVtLnNldE5hbWUoZW5jb2RpbmcpOyBkZWxldGVJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQkJCQorCQkJCQlwb3B1cE1lbnUuYWRkKHNhdmVJdGVtKTsKKwkJCQkJaWYgKG5vZGUuZ2V0TGV2ZWwoKSAhPSAxKSB7CisJCQkJCQlwb3B1cE1lbnUuYWRkKGhpZGVJdGVtKTsKKwkJCQkJCXBvcHVwTWVudS5hZGQoZGVsZXRlSXRlbSk7CisJCQkJCX0KKwkJCQkJCQkKKwkJCQkJcG9wdXBNZW51LnNob3coZXYuZ2V0Q29tcG9uZW50KCksIGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCSAgICB9CisJCQl9CisJCX0gZWxzZSBpZiAoZXYuZ2V0U291cmNlKCkgPT0gcHJvamVjdFRyZWUpIHsKKwkJCWludCBzZWxSb3cgPSBwcm9qZWN0VHJlZS5nZXRSb3dGb3JMb2NhdGlvbihldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQlUcmVlUGF0aCBzZWxQYXRoID0gcHJvamVjdFRyZWUuZ2V0UGF0aEZvckxvY2F0aW9uKGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCWlmIChzZWxSb3cgIT0gLTEgJiYgZXYuZ2V0Q2xpY2tDb3VudCgpID09IDEpIHsKKwkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSlzZWxQYXRoLmdldExhc3RQYXRoQ29tcG9uZW50KCk7CisJCQkJT2JqZWN0IG9iaiA9IG5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCWlmIChvYmogPT0gbnVsbCkgcmV0dXJuOworCQkJCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJCQlKUG9wdXBNZW51IHBvcHVwTWVudSA9IG5ldyBKUG9wdXBNZW51KCk7CisJCQkJCUpNZW51SXRlbSBuZXdJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9uZXdfcHJvamVjdCIpKTsKKwkJCQkJSk1lbnVJdGVtIG9wZW5JdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9vcGVuX3Byb2plY3QiKSk7CisJCQkJCUpNZW51SXRlbSBzYXZlSXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfc2F2ZV9wcm9qZWN0IikpOworCQkJCQluZXdJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlvcGVuSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJc2F2ZUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCXBvcHVwTWVudS5hZGQobmV3SXRlbSk7CisJCQkJCXBvcHVwTWVudS5hZGQob3Blbkl0ZW0pOworCQkJCQlwb3B1cE1lbnUuYWRkKHNhdmVJdGVtKTsKKwkJCQkJcG9wdXBNZW51LnNob3coZXYuZ2V0Q29tcG9uZW50KCksIGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJCUHJvamVjdCkgeworCQkJCQlKUG9wdXBNZW51IHBvcHVwTWVudSA9IG5ldyBKUG9wdXBNZW51KCk7CisJCQkJCUpNZW51SXRlbSBuZXdJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9uZXdfcHJvamVjdCIpKTsKKwkJCQkJSk1lbnVJdGVtIG9wZW5JdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9vcGVuX3Byb2plY3QiKSk7CisJCQkJCUpNZW51SXRlbSBzYXZlSXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfc2F2ZV9wcm9qZWN0IikpOworCQkJCQlKTWVudUl0ZW0gYWRkSXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfYWRkX3Byb2plY3RfYnVuZGxlIikpOworCQkJCQluZXdJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlvcGVuSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJc2F2ZUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCWFkZEl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCXBvcHVwTWVudS5hZGQobmV3SXRlbSk7CisJCQkJCXBvcHVwTWVudS5hZGQob3Blbkl0ZW0pOworCQkJCQlwb3B1cE1lbnUuYWRkKHNhdmVJdGVtKTsKKwkJCQkJcG9wdXBNZW51LmFkZChhZGRJdGVtKTsKKwkJCQkJcG9wdXBNZW51LnNob3coZXYuZ2V0Q29tcG9uZW50KCksIGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJCTWFuYWdlcikgeworCQkJCQlSQk1hbmFnZXIgcmJtID0gKFJCTWFuYWdlcilvYmo7CisJCQkJCUpQb3B1cE1lbnUgcG9wdXBNZW51ID0gbmV3IEpQb3B1cE1lbnUoKTsKKwkJCQkJSk1lbnVJdGVtIHNlbGVjdEl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3NlbGVjdF9wcm9qZWN0X2J1bmRsZSIpKTsKKwkJCQkJSk1lbnVJdGVtIHJlbW92ZUl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3JlbW92ZV9wcm9qZWN0X2J1bmRsZSIpKTsKKwkJCQkJc2VsZWN0SXRlbS5zZXROYW1lKHJibS5nZXRCYXNlQ2xhc3MoKSk7CisJCQkJCXJlbW92ZUl0ZW0uc2V0TmFtZShyYm0uZ2V0QmFzZUNsYXNzKCkpOworCQkJCQlzZWxlY3RJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlyZW1vdmVJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlwb3B1cE1lbnUuYWRkKHNlbGVjdEl0ZW0pOworCQkJCQlwb3B1cE1lbnUuYWRkKHJlbW92ZUl0ZW0pOworCQkJCQlwb3B1cE1lbnUuc2hvdyhldi5nZXRDb21wb25lbnQoKSwgZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBtb3VzZVByZXNzZWQoTW91c2VFdmVudCBldikgIHsKKwkJaWYgKGV2LmlzUG9wdXBUcmlnZ2VyKCkpIHsKKwkJCW1vdXNlUG9wdXAoZXYpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIG1vdXNlUmVsZWFzZWQoTW91c2VFdmVudCBldikgeworCQlpZiAoZXYuaXNQb3B1cFRyaWdnZXIoKSkgeworCQkJbW91c2VQb3B1cChldik7CisJCQlyZXR1cm47CisJCX0KKwkJLy8gTm90IHRoZSBwb3B1cCB0cmlnZ2VyCisJfQorCQorCXB1YmxpYyB2b2lkIG1vdXNlRW50ZXJlZChNb3VzZUV2ZW50IGV2KSAgeyB9CisJCisJcHVibGljIHZvaWQgbW91c2VFeGl0ZWQoTW91c2VFdmVudCBldikgICB7IH0KKwkKKwlwdWJsaWMgdm9pZCBtb3VzZUNsaWNrZWQoTW91c2VFdmVudCBldikgeworCQlpZiAoZXYuZ2V0Q2xpY2tDb3VudCgpID09IDIgJiYgZXYuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBKVGFibGUpIHsKKwkJCS8vIFdlIGFyZSBnb2luZyB0byBkaXNwbGF5IHRoZSBlZGl0IGZyYW1lIGZvciB0aGUgaXRlbSBzZWxlY3RlZAorCQkJQnVuZGxlSXRlbSBpdGVtID0gbnVsbDsKKwkJCUpUYWJsZSB0YWJsZSA9IChKVGFibGUpIGV2LmdldFNvdXJjZSgpOworCQkJaWYgKHRhYmxlLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCQlpbnQgcm93ID0gdGFibGUuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCQlVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwgbW9kZWwgPSAoVW50cmFuc2xhdGVkSXRlbXNUYWJsZU1vZGVsKXRhYmxlLmdldE1vZGVsKCk7CisJCQkJaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCQlCdW5kbGVJdGVtRGlhbG9nIGJpRGlhbG9nID0gbmV3IEJ1bmRsZUl0ZW1EaWFsb2cocmJtLCBpdGVtLCAocmJtID09IG51bGwgPyAiIiA6IHJibS5nZXRVc2VyKCkpLAorCQkJCQkJCQkJCQkJCQkJIHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2VkaXRfaXRlbSIpLCB0cnVlKTsKKwkJCQltb2RlbC51cGRhdGUoKTsKKwkJCX0gZWxzZSBpZiAodGFibGUuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFNlYXJjaEl0ZW1zVGFibGVNb2RlbCkgeworCQkJCWludCByb3cgPSB0YWJsZS5nZXRTZWxlY3RlZFJvdygpOworCQkJCVNlYXJjaEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChTZWFyY2hJdGVtc1RhYmxlTW9kZWwpdGFibGUuZ2V0TW9kZWwoKTsKKwkJCQlpdGVtID0gbW9kZWwuZ2V0QnVuZGxlSXRlbShyb3cpOworCQkJCUJ1bmRsZUl0ZW1EaWFsb2cgYmlEaWFsb2cgPSBuZXcgQnVuZGxlSXRlbURpYWxvZyhyYm0sIGl0ZW0sIChyYm0gPT0gbnVsbCA/ICIiIDogcmJtLmdldFVzZXIoKSksCisJCQkJCQkJCQkJCQkJCQkgdGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZWRpdF9pdGVtIiksIHRydWUpOworCQkJCW1vZGVsLnVwZGF0ZSgpOworCQkJfSBlbHNlIGlmICh0YWJsZS5nZXRNb2RlbCgpIGluc3RhbmNlb2YgR3JvdXBJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCQlpbnQgcm93ID0gdGFibGUuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCQlHcm91cEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChHcm91cEl0ZW1zVGFibGVNb2RlbCl0YWJsZS5nZXRNb2RlbCgpOworCQkJCWl0ZW0gPSBtb2RlbC5nZXRCdW5kbGVJdGVtKHJvdyk7CisJCQkJQnVuZGxlSXRlbURpYWxvZyBiaURpYWxvZyA9IG5ldyBCdW5kbGVJdGVtRGlhbG9nKHJibSwgaXRlbSwgKHJibSA9PSBudWxsID8gIiIgOiByYm0uZ2V0VXNlcigpKSwKKwkJCQkJCQkJCQkJCQkJCSB0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lZGl0X2l0ZW0iKSwgdHJ1ZSk7CisJCQkJbW9kZWwudXBkYXRlKCk7CisJCQl9CisJCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCX0KKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvamVjdFBhbmVscygpIHsKKwkJcHJvamVjdFBhbmVsLnVwZGF0ZUNvbXBvbmVudHMoKTsKKwl9CisJCisJLy8gVXBkYXRlIHRoZSBkaXNwbGF5IG9mIHRoZSBtYWluIHBhbmVscyAoc3RhdHMsIHVudHJhbnMsIGdyb3VwcykuIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYSBuZXcgdHJlZSBzZWxlY3Rpb24KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVEaXNwbGF5UGFuZWxzKCkgeworCQlkZWJ1Z01zZygiVXBkYXRpbmcgRGlzcGxheSBQYW5lbHMiKTsKKwkJCisJCUJ1bmRsZSBidW5kbGUgPSBudWxsOworCQlpZiAoYWN0aXZlTm9kZSA9PSBudWxsKSByZXR1cm47CisJCU9iamVjdCBvID0gYWN0aXZlTm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCWlmIChvID09IG51bGwpCisJCQlyZXR1cm47CisJCWlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkvLyBBIG5vZGUgdGhhdCBpcyBub3QgYSByb290IHdhcyBzZWxlY3RlZC4uLi4gSSBuZWVkIHRvIGRvIHNvbWV0aGluZyBoZXJlCisJCQlTdHJpbmcgc3RyID0gKFN0cmluZylvOworCQkJaWYgKHJibSA9PSBudWxsKSByZXR1cm47CisJCQlpZiAoc3RyLmVxdWFscyhyYm0uZ2V0QmFzZUNsYXNzKCkpKSB7CisJCQkJLy8gVGhlIGJhc2UgY2xhc3Mgbm9kZSB3YXMgc2VsZWN0ZWQKKwkJCQlqUGFuZWxTdGF0cy5zZXRNYW5hZ2VyKHJibSk7CisJCQkJalBhbmVsVW50cmFucy5zZXRNYW5hZ2VyKHJibSk7CisJCQkJalBhbmVsR3JvdXBzLnNldE1hbmFnZXIocmJtKTsKKwkJCQlqUGFuZWxTZWFyY2guc2V0TWFuYWdlcihyYm0pOworCQkJfSBlbHNlIHsKKwkJCQlqUGFuZWxTdGF0cy5yZW1vdmVFbGVtZW50cygpOworCQkJCWpQYW5lbFVudHJhbnMucmVtb3ZlRWxlbWVudHMoKTsKKwkJCQlqUGFuZWxHcm91cHMucmVtb3ZlRWxlbWVudHMoKTsKKwkJCQlqUGFuZWxTZWFyY2gucmVtb3ZlRWxlbWVudHMoKTsKKwkJCX0KKwkJCS8vcmV0dXJuOworCQl9CisJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBCdW5kbGUpIHsKKwkJCWJ1bmRsZSA9IChCdW5kbGUpIGFjdGl2ZU5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJalBhbmVsU3RhdHMuc2V0QnVuZGxlKGJ1bmRsZSk7CisJCQlqUGFuZWxVbnRyYW5zLnNldEJ1bmRsZShidW5kbGUpOworCQkJalBhbmVsR3JvdXBzLnNldEJ1bmRsZShidW5kbGUpOworCQkJalBhbmVsU2VhcmNoLnNldEJ1bmRsZShidW5kbGUpOworCQl9CisJCWVsc2UKKwkJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZyhvLnRvU3RyaW5nKCkpOworCQkKKwkJalBhbmVsU3RhdHMudXBkYXRlQ29tcG9uZW50cygpOworCQlqUGFuZWxVbnRyYW5zLnVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJalBhbmVsR3JvdXBzLnVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJalBhbmVsU2VhcmNoLnVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJCisJCXZhbGlkYXRlVHJlZSgpOworCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGVQcm9qZWN0VHJlZSgpIHsKKwkJZGVidWdNc2coIlVwZGF0aW5nIFByb2plY3QgVHJlZXMiKTsKKwkJCisJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcm9vdCA9IG51bGw7CisJCQorCQlpZiAocHJvamVjdCAhPSBudWxsKSB7CisJCQlyb290ID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUocHJvamVjdCk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBwcm9qZWN0LmdldFNpemUoKTsgaSsrKSB7CisJCQkJUkJNYW5hZ2VyIHJibSA9IHByb2plY3QuZ2V0QnVuZGxlKGkpOworCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgYnVuZGxlTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKHJibSk7CisJCQkJcm9vdC5hZGQoYnVuZGxlTm9kZSk7CisJCQkJQnVuZGxlIG1haW5CdW5kbGUgPSAoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZmlyc3RFbGVtZW50KCk7CisJCQkJVmVjdG9yIGdyb3VwcyA9IG1haW5CdW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKwkJCQlmb3IgKGludCBqPTA7IGogPCBncm91cHMuc2l6ZSgpOyBqKyspIHsKKwkJCQkJQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBzLmVsZW1lbnRBdChqKTsKKwkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBncm91cE5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShncm91cCk7CisJCQkJCWJ1bmRsZU5vZGUuYWRkKGdyb3VwTm9kZSk7CisJCQkJCVZlY3RvciBpdGVtcyA9IGdyb3VwLmdldEl0ZW1zQXNWZWN0b3IoKTsKKwkJCQkJZm9yIChpbnQgaz0wOyBrIDwgaXRlbXMuc2l6ZSgpOyBrKyspIHsKKwkJCQkJCUJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLmVsZW1lbnRBdChrKTsKKwkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgaXRlbU5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShpdGVtKTsKKwkJCQkJCWdyb3VwTm9kZS5hZGQoaXRlbU5vZGUpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQkvLyBUaGVyZSBpcyBhIHJlc291cmNlIGJ1bmRsZSBvcGVuLCBidXQgbm8gcHJvamVjdAorCQkJcm9vdCA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibm9fcHJvamVjdCIpKTsKKwkJCUJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmZpcnN0RWxlbWVudCgpOworCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBidW5kbGVOb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUocmJtKTsvLyhyYm0uZ2V0QmFzZUNsYXNzKCkpOworCQkJcm9vdC5hZGQoYnVuZGxlTm9kZSk7CisJCQlWZWN0b3IgZ3JvdXBzID0gbWFpbkJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgZ3JvdXBzLnNpemUoKTsgaSsrKSB7CisJCQkJQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBzLmVsZW1lbnRBdChpKTsKKwkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGdyb3VwTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGdyb3VwKTsKKwkJCQlidW5kbGVOb2RlLmFkZChncm91cE5vZGUpOworCQkJCVZlY3RvciBpdGVtcyA9IGdyb3VwLmdldEl0ZW1zQXNWZWN0b3IoKTsKKwkJCQlmb3IgKGludCBqPTA7IGogPCBpdGVtcy5zaXplKCk7IGorKykgeworCQkJCQlCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5lbGVtZW50QXQoaik7CisJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgaXRlbU5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShpdGVtKTsKKwkJCQkJZ3JvdXBOb2RlLmFkZChpdGVtTm9kZSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJcm9vdCA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibm9fcHJvamVjdF9idW5kbGUiKSk7CisJCX0KKwkJCisJCS8vIENyZWF0ZSB0aGUgdHJlZSBmcm9tIHRoZSByb290cworCQlwcm9qZWN0VHJlZSA9IG5ldyBKVHJlZShyb290KTsKKwkJcHJvamVjdFRyZWUuYWRkTW91c2VMaXN0ZW5lcih0aGlzKTsKKwkJcHJvamVjdFRyZWUuYWRkVHJlZVNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQlwcm9qZWN0VHJlZS5zZXRDZWxsUmVuZGVyZXIoUkJUcmVlQ2VsbFJlbmRlcmVyLmdldEluc3RhbmNlKCkpOworCQlwcm9qZWN0U2Nyb2xsUGFuZS5nZXRWaWV3cG9ydCgpLnJlbW92ZUFsbCgpOworCQlwcm9qZWN0U2Nyb2xsUGFuZS5nZXRWaWV3cG9ydCgpLmFkZChwcm9qZWN0VHJlZSk7CisJCXJlcGFpbnQoKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCXJldHVybjsKKwl9CisJCisJLy8gVXBkYXRlIHRoZSBkaXNwbGF5IG9mIHRoZSB0cmVlIGZpbGUgbWFwLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHRyZWUgaXMgY2hhbmdlZC91cGRhdGVkCisJcHVibGljIHZvaWQgdXBkYXRlRGlzcGxheVRyZWUoKSB7CisJCWRlYnVnTXNnKCJVcGRhdGluZyBEaXNwbGF5IFRyZWVzIik7CisJCQorCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHJvb3QgPSBudWxsOworCQkKKwkJaWYgKHJibSA9PSBudWxsIHx8IHJibS5nZXRCdW5kbGVzKCkgPT0gbnVsbCkgeworCQkJcm9vdCA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibm9fcmVzb3VyY2VfYnVuZGxlIikpOworCQl9IGVsc2UgeworCQkJLy8gRnJvbSBoZXJlIG9uIG91dCwgdGhlcmUgaXMgYSBkZWZpbmVkIHJlc291cmNlIGJ1bmRsZSBtYW5hZ2VyCisJCQlCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5maXJzdEVsZW1lbnQoKTsKKwkJCXJvb3QgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShyYm0uZ2V0QmFzZUNsYXNzKCkpOworCQkJLy8gQWRkIHRoZSBiYXNlIGNsYXNzCisJCQlyb290LmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShtYWluQnVuZGxlKSk7CisJCQkKKwkJCS8vRGVmYXVsdE11dGFibGVUcmVlTm9kZSBjdXJyTm9kZSA9IHJvb3Q7CisJCQlmb3IgKGludCBpID0gMTsgaSA8IHJibS5nZXRCdW5kbGVzKCkuc2l6ZSgpOyBpKyspIHsKKwkJCQlCdW5kbGUgY3VyckJ1bmRsZSA9IChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5lbGVtZW50QXQoaSk7CisJCQkJU3RyaW5nIHZhcmlhbnQgPSBjdXJyQnVuZGxlLmdldFZhcmlhbnRFbmNvZGluZygpOworCQkJCVN0cmluZyBjb3VudHJ5ID0gY3VyckJ1bmRsZS5nZXRDb3VudHJ5RW5jb2RpbmcoKTsKKwkJCQlTdHJpbmcgbGFuZ3VhZ2UgPSBjdXJyQnVuZGxlLmdldExhbmd1YWdlRW5jb2RpbmcoKTsKKwkJCQkvL0RlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbGFuZ3VhZ2VOb2RlID0gbnVsbDsKKwkJCQkvLyBMb29rIGZvciBhIG5vZGUgcmVwcmVzZW50aW5nIHRoaXMgbGFuZ3VhZ2UKKwkJCQlpZiAobGFuZ3VhZ2UgPT0gbnVsbCB8fCBsYW5ndWFnZS5lcXVhbHMoIiIpKSBjb250aW51ZTsKKwkJCQlib29sZWFuIGxhbmd1YWdlTm9kZUZvdW5kID0gZmFsc2U7CisJCQkJZm9yIChpbnQgaj0wOyBqIDwgcm9vdC5nZXRDaGlsZENvdW50KCk7IGorKykgeworCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGxhbmdOb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpcm9vdC5nZXRDaGlsZEF0KGopOworCQkJCQlPYmplY3QgbyA9IGxhbmdOb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJaWYgKG8gPT0gbnVsbCB8fCAhKG8gaW5zdGFuY2VvZiBTdHJpbmcpKSBjb250aW51ZTsKKwkJCQkJU3RyaW5nIHN0ciA9IChTdHJpbmcpbzsKKwkJCQkJaWYgKHN0ci5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX2xhbmd1YWdlX25vZGUiLCBsYW5ndWFnZSkpKSB7CisJCQkJCQkvLyBUaGVyZSBpcyBhIG5vbi1sZWFmIG5vZGUgd2l0aCB0aGlzIGxhbmd1YWdlCisJCQkJCQlsYW5ndWFnZU5vZGVGb3VuZCA9IHRydWU7CisJCQkJCQlpZiAoY291bnRyeSA9PSBudWxsIHx8IGNvdW50cnkuZXF1YWxzKCIiKSkKKwkJCQkJCQkgbGFuZ05vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCWVsc2UgeworCQkJCQkJCS8vIFdlIG5lZWQgdG8gbG9vayBhdCBjb3VudHJ5LCB2YXJpYW50CisJCQkJCQkJYm9vbGVhbiBjb3VudHJ5Tm9kZUZvdW5kID0gZmFsc2U7CisJCQkJCQkJZm9yIChpbnQgaz0wOyBrIDwgbGFuZ05vZGUuZ2V0Q2hpbGRDb3VudCgpOyBrKyspIHsKKwkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBjb3VudHJ5Tm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKWxhbmdOb2RlLmdldENoaWxkQXQoayk7CisJCQkJCQkJCU9iamVjdCBvMiA9IGNvdW50cnlOb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJCQkJaWYgKG8yID09IG51bGwgfHwgIShvMiBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQkJCQlTdHJpbmcgc3RyMiA9IChTdHJpbmcpbzI7CisJCQkJCQkJCWlmIChzdHIyLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfY291bnRyeV9ub2RlIiwgY291bnRyeSkpKSB7CisJCQkJCQkJCQkvLyBUaGVyZSBpcyBhIG5vbi1sZWFmIG5vZGUgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCQkJY291bnRyeU5vZGVGb3VuZCA9IHRydWU7CisJCQkJCQkJCQlpZiAodmFyaWFudCA9PSBudWxsIHx8IHZhcmlhbnQuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJCWNvdW50cnlOb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJCS8vIFdlIG5lZWQgdG8gbG9vayBhdCB2YXJpYW50CisJCQkJCQkJCQkJYm9vbGVhbiB2YXJpYW50Tm9kZUZvdW5kID0gZmFsc2U7CisJCQkJCQkJCQkJZm9yIChpbnQgbD0wOyBsIDwgY291bnRyeU5vZGUuZ2V0Q2hpbGRDb3VudCgpOyBsKyspIHsKKwkJCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKWNvdW50cnlOb2RlLmdldENoaWxkQXQobCk7CisJCQkJCQkJCQkJCU9iamVjdCBvMyA9IHZhcmlhbnROb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJCQkJCQkJaWYgKG8zID09IG51bGwgfHwgIShvMyBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQkJCQkJCQlTdHJpbmcgc3RyMyA9IChTdHJpbmcpbzM7CisJCQkJCQkJCQkJCWlmIChzdHIzLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfdmFyaWFudF9ub2RlIikpKSB7CisJCQkJCQkJCQkJCQl2YXJpYW50Tm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQkJCX0gCisJCQkJCQkJCQkJfSAvLyBlbmQgZm9yIC0gY291bnRyeSBub2RlIGxvb3AKKwkJCQkJCQkJCQlpZiAoIXZhcmlhbnROb2RlRm91bmQpIHsKKwkJCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSk7CisJCQkJCQkJCQkJCWNvdW50cnlOb2RlLmFkZCh2YXJpYW50Tm9kZSk7CisJCQkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfSAvLyBlbmQgZm9yIC0gbGFuZ3VhZ2Ugbm9kZSBsb29wCisJCQkJCQkJaWYgKCFjb3VudHJ5Tm9kZUZvdW5kKSB7CisJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgY291bnRyeU5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfY291bnRyeV9ub2RlIiwgY291bnRyeSkpOworCQkJCQkJCQlsYW5nTm9kZS5hZGQoY291bnRyeU5vZGUpOworCQkJCQkJCQlpZiAodmFyaWFudCA9PSBudWxsIHx8IHZhcmlhbnQuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCS8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgdmFyaWFudAkKKwkJCQkJCQkJCWJvb2xlYW4gdmFyaWFudE5vZGVGb3VuZCA9IGZhbHNlOworCQkJCQkJCQkJZm9yIChpbnQgbD0wOyBsIDwgY291bnRyeU5vZGUuZ2V0Q2hpbGRDb3VudCgpOyBsKyspIHsKKwkJCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHZhcmlhbnROb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpY291bnRyeU5vZGUuZ2V0Q2hpbGRBdChsKTsKKwkJCQkJCQkJCQlPYmplY3QgbzMgPSB2YXJpYW50Tm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQkJCQkJCQkJaWYgKG8zID09IG51bGwgfHwgIShvMyBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQkJCQkJCVN0cmluZyBzdHIzID0gKFN0cmluZylvMzsKKwkJCQkJCQkJCQlpZiAoc3RyMy5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX3ZhcmlhbnRfbm9kZSIpKSkgeworCQkJCQkJCQkJCQl2YXJpYW50Tm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCQkJCQkJdmFyaWFudE5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJCQl9IAorCQkJCQkJCQkJfSAvLyBlbmQgZm9yIC0gY291bnRyeSBub2RlIGxvb3AKKwkJCQkJCQkJCWlmICghdmFyaWFudE5vZGVGb3VuZCkgeworCQkJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgdmFyaWFudE5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfdmFyaWFudF9ub2RlIikpOworCQkJCQkJCQkJCWNvdW50cnlOb2RlLmFkZCh2YXJpYW50Tm9kZSk7CisJCQkJCQkJCQkJdmFyaWFudE5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWxhbmd1YWdlTm9kZUZvdW5kKSB7CisJCQkJCS8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbm9kZSBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbGFuZ05vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfbGFuZ3VhZ2Vfbm9kZSIsIGxhbmd1YWdlKSk7CisJCQkJCXJvb3QuYWRkKGxhbmdOb2RlKTsKKwkJCQkJaWYgKGNvdW50cnkgPT0gbnVsbCB8fCBjb3VudHJ5LmVxdWFscygiIikpIHsKKwkJCQkJCWxhbmdOb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvdW50cnksIHZhcmlhbnQKKwkJCQkJCWJvb2xlYW4gY291bnRyeU5vZGVGb3VuZCA9IGZhbHNlOworCQkJCQkJZm9yIChpbnQgaz0wOyBrIDwgbGFuZ05vZGUuZ2V0Q2hpbGRDb3VudCgpOyBrKyspIHsKKwkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGNvdW50cnlOb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpbGFuZ05vZGUuZ2V0Q2hpbGRBdChrKTsKKwkJCQkJCQlPYmplY3QgbzIgPSBjb3VudHJ5Tm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQkJCQkJaWYgKG8yID09IG51bGwgfHwgIShvMiBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQkJCVN0cmluZyBzdHIyID0gKFN0cmluZylvMjsKKwkJCQkJCQlpZiAoc3RyMi5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX2NvdW50cnlfbm9kZSIsIGNvdW50cnkpKSkgeworCQkJCQkJCQkvLyBUaGVyZSBpcyBhIG5vbi1sZWFmIG5vZGUgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCQljb3VudHJ5Tm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCQkJaWYgKHZhcmlhbnQgPT0gbnVsbCB8fCB2YXJpYW50LmVxdWFscygiIikpIHsKKwkJCQkJCQkJCWNvdW50cnlOb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQkvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdmFyaWFudAorCQkJCQkJCQkJYm9vbGVhbiB2YXJpYW50Tm9kZUZvdW5kID0gZmFsc2U7CisJCQkJCQkJCQlmb3IgKGludCBsPTA7IGwgPCBjb3VudHJ5Tm9kZS5nZXRDaGlsZENvdW50KCk7IGwrKykgeworCQkJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgdmFyaWFudE5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSljb3VudHJ5Tm9kZS5nZXRDaGlsZEF0KGwpOworCQkJCQkJCQkJCU9iamVjdCBvMyA9IHZhcmlhbnROb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJCQkJCQlpZiAobzMgPT0gbnVsbCB8fCAhKG8zIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJCQkJU3RyaW5nIHN0cjMgPSAoU3RyaW5nKW8zOworCQkJCQkJCQkJCWlmIChzdHIzLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfdmFyaWFudF9ub2RlIikpKSB7CisJCQkJCQkJCQkJCXZhcmlhbnROb2RlRm91bmQgPSB0cnVlOworCQkJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQkJCX0gCisJCQkJCQkJCQl9IC8vIGVuZCBmb3IgLSBjb3VudHJ5IG5vZGUgbG9vcAorCQkJCQkJCQkJaWYgKCF2YXJpYW50Tm9kZUZvdW5kKSB7CisJCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSk7CisJCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKHZhcmlhbnROb2RlKTsKKwkJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfSAvLyBlbmQgZm9yIC0gbGFuZ3VhZ2Ugbm9kZSBsb29wCisJCQkJCQlpZiAoIWNvdW50cnlOb2RlRm91bmQpIHsKKwkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGNvdW50cnlOb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX2NvdW50cnlfbm9kZSIsIGNvdW50cnkpKTsKKwkJCQkJCQlsYW5nTm9kZS5hZGQoY291bnRyeU5vZGUpOworCQkJCQkJCWlmICh2YXJpYW50ID09IG51bGwgfHwgdmFyaWFudC5lcXVhbHMoIiIpKSB7CisJCQkJCQkJCWNvdW50cnlOb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSB2YXJpYW50CQorCQkJCQkJCQlib29sZWFuIHZhcmlhbnROb2RlRm91bmQgPSBmYWxzZTsKKwkJCQkJCQkJZm9yIChpbnQgbD0wOyBsIDwgY291bnRyeU5vZGUuZ2V0Q2hpbGRDb3VudCgpOyBsKyspIHsKKwkJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgdmFyaWFudE5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSljb3VudHJ5Tm9kZS5nZXRDaGlsZEF0KGwpOworCQkJCQkJCQkJT2JqZWN0IG8zID0gdmFyaWFudE5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQkJCQkJaWYgKG8zID09IG51bGwgfHwgIShvMyBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQkJCQkJU3RyaW5nIHN0cjMgPSAoU3RyaW5nKW8zOworCQkJCQkJCQkJaWYgKHN0cjMuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSkpIHsKKwkJCQkJCQkJCQl2YXJpYW50Tm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQkJfSAKKwkJCQkJCQkJfSAvLyBlbmQgZm9yIC0gY291bnRyeSBub2RlIGxvb3AKKwkJCQkJCQkJaWYgKCF2YXJpYW50Tm9kZUZvdW5kKSB7CisJCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHZhcmlhbnROb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX3ZhcmlhbnRfbm9kZSIsIHZhcmlhbnQpKTsKKwkJCQkJCQkJCWNvdW50cnlOb2RlLmFkZCh2YXJpYW50Tm9kZSk7CisJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCQorCQkvLyBDcmVhdGUgdGhlIHRyZWUgZnJvbSB0aGUgcm9vdHMKKwkJalRyZWVEaXNwbGF5ID0gbmV3IEpUcmVlKHJvb3QpOworCQlqVHJlZURpc3BsYXkuYWRkTW91c2VMaXN0ZW5lcih0aGlzKTsKKwkJalRyZWVEaXNwbGF5LmFkZFRyZWVTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJalRyZWVEaXNwbGF5LnNldENlbGxSZW5kZXJlcihSQlRyZWVDZWxsUmVuZGVyZXIuZ2V0SW5zdGFuY2UoKSk7CisJCWpTY3JvbGxQYW5lVHJlZS5nZXRWaWV3cG9ydCgpLnJlbW92ZUFsbCgpOworCQlqU2Nyb2xsUGFuZVRyZWUuZ2V0Vmlld3BvcnQoKS5hZGQoalRyZWVEaXNwbGF5KTsKKwkJcmVwYWludCgpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcmV0dXJuOworCX0KKwkKKwkvKioKKwkgKiBJbmhlcml0cyBmcm9tIEpGcmFtZS5hZGROb3RpZnkoKSwgYnV0IGFsc28gaW5zZXJ0cyB0aGUgbWVudSBiYXIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBhZGROb3RpZnkoKSAKKwl7CisJCXN1cGVyLmFkZE5vdGlmeSgpOworCQkKKwkJaWYgKG1TaG93bikKKwkJCXJldHVybjsKKwkJCQorCQkvLyByZXNpemUgZnJhbWUgdG8gYWNjb3VudCBmb3IgbWVudWJhcgorCQlKTWVudUJhciBqTWVudUJhciA9IGdldEpNZW51QmFyKCk7CisJCWlmIChqTWVudUJhciAhPSBudWxsKSB7CisJCQlpbnQgak1lbnVCYXJIZWlnaHQgPSBqTWVudUJhci5nZXRQcmVmZXJyZWRTaXplKCkuaGVpZ2h0OworCQkJRGltZW5zaW9uIGRpbWVuc2lvbiA9IGdldFNpemUoKTsKKwkJCWRpbWVuc2lvbi5oZWlnaHQgKz0gak1lbnVCYXJIZWlnaHQ7CisJCQlzZXRTaXplKGRpbWVuc2lvbik7CisJCX0KKworCQltU2hvd24gPSB0cnVlOworCX0KKworCS8qKgorCSAqIENhbGxlZCB3aGVuIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGVjayB3aXRoIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0byBzYXZlIHRoZSBmaWxlCisJICovCisJCisJYm9vbGVhbiBwcm9tcHRGb3JTYXZlKFN0cmluZyBtZXNzYWdlKSB7CisJCWlmIChyYm0gIT0gbnVsbCkgeworCQkJaW50IHJlc3BvbnNlID0gSk9wdGlvblBhbmUuc2hvd0NvbmZpcm1EaWFsb2codGhpcywKKwkJCQkobWVzc2FnZSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfc2F2ZSIpIDogbWVzc2FnZSksCisJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfcXVpdCIpLCBKT3B0aW9uUGFuZS5ZRVNfTk9fQ0FOQ0VMX09QVElPTiwKKwkJCQlKT3B0aW9uUGFuZS5RVUVTVElPTl9NRVNTQUdFKTsKKwkJCWlmIChyZXNwb25zZSA9PSBKT3B0aW9uUGFuZS5DQU5DRUxfT1BUSU9OKSByZXR1cm4gZmFsc2U7CisJCQlpZiAocmVzcG9uc2UgPT0gSk9wdGlvblBhbmUuWUVTX09QVElPTikgeworCQkJCXJldHVybiBzYXZlUmVzb3VyY2VzKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGRlbGV0ZVJlc291cmNlcyhTdHJpbmcgZW5jb2RpbmcpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gZmFsc2U7ICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJdHJ5IHsKKwkJCXJibS5lcmFzZUZpbGUoZW5jb2RpbmcpOwkKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2RlbGV0aW5nIiwgaW9lLmdldE1lc3NhZ2UoKSksCisJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJaWYgKFJCTWFuYWdlckdVSS5kZWJ1ZykgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJdXBkYXRlRGlzcGxheVRyZWUoKTsKKwkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCXJldHVybiB0cnVlOworCX0KKwkKKwlwdWJsaWMgdm9pZCBoaWRlUmVzb3VyY2VzKFN0cmluZyBlbmNvZGluZykgeworCQlyYm0uaGlkZVJlc291cmNlKGVuY29kaW5nKTsKKwkJdXBkYXRlRGlzcGxheVRyZWUoKTsKKwkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJfQorCQorCS8qKgorCSAqIFNhdmUgYSBwYXJ0aWN1bGFyIHJlc291cmNlcyBmaWxlIHdpdGhpbiB0aGUgYnVuZGxlLgorCSAqLworCQorCXB1YmxpYyBib29sZWFuIHNhdmVSZXNvdXJjZXMoU3RyaW5nIGVuY29kaW5nKSB7CisJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOyAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCXJldHVybiBzYXZlUmVzb3VyY2VzKHJibSwgZW5jb2RpbmcpOworCX0KKwkKKwlwdWJsaWMgYm9vbGVhbiBzYXZlUmVzb3VyY2VzKFJCTWFuYWdlciBidW5kbGUsIFN0cmluZyBlbmNvZGluZykgeworCQl0cnkgeworCQkJYnVuZGxlLndyaXRlVG9GaWxlKGVuY29kaW5nKTsJCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9zYXZpbmciLCBpb2UuZ2V0TWVzc2FnZSgpKSwKKwkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQlpZiAoUkJNYW5hZ2VyR1VJLmRlYnVnKSBTeXN0ZW0uZXJyLnByaW50bG4oaW9lKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogQ2FsbGVkIHdoZW4gdGhlIHJlc291cmNlcyBhcmUgdG8gYmUgc2F2ZWQKKwkgKi8KKwkKKwlwdWJsaWMgYm9vbGVhbiBzYXZlUmVzb3VyY2VzKCkgeworCQlpZiAocmJtID09IG51bGwpIHJldHVybiB0cnVlOworCQlyZXR1cm4gc2F2ZVJlc291cmNlcyhyYm0pOworCX0KKwkKKwlwdWJsaWMgYm9vbGVhbiBzYXZlUmVzb3VyY2VzKFJCTWFuYWdlciBidW5kbGUpIHsKKwkJdHJ5IHsKKwkJCWJ1bmRsZS53cml0ZVRvRmlsZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3Jfc2F2aW5nIiwgaW9lLmdldE1lc3NhZ2UoKSksCisJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJaWYgKFJCTWFuYWdlckdVSS5kZWJ1ZykgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIENhbGxlZCB3aGVuIHRoZSByZXNvdXJjZSBidW5kbGUgaXMgdG8gYmUgc2F2ZWQsIGJ1dCBkaXNwbGF5cyBhIHdpbmRvdyB0byB0aGUgdXNlciBhbGxvd2luZyB0aGVtCisJICogdG8gc2VsZWN0ZSB0aGUgZmlsZSBkZXN0aW5hdGlvbiBvZiB0aGUgZm9sZGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIGJ1bmRsZSBhcyB3ZWxsIGFzIHRoZSBiYXNlCisJICogY2xhc3MgbmFtZSBmb3IgdGhlIGJ1bmRsZS4KKwkgKi8KKwkKKwlwdWJsaWMgYm9vbGVhbiBzYXZlUmVzb3VyY2VzQXMoKSB7CisJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisJCWludCByZXN1bHQgPSBzYXZlRmlsZUNob29zZXIuc2hvd1NhdmVEaWFsb2codGhpcyk7CisJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQl0cnkgeworCQkJCUZpbGUgbmV3RmlsZSA9IHNhdmVGaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCQlTdHJpbmcgZmlsZU5hbWUgPSBuZXdGaWxlLmdldE5hbWUoKTsKKwkJCQlTdHJpbmcgYmFzZU5hbWUgPSBmaWxlTmFtZTsKKwkJCQlpZiAoZmlsZU5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkKKwkJCQkJYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCxiYXNlTmFtZS5sZW5ndGgoKS0xMSk7CisJCQkJcmJtLnNldEJhc2VDbGFzcyhiYXNlTmFtZSk7CisJCQkJcmJtLnNldEZpbGVEaXJlY3RvcnkobmV3RmlsZS5nZXRQYXJlbnRGaWxlKCkpOworCQkJCXJibS53cml0ZVRvRmlsZSgpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9zYXZpbmciLCBpb2UuZ2V0TWVzc2FnZSgpKSwKKwkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCWlmIChSQk1hbmFnZXJHVUkuZGVidWcpIFN5c3RlbS5lcnIucHJpbnRsbihpb2UpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJdm9pZCB1cGRhdGVMb2NhbGUoTG9jYWxlIGwpIHsKKwkJLy8gVXBkYXRlIHRoZSBtZW51YmFycworCQlqTWVudUJhck1haW4udXBkYXRlTG9jYWxlKCk7CisJCQorCQl1cGRhdGVMb2NhbGUoZ2V0Q29udGVudFBhbmUoKSwgbCk7CisJCXVwZGF0ZUxvY2FsZShvcGVuRmlsZUNob29zZXIsIGwpOworCQl1cGRhdGVMb2NhbGUoc2F2ZUZpbGVDaG9vc2VyLCBsKTsKKwkJLy8gUmVkcmF3IHRoZSBwYW5lcworCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJLy8gdXBkYXRlIHRoZSB0YWIgdGl0bGVzCisJCWpUYWJiZWRQYW5lTWFpbi5zZXRUaXRsZUF0KDAsUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfc3RhdGlzdGljcyIpKTsKKwkJalRhYmJlZFBhbmVNYWluLnNldFRpdGxlQXQoMSxSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl91bnRyYW5zbGF0ZWQiKSk7CisJCWpUYWJiZWRQYW5lTWFpbi5zZXRUaXRsZUF0KDIsUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfZ3JvdXBzIikpOworCQlzZXRUaXRsZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlc291cmNlX2J1bmRsZV9tYW5hZ2VyIikpOworCX0KKwkKKwlzdGF0aWMgdm9pZCB1cGRhdGVMb2NhbGUoQ29udGFpbmVyIGMsIExvY2FsZSBsKSB7CisJCUNvbXBvbmVudCBjb21wW10gPSBjLmdldENvbXBvbmVudHMoKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgY29tcC5sZW5ndGg7IGkrKykgeworCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBKQ29tcG9uZW50KSB7CisJCQkJKChKQ29tcG9uZW50KWNvbXBbaV0pLnNldExvY2FsZShsKTsKKwkJCX0KKwkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7CisJCQkJdXBkYXRlTG9jYWxlKChDb250YWluZXIpY29tcFtpXSxsKTsKKwkJCX0KKwkJfQorCQlpZiAoYyBpbnN0YW5jZW9mIEpNZW51KSB7CisJCQljb21wID0gKChKTWVudSljKS5nZXRNZW51Q29tcG9uZW50cygpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgY29tcC5sZW5ndGg7IGkrKykgeworCQkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgSkNvbXBvbmVudCkgeworCQkJCQkoKEpDb21wb25lbnQpY29tcFtpXSkuc2V0TG9jYWxlKGwpOworCQkJCX0KKwkJCQlpZiAoY29tcFtpXSBpbnN0YW5jZW9mIENvbnRhaW5lcikgeworCQkJCQl1cGRhdGVMb2NhbGUoKENvbnRhaW5lciljb21wW2ldLGwpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCQorCXZvaWQgdXBkYXRlVUkoKSB7CisJCXVwZGF0ZVVJKGdldENvbnRlbnRQYW5lKCkpOworCQlqTWVudUJhck1haW4udXBkYXRlVUkoKTsKKwkJdXBkYXRlVUkoak1lbnVCYXJNYWluKTsKKwkJdXBkYXRlVUkob3BlbkZpbGVDaG9vc2VyKTsKKwkJdXBkYXRlVUkoc2F2ZUZpbGVDaG9vc2VyKTsKKwl9CisJCisJc3RhdGljIHZvaWQgdXBkYXRlVUkoQ29udGFpbmVyIGMpIHsKKwkJQ29tcG9uZW50IGNvbXBbXSA9IGMuZ2V0Q29tcG9uZW50cygpOworCQlmb3IgKGludCBpPTA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7CisJCQlpZiAoY29tcFtpXSBpbnN0YW5jZW9mIEpDb21wb25lbnQpIHsKKwkJCQkoKEpDb21wb25lbnQpY29tcFtpXSkudXBkYXRlVUkoKTsKKwkJCX0KKwkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7CisJCQkJdXBkYXRlVUkoKENvbnRhaW5lciljb21wW2ldKTsKKwkJCX0KKwkJfQorCQlpZiAoYyBpbnN0YW5jZW9mIEpNZW51KSB7CisJCQljb21wID0gKChKTWVudSljKS5nZXRNZW51Q29tcG9uZW50cygpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgY29tcC5sZW5ndGg7IGkrKykgeworCQkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgSkNvbXBvbmVudCkgeworCQkJCQkoKEpDb21wb25lbnQpY29tcFtpXSkudXBkYXRlVUkoKTsKKwkJCQl9CisJCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBDb250YWluZXIpIHsKKwkJCQkJdXBkYXRlVUkoKENvbnRhaW5lciljb21wW2ldKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLy8gQ2xvc2UgdGhlIHdpbmRvdyB3aGVuIHRoZSBjbG9zZSBib3ggaXMgY2xpY2tlZAorCXZvaWQgdGhpc1dpbmRvd0Nsb3NpbmcoamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQgZSkKKwl7CisJCWlmIChwcm9tcHRGb3JTYXZlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3F1aXRfc2F2ZSIpKSkgeworCQkJc2V0VmlzaWJsZShmYWxzZSk7CisJCQlkaXNwb3NlKCk7CisJCQlTeXN0ZW0uZXhpdCgwKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyTmFtZSkgeworCQl0aGlzLnVzZXJOYW1lID0gdXNlck5hbWU7CisJCWlmIChyYm0gIT0gbnVsbCkgcmJtLnNldFVzZXIodXNlck5hbWUpOworCX0KKwkKKwlwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CisJCXJldHVybiB1c2VyTmFtZTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW0gZ2V0U2VsZWN0ZWRQcm9qZWN0QnVuZGxlSXRlbSgpIHsKKwkJVHJlZVBhdGggcGF0aCA9IHByb2plY3RUcmVlLmdldFNlbGVjdGlvblBhdGgoKTsKKwkJaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKXBhdGguZ2V0TGFzdFBhdGhDb21wb25lbnQoKTsKKwkJT2JqZWN0IG9iaiA9IG5vZGUuZ2V0VXNlck9iamVjdCgpOworCQlpZiAob2JqID09IG51bGwgfHwgIShvYmogaW5zdGFuY2VvZiBCdW5kbGVJdGVtKSkgcmV0dXJuIG51bGw7CisJCXJldHVybiAoQnVuZGxlSXRlbSlvYmo7CisJfQorCQorCXB1YmxpYyBSQk1hbmFnZXIgZ2V0U2VsZWN0ZWRQcm9qZWN0QnVuZGxlKCkgeworCQlUcmVlUGF0aCBwYXRoID0gcHJvamVjdFRyZWUuZ2V0U2VsZWN0aW9uUGF0aCgpOworCQlpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJZm9yIChpbnQgaT0wOyBpIDwgcGF0aC5nZXRQYXRoQ291bnQoKTsgaSsrKSB7CisJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIG5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSlwYXRoLmdldFBhdGhDb21wb25lbnQoaSk7CisJCQlPYmplY3Qgb2JqID0gbm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQlpZiAob2JqICE9IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgUkJNYW5hZ2VyKSByZXR1cm4gKFJCTWFuYWdlcilvYmo7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBkZWJ1Z01zZyhTdHJpbmcgbXNnKSB7CisJCWlmIChkZWJ1ZykgU3lzdGVtLm91dC5wcmludGxuKCJEZWJ1ZyBNZXNzYWdlIFsiICsgZGVidWdjb3VudCsrICsgIl06ICIgKyBtc2cpOworCX0KK30KKworY2xhc3MgUkJUcmVlQ2VsbFJlbmRlcmVyIGV4dGVuZHMgRGVmYXVsdFRyZWVDZWxsUmVuZGVyZXIgeworCXByaXZhdGUgc3RhdGljIFJCVHJlZUNlbGxSZW5kZXJlciBjZWxsUmVuZCA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGJ1bmRsZUljb24gICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGxhbmd1YWdlSWNvbiA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGNvdW50cnlJY29uICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIHZhcmlhbnRJY29uICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGZpbGVJY29uICAgICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGdyb3VwSWNvbiAgICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGl0ZW1JY29uICAgICA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIHByb2plY3RJY29uICA9IG51bGw7CisJCisJcHJpdmF0ZSBSQlRyZWVDZWxsUmVuZGVyZXIoKSB7CisJCQorCX0KKwkKKwlwdWJsaWMgQ29tcG9uZW50IGdldFRyZWVDZWxsUmVuZGVyZXJDb21wb25lbnQoSlRyZWUgdHJlZSwgT2JqZWN0IHZhbHVlLCBib29sZWFuIHNlbGVjdGVkLCBib29sZWFuIGV4cGFuZGVkLAorCQkJCQkJCQkJCQkJICBib29sZWFuIGxlYWYsIGludCByb3csIGJvb2xlYW4gaGFzRm9jdXMpIHsKKwkJc3VwZXIuZ2V0VHJlZUNlbGxSZW5kZXJlckNvbXBvbmVudCh0cmVlLCB2YWx1ZSwgc2VsZWN0ZWQsIGV4cGFuZGVkLCBsZWFmLCByb3csIGhhc0ZvY3VzKTsKKwkJCisJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKXZhbHVlOworCQlpbnQgbGV2ZWwgPSBub2RlLmdldExldmVsKCk7CisJCU9iamVjdCBvYmogPSBub2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCisJCWlmIChvYmogaW5zdGFuY2VvZiBCdW5kbGVHcm91cCkgeworCQkJc2V0SWNvbihncm91cEljb24pOworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEJ1bmRsZUl0ZW0pIHsKKwkJCXNldEljb24oaXRlbUljb24pOworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJCTWFuYWdlcikgeworCQkJc2V0SWNvbihidW5kbGVJY29uKTsKKwkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBSQlByb2plY3QpIHsKKwkJCXNldEljb24ocHJvamVjdEljb24pOworCQl9IGVsc2UgaWYgKGxlYWYpIHsKKwkJCWlmIChsZXZlbCAhPSAwKSBzZXRJY29uKGZpbGVJY29uKTsJCisJCX0gZWxzZSB7CQorCQkJaWYgKGxldmVsID09IDApIHsKKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nICYmICgoU3RyaW5nKW9iaikuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibm9fcHJvamVjdCIpKSkgCisJCQkJCXNldEljb24ocHJvamVjdEljb24pOworCQkJCWVsc2Ugc2V0SWNvbihidW5kbGVJY29uKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGxldmVsID09IDEpIHNldEljb24obGFuZ3VhZ2VJY29uKTsKKwkJCWVsc2UgaWYgKGxldmVsID09IDIpIHNldEljb24oY291bnRyeUljb24pOworCQkJZWxzZSBpZiAobGV2ZWwgPT0gMykgc2V0SWNvbih2YXJpYW50SWNvbik7CisJCX0KKwkJCisJCXJldHVybiB0aGlzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIFJCVHJlZUNlbGxSZW5kZXJlciBnZXRJbnN0YW5jZSgpIHsKKwkJaWYgKGNlbGxSZW5kID09IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQ2xhc3MgdGhpc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSSIpOworCQkJICAgIC8vIENyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIGljb25zCisgICAgICAgICAgICAgICAgSW1hZ2Ugc2NhbGVkSW1hZ2UgPSAobmV3IEltYWdlSWNvbih0aGlzQ2xhc3MuZ2V0UmVzb3VyY2UoImltYWdlcy90cmVlX2ljb25fYnVuZGxlLmdpZiIpKSkuZ2V0SW1hZ2UoKS5nZXRTY2FsZWRJbnN0YW5jZSgxNiwgMTYsIEltYWdlLlNDQUxFX0RFRkFVTFQpOworCQkJICAgIGJ1bmRsZUljb24gICA9IG5ldyBJbWFnZUljb24oc2NhbGVkSW1hZ2UpOworCQkJICAgIGxhbmd1YWdlSWNvbiA9IG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX2xhbmd1YWdlLmdpZiIpKTsKKwkJCSAgICBjb3VudHJ5SWNvbiAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9jb3VudHJ5LmdpZiIpKTsKKwkJCSAgICB2YXJpYW50SWNvbiAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl92YXJpYW50LmdpZiIpKTsKKwkJCSAgICBmaWxlSWNvbiAgICAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9maWxlLmdpZiIpKTsKKwkJCSAgICBncm91cEljb24gICAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9ncm91cC5naWYiKSk7CisJCQkgICAgaXRlbUljb24gICAgID0gbmV3IEltYWdlSWNvbih0aGlzQ2xhc3MuZ2V0UmVzb3VyY2UoImltYWdlcy90cmVlX2ljb25faXRlbS5naWYiKSk7CisJCQkgICAgcHJvamVjdEljb24gID0gbmV3IEltYWdlSWNvbih0aGlzQ2xhc3MuZ2V0UmVzb3VyY2UoImltYWdlcy90cmVlX2ljb25fcHJvamVjdC5naWYiKSk7CisgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKwkJCS8vIENyZWF0ZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIHJlbmRlcmVyCisJCQljZWxsUmVuZCA9IG5ldyBSQlRyZWVDZWxsUmVuZGVyZXIoKTsKKwkJfQorCQlyZXR1cm4gY2VsbFJlbmQ7CisJfQorfQorCisvKioKKyAqIFRhYmxlIG1vZGVsIGZvciByZXNvdXJjZSBidW5kbGUgcHJvamVjdHMKKyAqLworY2xhc3MgUkJQcm9qZWN0IHsKKwlqYXZhLnV0aWwuTGlzdCBidW5kbGVOYW1lczsKKwlqYXZhLnV0aWwuTGlzdCBidW5kbGVGaWxlTmFtZXM7CisJamF2YS51dGlsLkxpc3QgYnVuZGxlczsKKwlTdHJpbmcgcHJvamVjdE5hbWU7CisJCisJcHVibGljIFJCUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHsKKwkJdGhpcy5wcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lOworCQlidW5kbGVOYW1lcyA9IG5ldyBqYXZhLnV0aWwuTGlua2VkTGlzdCgpOworCQlidW5kbGVGaWxlTmFtZXMgPSBuZXcgamF2YS51dGlsLkxpbmtlZExpc3QoKTsKKwkJYnVuZGxlcyA9IG5ldyBqYXZhLnV0aWwuTGlua2VkTGlzdCgpOworCX0KKwkKKwlwdWJsaWMgUkJQcm9qZWN0KEZpbGUgaW5wdXRGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzKGlucHV0RmlsZS5nZXROYW1lKCkpOworCQkKKwkJaWYgKHByb2plY3ROYW1lLmluZGV4T2YoIi4iKSA+IDApIHsKKwkJCXByb2plY3ROYW1lID0gcHJvamVjdE5hbWUuc3Vic3RyaW5nKDAscHJvamVjdE5hbWUubGFzdEluZGV4T2YoIi4iKSk7CisJCX0KKwkJCisJCUZpbGVSZWFkZXIgZnIgPSBuZXcgRmlsZVJlYWRlcihpbnB1dEZpbGUpOworCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7CisJCVN0cmluZyBsaW5lID0gbnVsbDsKKwkJaW50IGxpbmVjb3VudCA9IDA7CisJCXdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKwkJCWlmIChsaW5lY291bnQgJSAyID09IDApIHsKKwkJCQlidW5kbGVOYW1lcy5hZGQobGluZS50cmltKCkpOworCQkJfSBlbHNlIHsKKwkJCQlidW5kbGVGaWxlTmFtZXMuYWRkKGxpbmUudHJpbSgpKTsKKwkJCX0KKwkJCWxpbmVjb3VudCsrOworCQl9CisJCWZyLmNsb3NlKCk7CisJCXRyeSB7CisJCQlmb3IgKGludCBpPTA7IGkgPCBidW5kbGVGaWxlTmFtZXMuc2l6ZSgpOyBpKyspIHsKKwkJCQlSQk1hbmFnZXIgcmJtID0gbmV3IFJCTWFuYWdlcihuZXcgRmlsZSgoU3RyaW5nKWJ1bmRsZUZpbGVOYW1lcy5nZXQoaSkpKTsKKwkJCQlidW5kbGVzLmFkZChyYm0pOworCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG5ldyBKRnJhbWUoKSwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9sb2FkX3Byb2plY3QiKSwKKwkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQlleC5wcmludFN0YWNrVHJhY2UoKTsKKwkJCWJ1bmRsZU5hbWVzLmNsZWFyKCk7CisJCQlidW5kbGVGaWxlTmFtZXMuY2xlYXIoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gcHJvamVjdE5hbWU7IH0KKwkKKwlwdWJsaWMgaW50IGdldFNpemUoKSB7IHJldHVybiBidW5kbGVOYW1lcy5zaXplKCk7IH0KKwkKKwlwdWJsaWMgU3RyaW5nIGdldEJ1bmRsZU5hbWUoaW50IGluZGV4KSB7CisJCXJldHVybiAoU3RyaW5nKWJ1bmRsZU5hbWVzLmdldChpbmRleCk7CQorCX0KKwkKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lKGludCBpbmRleCkgeworCQlyZXR1cm4gKFN0cmluZylidW5kbGVGaWxlTmFtZXMuZ2V0KGluZGV4KTsJCisJfQorCQorCXB1YmxpYyBSQk1hbmFnZXIgZ2V0QnVuZGxlKGludCBpbmRleCkgeworCQlyZXR1cm4gKFJCTWFuYWdlcilidW5kbGVzLmdldChpbmRleCk7CisJfQorCQorCXB1YmxpYyBSQk1hbmFnZXIgZ2V0QnVuZGxlKFN0cmluZyBidW5kbGVOYW1lKSB7CisJCWludCBpbmRleCA9IGJ1bmRsZU5hbWVzLmluZGV4T2YoYnVuZGxlTmFtZSk7CisJCWlmIChpbmRleCA+PSAwKSByZXR1cm4gZ2V0QnVuZGxlKGluZGV4KTsKKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyB2b2lkIHdyaXRlKEZpbGUgb3V0cHV0RmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dHB1dEZpbGUpOworCQlmb3IgKGludCBpPTA7IGkgPCBidW5kbGVOYW1lcy5zaXplKCk7IGkrKykgeworCQkJZncud3JpdGUoKFN0cmluZylidW5kbGVOYW1lcy5nZXQoaSkpOworCQkJZncud3JpdGUoIlxuIik7CisJCQlmdy53cml0ZSgoU3RyaW5nKWJ1bmRsZUZpbGVOYW1lcy5nZXQoaSkpOworCQkJaWYgKGkgIT0gYnVuZGxlTmFtZXMuc2l6ZSgpLTEpIGZ3LndyaXRlKCJcbiIpOworCQl9CisJCWZ3LmZsdXNoKCk7CisJCWZ3LmNsb3NlKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGFkZEJ1bmRsZShTdHJpbmcgYnVuZGxlRmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVJCTWFuYWdlciBidW5kbGUgPSBuZXcgUkJNYW5hZ2VyKG5ldyBGaWxlKGJ1bmRsZUZpbGVOYW1lKSk7CisJCWJ1bmRsZXMuYWRkKGJ1bmRsZSk7CisJCWJ1bmRsZU5hbWVzLmFkZChidW5kbGUuZ2V0QmFzZUNsYXNzKCkpOworCQlidW5kbGVGaWxlTmFtZXMuYWRkKGJ1bmRsZUZpbGVOYW1lKTsKKwl9CisJCisJcHVibGljIHZvaWQgcmVtb3ZlQnVuZGxlKFN0cmluZyBidW5kbGVOYW1lKSB7CisJCWludCBpbmRleCA9IGJ1bmRsZU5hbWVzLmluZGV4T2YoYnVuZGxlTmFtZSk7CisJCWlmIChpbmRleCA+PSAwKSB7CisJCQlidW5kbGVOYW1lcy5yZW1vdmUoaW5kZXgpOworCQkJYnVuZGxlRmlsZU5hbWVzLnJlbW92ZShpbmRleCk7CisJCQlidW5kbGVzLnJlbW92ZShpbmRleCk7CisJCX0KKwl9Cit9CisKK2NsYXNzIFJCTWFuYWdlck1lbnVCYXIgZXh0ZW5kcyBKTWVudUJhciB7CisJUkJNYW5hZ2VyR1VJICAgICAgICAgICAgIGxpc3RlbmVyOworCQorCUpNZW51ICAgICAgICBqTWVudUZpbGUgPSBuZXcgSk1lbnUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVudSAtPiBGaWxlCisJSk1lbnVJdGVtICAgIGpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlID0gbmV3IEpNZW51SXRlbSgpOyAgICAgICAgICAgICAgICAKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlT3BlblJlc291cmNlQnVuZGxlID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZUFzID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51ICAgICAgICBqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZSA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgLy8gTWVudSAtPiBGaWxlIC0+IEltcG9ydAorCUpNZW51SXRlbSAgICBqTWVudUZpbGVJbXBvcnRKYXZhID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVJbXBvcnRUTVggPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUltcG9ydFhMRiA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudSAgICAgICAgak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUgPSBuZXcgSk1lbnUoKTsgICAgICAgICAgICAgICAgIC8vIE1lbnUgLT4gRmlsZSAtPiBFeHBvcnQKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlRXhwb3J0SmF2YSA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlRXhwb3J0SUNVID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVFeHBvcnRUTVggPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUV4cG9ydFhMRiA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlRXhpdCA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudSAgICAgICAgak1lbnVFZGl0ID0gbmV3IEpNZW51KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lbnUgLT4gRWRpdAorCUpNZW51SXRlbSAgICBqTWVudUVkaXRDdXQgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RWRpdENvcHkgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RWRpdFBhc3RlID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUVkaXREZWxldGUgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnUgICAgICAgIGpNZW51T3B0aW9ucyA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW51IC0+IE9wdGlvbnMKKwlKTWVudUl0ZW0gICAgak1lbnVPcHRpb25zQWRkTmV3RW50cnkgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51T3B0aW9uc0FkZE5ld0dyb3VwID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUgPSBuZXcgSk1lbnVJdGVtKCk7CisJLy9KTWVudUl0ZW0gICAgak1lbnVPcHRpb25zUHJvamVjdFZpZXdlciA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVPcHRpb25zUHJlZmVyZW5jZXMgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnUgICAgICAgIGpNZW51VmlldyA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW51IC0+IFZpZXcKKwlKTWVudUl0ZW0gICAgak1lbnVWaWV3Vmlld1N0YXRpc3RpY3MgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnUgICAgICAgIGpNZW51SGVscCA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW51IC0+IEhlbHAKKwlKTWVudUl0ZW0gICAgak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIgPSBuZXcgSk1lbnVJdGVtKCk7CisJCisJdm9pZCB1cGRhdGVMb2NhbGUoKSB7CisJCS8vRklMRQorCQlqTWVudUZpbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZSIpKTsKKwkJak1lbnVGaWxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX25ldyIpKTsKKwkJak1lbnVGaWxlTmV3UmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfbmV3X3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9vcGVuIikpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfb3Blbl90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZSIpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZUFzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZWFzIikpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGVBcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlYXNfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0IikpOworCQlqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydEphdmEuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfamF2YSIpKTsKKwkJak1lbnVGaWxlSW1wb3J0SmF2YS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0UHJvcGVydGllcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzIikpOworCQlqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRUTVguc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfVE1YIikpOworCQlqTWVudUZpbGVJbXBvcnRUTVguc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1RNWF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0WExGLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1hMRiIpKTsKKwkJak1lbnVGaWxlSW1wb3J0WExGLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9YTEZfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0IikpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydEphdmEuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfamF2YSIpKTsKKwkJak1lbnVGaWxlRXhwb3J0SmF2YS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0SUNVLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X0lDVSIpKTsKKwkJak1lbnVGaWxlRXhwb3J0SUNVLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9JQ1VfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydFByb3BlcnRpZXMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllcyIpKTsKKwkJak1lbnVGaWxlRXhwb3J0UHJvcGVydGllcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllc190cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0VE1YLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1RNWCIpKTsKKwkJak1lbnVGaWxlRXhwb3J0VE1YLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9UTVhfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydFhMRi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9YTEYiKSk7CisJCWpNZW51RmlsZUV4cG9ydFhMRi5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfWExGX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeGl0LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfcXVpdCIpKTsKKwkJak1lbnVGaWxlRXhpdC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9xdWl0X3RyaWdnZXIiKSkpOworCQkvL0VESVQKKwkJak1lbnVFZGl0LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXQiKSk7CisJCWpNZW51RWRpdC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF90cmlnZ2VyIikpKTsKKwkJak1lbnVFZGl0Q3V0LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY3V0IikpOworCQlqTWVudUVkaXRDdXQuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY3V0X3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXRDb3B5LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY29weSIpKTsKKwkJak1lbnVFZGl0Q29weS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jb3B5X3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXRQYXN0ZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X3Bhc3RlIikpOworCQlqTWVudUVkaXRQYXN0ZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9wYXN0ZV90cmlnZ2VyIikpKTsKKwkJak1lbnVFZGl0RGVsZXRlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfZGVsZXRlIikpOworCQlqTWVudUVkaXREZWxldGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfZGVsZXRlX3RyaWdnZXIiKSkpOworCQkvL09QVElPTlMKKwkJak1lbnVPcHRpb25zLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnMiKSk7CisJCWpNZW51T3B0aW9ucy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc190cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3RW50cnkuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRlbnRyeSIpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3RW50cnkuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZW50cnlfdHJpZ2dlciIpKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld0dyb3VwLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZ3JvdXAiKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld0dyb3VwLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGdyb3VwX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRmaWxlIikpOworCQlqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZmlsZV90cmlnZ2VyIikpKTsKKwkJLy9qTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfcHJvamVjdF92aWV3ZXIiKSk7CisJCS8vak1lbnVPcHRpb25zUHJvamVjdFZpZXdlci5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcl90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zUHJlZmVyZW5jZXMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcmVmZXJlbmNlcyIpKTsKKwkJak1lbnVPcHRpb25zUHJlZmVyZW5jZXMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfcHJlZmVyZW5jZXNfdHJpZ2dlciIpKSk7CisJCS8vVklFVworCQlqTWVudVZpZXcuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdmlldyIpKTsKKwkJak1lbnVWaWV3LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3RyaWdnZXIiKSkpOworCQlqTWVudVZpZXdWaWV3U3RhdGlzdGljcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3N0YXRpc3RpY3MiKSk7CisJCWpNZW51Vmlld1ZpZXdTdGF0aXN0aWNzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3N0YXRpc3RpY3NfdHJpZ2dlciIpKSk7CisJCS8vSEVMUAorCQlqTWVudUhlbHAuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscCIpKTsKKwkJak1lbnVIZWxwLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3RyaWdnZXIiKSkpOworCQlqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlci5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwX2Fib3V0IikpOworCQlqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlci5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscF9hYm91dF90cmlnZ2VyIikpKTsKKwl9CisJCisJcHVibGljIFJCTWFuYWdlck1lbnVCYXIoUkJNYW5hZ2VyR1VJIGd1aSkgeworCQlzdXBlcigpOwkKKwkJCisgICAgICAgIGJvb2xlYW4geG1sQXZhaWxhYmxlOworCQl0cnkgeworICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIiKTsKKyAgICAgICAgICAgIENsYXNzLmZvck5hbWUoImphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlciIpOworICAgICAgICAgICAgeG1sQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB4bWxBdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorCQlsaXN0ZW5lciA9IGd1aTsKKwkJCisJCS8vIEFkZCB0aGUgbWVudXMgdG8gdGhlIG1lbnUgYmFyIAorCQlzZXRWaXNpYmxlKHRydWUpOworCQlhZGQoak1lbnVGaWxlKTsKKwkJLy9hZGQoak1lbnVFZGl0KTsKKwkJYWRkKGpNZW51T3B0aW9ucyk7CisJCS8vYWRkKGpNZW51Vmlldyk7CisJCWFkZChqTWVudUhlbHApOworCisJCS8vIEFkZCBGaWxlIE1lbnUgSXRlbXMgdG8gdGhlIEZpbGUgTWVudQorCQlqTWVudUZpbGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGUiKSk7CisJCWpNZW51RmlsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlLmFkZChqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZSk7CisJCWpNZW51RmlsZS5hZGQoak1lbnVGaWxlT3BlblJlc291cmNlQnVuZGxlKTsKKwkJak1lbnVGaWxlLmFkZChqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUpOworCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZUFzKTsKKwkJak1lbnVGaWxlLmFkZFNlcGFyYXRvcigpOworCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlKTsKKwkJak1lbnVGaWxlLmFkZChqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZSk7CisJCWpNZW51RmlsZS5hZGRTZXBhcmF0b3IoKTsKKwkJLy8gQWRkIHRoZSByZWNlbnQgZmlsZXMgdG8gdGhlIGZpbGUgbWVudQorCQlWZWN0b3IgcmVjZW50RmlsZXMgPSBQcmVmZXJlbmNlcy5nZXRSZWNlbnRGaWxlc1ByZWZlcmVuY2VzKCk7CisJCWlmIChyZWNlbnRGaWxlcy5zaXplKCkgPiAwKSB7CisJCQlmb3IgKGludCBpPTA7IGkgPCByZWNlbnRGaWxlcy5zaXplKCk7IGkrPTIpIHsKKwkJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpcmVjZW50RmlsZXMuZWxlbWVudEF0KGkpOworCQkJCVN0cmluZyBsb2NhdGlvbiA9IChTdHJpbmcpcmVjZW50RmlsZXMuZWxlbWVudEF0KGkrMSk7CisJCQkJSk1lbnVJdGVtIHJlY2VudE1lbnVJdGVtID0gbmV3IEpNZW51SXRlbSgpOworCQkJCXJlY2VudE1lbnVJdGVtLnNldFZpc2libGUodHJ1ZSk7CisJCQkJcmVjZW50TWVudUl0ZW0uc2V0VGV4dChuYW1lKTsKKwkJCQlyZWNlbnRNZW51SXRlbS5zZXROYW1lKCJfXyIgKyBsb2NhdGlvbi50cmltKCkpOworCQkJCXJlY2VudE1lbnVJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCQlqTWVudUZpbGUuYWRkKHJlY2VudE1lbnVJdGVtKTsKKwkJCX0KKwkJCWpNZW51RmlsZS5hZGRTZXBhcmF0b3IoKTsKKwkJfQorCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZUV4aXQpOworCQkKKwkJLy9qTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5hZGQoak1lbnVGaWxlSW1wb3J0SmF2YSk7CisJCWpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzKTsKKyAgICAgICAgak1lbnVGaWxlSW1wb3J0VE1YLnNldEVuYWJsZWQoeG1sQXZhaWxhYmxlKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuYWRkKGpNZW51RmlsZUltcG9ydFRNWCk7CisgICAgICAgIGpNZW51RmlsZUltcG9ydFhMRi5zZXRFbmFibGVkKHhtbEF2YWlsYWJsZSk7CisJCWpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVJbXBvcnRYTEYpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5hZGQoak1lbnVGaWxlRXhwb3J0SmF2YSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVFeHBvcnRJQ1UpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5hZGQoak1lbnVGaWxlRXhwb3J0UHJvcGVydGllcyk7CisgICAgICAgIGpNZW51RmlsZUV4cG9ydFRNWC5zZXRFbmFibGVkKHhtbEF2YWlsYWJsZSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVFeHBvcnRUTVgpOworICAgICAgICBqTWVudUZpbGVFeHBvcnRYTEYuc2V0RW5hYmxlZCh4bWxBdmFpbGFibGUpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5hZGQoak1lbnVGaWxlRXhwb3J0WExGKTsKKworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX25ldyIpKTsKKwkJak1lbnVGaWxlTmV3UmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfbmV3X3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfTiwgQWN0aW9uRXZlbnQuQ1RSTF9NQVNLKSk7CisJCWpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCisJCWpNZW51RmlsZU9wZW5SZXNvdXJjZUJ1bmRsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9vcGVuIikpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfb3Blbl90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlT3BlblJlc291cmNlQnVuZGxlLnNldEFjY2VsZXJhdG9yKEtleVN0cm9rZS5nZXRLZXlTdHJva2UoCisgICAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19PLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKwkJak1lbnVGaWxlT3BlblJlc291cmNlQnVuZGxlLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZSIpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZS5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfUywgQWN0aW9uRXZlbnQuQ1RSTF9NQVNLKSk7CisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlYXMiKSk7CisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZUFzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVhc190cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKyAgICAgICAgICAgICAgICAgIEtleUV2ZW50LlZLX1MsIEFjdGlvbkV2ZW50LkNUUkxfTUFTSyB8IEFjdGlvbkV2ZW50LlNISUZUX01BU0spKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnQiKSk7CisJCWpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlSW1wb3J0SmF2YS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVJbXBvcnRKYXZhLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X2phdmEiKSk7CisJCWpNZW51RmlsZUltcG9ydEphdmEuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X2phdmFfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydEphdmEuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlSW1wb3J0UHJvcGVydGllcy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXMiKSk7CisJCWpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXNfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlSW1wb3J0VE1YLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUltcG9ydFRNWC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9UTVgiKSk7CisJCWpNZW51RmlsZUltcG9ydFRNWC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfVE1YX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRUTVguYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlSW1wb3J0WExGLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUltcG9ydFhMRi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9YTEYiKSk7CisJCWpNZW51RmlsZUltcG9ydFhMRi5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfWExGX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRYTEYuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnQiKSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlRXhwb3J0SmF2YS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVFeHBvcnRKYXZhLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X2phdmEiKSk7CisJCWpNZW51RmlsZUV4cG9ydEphdmEuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X2phdmFfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydEphdmEuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlRXhwb3J0SUNVLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUV4cG9ydElDVS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9JQ1UiKSk7CisJCWpNZW51RmlsZUV4cG9ydElDVS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfSUNVX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRJQ1UuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCWpNZW51RmlsZUV4cG9ydFByb3BlcnRpZXMuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlRXhwb3J0UHJvcGVydGllcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzIikpOworCQlqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCisJCWpNZW51RmlsZUV4cG9ydFRNWC5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVFeHBvcnRUTVguc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfVE1YIikpOworCQlqTWVudUZpbGVFeHBvcnRUTVguc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1RNWF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0VE1YLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCisJCWpNZW51RmlsZUV4cG9ydFhMRi5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVFeHBvcnRYTEYuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfWExGIikpOworCQlqTWVudUZpbGVFeHBvcnRYTEYuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1hMRl90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0WExGLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKworCQlqTWVudUZpbGVFeGl0LnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUV4aXQuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9xdWl0IikpOworCQlqTWVudUZpbGVFeGl0LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3F1aXRfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4aXQuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKyAgICAgICAgICAgICAgICAgIEtleUV2ZW50LlZLX1EsIEFjdGlvbkV2ZW50LkNUUkxfTUFTSykpOworCQlqTWVudUZpbGVFeGl0LmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKworCQkvLyBBZGQgRWRpdCBNZW51IEl0ZW1zIHRvIHRoZSBFZGl0IE1lbnUKKwkJak1lbnVFZGl0LnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RWRpdC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0IikpOworCQlqTWVudUVkaXQuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfdHJpZ2dlciIpKSk7CisJCWpNZW51RWRpdC5hZGQoak1lbnVFZGl0Q3V0KTsKKwkJak1lbnVFZGl0LmFkZChqTWVudUVkaXRDb3B5KTsKKwkJak1lbnVFZGl0LmFkZChqTWVudUVkaXRQYXN0ZSk7CisJCWpNZW51RWRpdC5hZGQoak1lbnVFZGl0RGVsZXRlKTsKKworCQlqTWVudUVkaXRDdXQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVFZGl0Q3V0LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY3V0IikpOworCQlqTWVudUVkaXRDdXQuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY3V0X3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXRDdXQuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKwkJCQlLZXlFdmVudC5WS19YLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKworCQlqTWVudUVkaXRDb3B5LnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RWRpdENvcHkuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jb3B5IikpOworCQlqTWVudUVkaXRDb3B5LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X2NvcHlfdHJpZ2dlciIpKSk7CisJCWpNZW51RWRpdENvcHkuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKwkJCQlLZXlFdmVudC5WS19DLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKworCQlqTWVudUVkaXRQYXN0ZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUVkaXRQYXN0ZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X3Bhc3RlIikpOworCQlqTWVudUVkaXRQYXN0ZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9wYXN0ZV90cmlnZ2VyIikpKTsKKwkJak1lbnVFZGl0UGFzdGUuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKwkJCQlLZXlFdmVudC5WS19WLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKwkJCisJCWpNZW51RWRpdERlbGV0ZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUVkaXREZWxldGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9kZWxldGUiKSk7CisJCWpNZW51RWRpdERlbGV0ZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9kZWxldGVfdHJpZ2dlciIpKSk7CisKKwkJLy8gQWRkIE9wdGlvbnMgTWVudSBJdGVtcyB0byB0aGUgT3B0aW9ucyBNZW51CisJCWpNZW51T3B0aW9ucy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudU9wdGlvbnMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9ucyIpKTsKKwkJak1lbnVPcHRpb25zLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnMuYWRkKGpNZW51T3B0aW9uc0FkZE5ld0VudHJ5KTsKKwkJak1lbnVPcHRpb25zLmFkZChqTWVudU9wdGlvbnNBZGROZXdHcm91cCk7CisJCWpNZW51T3B0aW9ucy5hZGQoak1lbnVPcHRpb25zQWRkTmV3UmVzb3VyY2VGaWxlKTsKKwkJLy9qTWVudU9wdGlvbnMuYWRkU2VwYXJhdG9yKCk7CisJCS8vak1lbnVPcHRpb25zLmFkZChqTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyKTsKKwkJak1lbnVPcHRpb25zLmFkZFNlcGFyYXRvcigpOworCQlqTWVudU9wdGlvbnMuYWRkKGpNZW51T3B0aW9uc1ByZWZlcmVuY2VzKTsKKworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGVudHJ5IikpOworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRlbnRyeV90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3RW50cnkuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRncm91cCIpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZ3JvdXBfdHJpZ2dlciIpKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld0dyb3VwLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKworCQlqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3UmVzb3VyY2VGaWxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZmlsZSIpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3UmVzb3VyY2VGaWxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGZpbGVfdHJpZ2dlciIpKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld1Jlc291cmNlRmlsZS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQkvKgorCQlqTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51T3B0aW9uc1Byb2plY3RWaWV3ZXIuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlciIpKTsKKwkJak1lbnVPcHRpb25zUHJvamVjdFZpZXdlci5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcl90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zUHJvamVjdFZpZXdlci5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCSovCisJCQorCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3ByZWZlcmVuY2VzIikpOworCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcmVmZXJlbmNlc190cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zUHJlZmVyZW5jZXMuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCS8vIEFkZCBWaWV3IE1lbnUgSXRlbXMgdG8gdGhlIFZpZXcgTWVudQorCQlqTWVudVZpZXcuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVWaWV3LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3ZpZXciKSk7CisJCWpNZW51Vmlldy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdmlld190cmlnZ2VyIikpKTsKKwkJak1lbnVWaWV3LmFkZChqTWVudVZpZXdWaWV3U3RhdGlzdGljcyk7CisKKwkJak1lbnVWaWV3Vmlld1N0YXRpc3RpY3Muc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVWaWV3Vmlld1N0YXRpc3RpY3Muc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdmlld19zdGF0aXN0aWNzIikpOworCQlqTWVudVZpZXdWaWV3U3RhdGlzdGljcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdmlld19zdGF0aXN0aWNzX3RyaWdnZXIiKSkpOworCisJCS8vIEFkZCBIZWxwIE1lbnUgSXRlbXMgdG8gdGhlIEhlbHAgTWVudQorCQlqTWVudUhlbHAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVIZWxwLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2hlbHAiKSk7CisJCWpNZW51SGVscC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscF90cmlnZ2VyIikpKTsKKwkJak1lbnVIZWxwLmFkZChqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlcik7CisKKwkJak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscF9hYm91dCIpKTsKKwkJak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2hlbHBfYWJvdXRfdHJpZ2dlciIpKSk7CisJCWpNZW51SGVscEFib3V0UmVzb3VyY2VCdW5kbGVNYW5hZ2VyLnNldEFjY2VsZXJhdG9yKEtleVN0cm9rZS5nZXRLZXlTdHJva2UoCisJCQkJS2V5RXZlbnQuVktfSCwgQWN0aW9uRXZlbnQuQ1RSTF9NQVNLKSk7CisJCWpNZW51SGVscEFib3V0UmVzb3VyY2VCdW5kbGVNYW5hZ2VyLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwl9CisJCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0S2V5RXZlbnRLZXkoU3RyaW5nIGNoYXJhY3RlcikgeworCQlpZiAoY2hhcmFjdGVyID09IG51bGwpIHJldHVybiBLZXlFdmVudC5WS19BOworCQljaGFyYWN0ZXIgPSBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTsKKwkKKwkJaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJBIikpIHJldHVybiBLZXlFdmVudC5WS19BOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiQiIpKSByZXR1cm4gS2V5RXZlbnQuVktfQjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkMiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0M7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJEIikpIHJldHVybiBLZXlFdmVudC5WS19EOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiRSIpKSByZXR1cm4gS2V5RXZlbnQuVktfRTsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkYiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0Y7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJHIikpIHJldHVybiBLZXlFdmVudC5WS19HOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiSCIpKSByZXR1cm4gS2V5RXZlbnQuVktfSDsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkkiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0k7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJKIikpIHJldHVybiBLZXlFdmVudC5WS19KOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiSyIpKSByZXR1cm4gS2V5RXZlbnQuVktfSzsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkwiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0w7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJNIikpIHJldHVybiBLZXlFdmVudC5WS19NOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiTiIpKSByZXR1cm4gS2V5RXZlbnQuVktfTjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIk8iKSkgcmV0dXJuIEtleUV2ZW50LlZLX087CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJQIikpIHJldHVybiBLZXlFdmVudC5WS19QOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiUSIpKSByZXR1cm4gS2V5RXZlbnQuVktfUTsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlIiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1I7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJTIikpIHJldHVybiBLZXlFdmVudC5WS19TOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiVCIpKSByZXR1cm4gS2V5RXZlbnQuVktfVDsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlUiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1U7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJWIikpIHJldHVybiBLZXlFdmVudC5WS19WOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiVyIpKSByZXR1cm4gS2V5RXZlbnQuVktfVzsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlgiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1g7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJZIikpIHJldHVybiBLZXlFdmVudC5WS19ZOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiWiIpKSByZXR1cm4gS2V5RXZlbnQuVktfWjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjAiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzA7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCIxIikpIHJldHVybiBLZXlFdmVudC5WS18xOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiMiIpKSByZXR1cm4gS2V5RXZlbnQuVktfMjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjMiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzM7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCI0IikpIHJldHVybiBLZXlFdmVudC5WS180OworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiNSIpKSByZXR1cm4gS2V5RXZlbnQuVktfNTsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjYiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzY7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCI3IikpIHJldHVybiBLZXlFdmVudC5WS183OworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiOCIpKSByZXR1cm4gS2V5RXZlbnQuVktfODsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjkiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzk7CisKKwkJcmV0dXJuIEtleUV2ZW50LlZLX0E7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlByb2plY3RJdGVtUGFuZWwuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJQcm9qZWN0SXRlbVBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxZGYzNQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJQcm9qZWN0SXRlbVBhbmVsLmphdmEKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqLworY2xhc3MgUkJQcm9qZWN0SXRlbVBhbmVsIGV4dGVuZHMgSlBhbmVsIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXIgeworCVJCTWFuYWdlckdVSSBndWk7CisJCisJLy8gVmlzdWFsIENvbXBvbmVudHMKKwlCb3ggbWFpbkJveDsKKwlKVGV4dEZpZWxkIGl0ZW1GaWVsZHNbXTsKKwlKTGFiZWwgICAgIGl0ZW1MYWJlbHNbXTsKKwlKQnV0dG9uICAgIGNvbW1pdEJ1dHRvbnNbXTsKKwlKQnV0dG9uICAgIGNvbW1pdEJ1dHRvbjsKKwlKTGFiZWwgICAgIHRpdGxlTGFiZWw7CisJSkxhYmVsICAgICBrZXlMYWJlbDsKKwlKTGFiZWwgICAgIGNvbW1lbnRMYWJlbDsKKwkKKwlwdWJsaWMgUkJQcm9qZWN0SXRlbVBhbmVsKFJCTWFuYWdlckdVSSBndWkpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5ndWkgPSBndWk7CisJCWluaXRDb21wb25lbnRzKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQlKQnV0dG9uIGJ1dHRvbiA9IChKQnV0dG9uKWV2LmdldFNvdXJjZSgpOworCQlTdHJpbmcgYnV0dG9uTmFtZSA9IGJ1dHRvbi5nZXROYW1lKCk7CisJCWlmIChidXR0b25OYW1lID09IG51bGwpIHsKKwkJCS8vIFNhdmUgYWxsIGNvbXBvbmVudHMKKwkJCVJCTWFuYWdlciBidW5kbGUgPSBndWkuZ2V0U2VsZWN0ZWRQcm9qZWN0QnVuZGxlKCk7CisJCQlWZWN0b3IgYnVuZGxlcyA9IGJ1bmRsZS5nZXRCdW5kbGVzKCk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBpdGVtRmllbGRzLmxlbmd0aDsgaSsrKSB7CisJCQkJU3RyaW5nIGVuY29kaW5nID0gY29tbWl0QnV0dG9uc1tpXS5nZXROYW1lKCk7CisJCQkJU3RyaW5nIHRyYW5zbGF0aW9uID0gaXRlbUZpZWxkc1tpXS5nZXRUZXh0KCk7CisJCQkJU3RyaW5nIGtleSA9IGl0ZW1GaWVsZHNbaV0uZ2V0TmFtZSgpOworCQkJCWZvciAoaW50IGo9MDsgaiA8IGJ1bmRsZXMuc2l6ZSgpOyBqKyspIHsKKwkJCQkJQnVuZGxlIHJidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGopOworCQkJCQlpZiAocmJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoZW5jb2RpbmcpKSB7CisJCQkJCQlCdW5kbGVJdGVtIGl0ZW0gPSByYnVuZGxlLmdldEJ1bmRsZUl0ZW0oa2V5KTsKKwkJCQkJCWlmIChpdGVtICE9IG51bGwpIGl0ZW0uc2V0VHJhbnNsYXRpb24odHJhbnNsYXRpb24pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlndWkuc2F2ZVJlc291cmNlcyhidW5kbGUpOworCQl9IGVsc2UgeworCQkJLy8gU2F2ZSBhIHBhcnRpY3VsYXIgZW5jb2RpbmcKKwkJCVN0cmluZyBlbmNvZGluZyA9IGJ1dHRvbk5hbWU7CisJCQlSQk1hbmFnZXIgYnVuZGxlID0gZ3VpLmdldFNlbGVjdGVkUHJvamVjdEJ1bmRsZSgpOworCQkJaW50IGluZGV4ID0gLTE7CisJCQlmb3IgKGludCBpPTA7IGkgPCBjb21taXRCdXR0b25zLmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKGNvbW1pdEJ1dHRvbnNbaV0gPT0gYnV0dG9uKSB7CisJCQkJCWluZGV4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJU3RyaW5nIHRyYW5zbGF0aW9uID0gaXRlbUZpZWxkc1tpbmRleF0uZ2V0VGV4dCgpOworCQkJU3RyaW5nIGtleSA9IGl0ZW1GaWVsZHNbaW5kZXhdLmdldE5hbWUoKTsKKwkJCVZlY3RvciBidW5kbGVzID0gYnVuZGxlLmdldEJ1bmRsZXMoKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKwkJCQlCdW5kbGUgcmJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisJCQkJaWYgKHJidW5kbGUuZW5jb2RpbmcuZXF1YWxzKGVuY29kaW5nKSkgeworCQkJCQlCdW5kbGVJdGVtIGl0ZW0gPSByYnVuZGxlLmdldEJ1bmRsZUl0ZW0oa2V5KTsKKwkJCQkJaWYgKGl0ZW0gIT0gbnVsbCkgeworCQkJCQkJaXRlbS5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbik7CisJCQkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIlNldCB0cmFuc2xhdGlvbiB0byA6ICIgKyB0cmFuc2xhdGlvbik7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJJdGVtIHdhcyBudWxsIik7CisJCQkJCWJyZWFrOworCQkJCX0gCisJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJDb21wYXJlZCAiICsgcmJ1bmRsZS5lbmNvZGluZyArICIgd2l0aCAiICsgZW5jb2RpbmcpOworCQkJfQorCQkJZ3VpLnNhdmVSZXNvdXJjZXMoYnVuZGxlLCBlbmNvZGluZyk7CisJCX0KKwkJdXBkYXRlQ29tcG9uZW50cygpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7CisJCXNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQlKUGFuZWwgdG9wUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBHcmlkTGF5b3V0KDIsMSkpOworCQl0aXRsZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfZGVmYXVsdF90aXRsZSIpLCBTd2luZ0NvbnN0YW50cy5DRU5URVIpOworCQl0aXRsZUxhYmVsLnNldEZvbnQobmV3IEZvbnQoInNlcmlmIixGb250LkJPTEQsMTgpKTsKKwkJSlBhbmVsIGNvbW1lbnRQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEdyaWRMYXlvdXQoMiwxKSk7CisJCUpMYWJlbCBjb21tZW50TGFiZWwyID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfY29tbWVudCIpLCBTd2luZ0NvbnN0YW50cy5MRUZUKTsKKwkJY29tbWVudExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfY29tbWVudF9ub25lIiksIFN3aW5nQ29uc3RhbnRzLkxFRlQpOworCQljb21tZW50UGFuZWwuYWRkKGNvbW1lbnRMYWJlbDIpOworCQljb21tZW50UGFuZWwuYWRkKGNvbW1lbnRMYWJlbCk7CisJCXRvcFBhbmVsLmFkZCh0aXRsZUxhYmVsKTsKKwkJdG9wUGFuZWwuYWRkKGNvbW1lbnRQYW5lbCk7CisJCUpQYW5lbCBjZW50ZXJQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEJvcmRlckxheW91dCgpKTsKKwkJbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCUpTY3JvbGxQYW5lIHNjcm9sbFBhbmUgPSBuZXcgSlNjcm9sbFBhbmUobWFpbkJveCwKKwkJCQkJCQkJCQkJCVNjcm9sbFBhbmVDb25zdGFudHMuVkVSVElDQUxfU0NST0xMQkFSX0FTX05FRURFRCwKKwkJCQkJCQkJCQkJCVNjcm9sbFBhbmVDb25zdGFudHMuSE9SSVpPTlRBTF9TQ1JPTExCQVJfQVNfTkVFREVEKTsKKwkJY2VudGVyUGFuZWwuYWRkKHNjcm9sbFBhbmUsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCWNlbnRlclBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpKTsKKwkJSlBhbmVsIGJvdFBhbmVsID0gbmV3IEpQYW5lbChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LlJJR0hUKSk7CisJCWNvbW1pdEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9jb21taXRfYnV0dG9uX2FsbCIpKTsKKwkJY29tbWl0QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQlib3RQYW5lbC5hZGQoY29tbWl0QnV0dG9uKTsKKwkJYWRkKHRvcFBhbmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQlhZGQoY2VudGVyUGFuZWwsIEJvcmRlckxheW91dC5DRU5URVIpOworCQlhZGQoYm90UGFuZWwsIEJvcmRlckxheW91dC5TT1VUSCk7CisJCQorCQl1cGRhdGVDb21wb25lbnRzKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbXBvbmVudHMoKSB7CisJCUJ1bmRsZUl0ZW0gaXRlbSA9IGd1aS5nZXRTZWxlY3RlZFByb2plY3RCdW5kbGVJdGVtKCk7CisJCQorCQlpZiAoaXRlbSA9PSBudWxsKSB7CisJCQljb21tZW50TGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfY29tbWVudF9ub25lIikpOworCQkJdGl0bGVMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlIikpOworCQkJaXRlbUZpZWxkcyA9IG51bGw7CisJCQlpdGVtTGFiZWxzID0gbnVsbDsKKwkJCWNvbW1pdEJ1dHRvbnMgPSBudWxsOworCQkJY29tbWl0QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQl9IGVsc2UgeworCQkJU3RyaW5nIGNvbW1lbnQgPSBpdGVtLmdldENvbW1lbnQoKTsKKwkJCVN0cmluZyBrZXkgPSBpdGVtLmdldEtleSgpOworCQkJY29tbWVudExhYmVsLnNldFRleHQoY29tbWVudCk7CisJCQl0aXRsZUxhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJwcm9qZWN0X3BhbmVsX3RpdGxlIiwga2V5KSk7CisJCQkKKwkJCVJCTWFuYWdlciBtYW5hZ2VyID0gZ3VpLmdldFNlbGVjdGVkUHJvamVjdEJ1bmRsZSgpOworCQkJVmVjdG9yIGJ1bmRsZXMgPSBtYW5hZ2VyLmdldEJ1bmRsZXMoKTsKKwkJCWl0ZW1GaWVsZHMgPSBuZXcgSlRleHRGaWVsZFtidW5kbGVzLnNpemUoKV07CisJCQlpdGVtTGFiZWxzID0gbmV3IEpMYWJlbFtidW5kbGVzLnNpemUoKV07CisJCQljb21taXRCdXR0b25zID0gbmV3IEpCdXR0b25bYnVuZGxlcy5zaXplKCldOworCQkJZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworCQkJCUJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworCQkJCUJ1bmRsZUl0ZW0gYnVuZGxlSXRlbSA9IGJ1bmRsZS5nZXRCdW5kbGVJdGVtKGtleSk7CisJCQkJLy9ib29sZWFuIHRyYW5zbGF0ZWQgPSBidW5kbGVJdGVtLmlzVHJhbnNsYXRlZCgpOworCQkJCUpMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfYnVuZGxlIiwgYnVuZGxlLnRvU3RyaW5nKCkpLAorCQkJCQkJCQkJCQkJICBTd2luZ0NvbnN0YW50cy5MRUZUKTsKKwkJCQlpZiAoYnVuZGxlSXRlbSA9PSBudWxsIHx8ICFidW5kbGVJdGVtLmlzVHJhbnNsYXRlZCgpKSB7CisJCQkJICAgIGVuY29kaW5nTGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfYnVuZGxlX3VudHJhbnNsYXRlZCIsCisJCQkJCQkJCQkJCQkJCQkJCWJ1bmRsZS50b1N0cmluZygpKSk7CisJCQkJfQorCQkJCVN0cmluZyBmaWVsZFRleHQgPSAoYnVuZGxlSXRlbSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJwcm9qZWN0X3BhbmVsX2l0ZW1faW5oZXJpdHMiKSA6CisJCQkJCQkJCQkJCQkJCSBidW5kbGVJdGVtLmdldFRyYW5zbGF0aW9uKCkpOworCQkJCUpUZXh0RmllbGQgaXRlbUZpZWxkID0gbmV3IEpUZXh0RmllbGQoZmllbGRUZXh0KTsKKwkJCQlpdGVtRmllbGQuc2V0TWF4aW11bVNpemUobmV3IERpbWVuc2lvbih0aGlzLmdldFNpemUoKS53aWR0aC0xNTAsIDIwMCkpOworCQkJCWl0ZW1GaWVsZC5zZXROYW1lKGtleSk7CisJCQkJSkJ1dHRvbiBjb21taXRJdGVtQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b24iKSk7CisJCQkJY29tbWl0SXRlbUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQljb21taXRJdGVtQnV0dG9uLnNldE5hbWUoYnVuZGxlLmVuY29kaW5nKTsKKwkJCQlpdGVtRmllbGRzW2ldID0gaXRlbUZpZWxkOworCQkJCWl0ZW1MYWJlbHNbaV0gPSBlbmNvZGluZ0xhYmVsOworCQkJCWNvbW1pdEJ1dHRvbnNbaV0gPSBjb21taXRJdGVtQnV0dG9uOworCQkJfQorCQkJY29tbWl0QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCX0KKwkJCisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCWlmIChpdGVtRmllbGRzICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGl0ZW1GaWVsZHMubGVuZ3RoOyBpKyspIHsKKwkJCQlKUGFuZWwgYnVuZGxlUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQkJYnVuZGxlUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlTGluZUJvcmRlcihDb2xvci5kYXJrR3JheSkpOworCQkJCWJ1bmRsZVBhbmVsLmFkZChpdGVtTGFiZWxzW2ldLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQkJCWJ1bmRsZVBhbmVsLmFkZChpdGVtRmllbGRzW2ldLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCQlidW5kbGVQYW5lbC5hZGQoY29tbWl0QnV0dG9uc1tpXSwgQm9yZGVyTGF5b3V0LkVBU1QpOworCQkJCW1haW5Cb3guYWRkKGJ1bmRsZVBhbmVsKTsKKwkJCX0KKwkJfQorCQkKKwkJcmV2YWxpZGF0ZSgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlNlYXJjaFBhbmVsLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU2VhcmNoUGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzdmZDUwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlNlYXJjaFBhbmVsLmphdmEKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIFRoZSBjbGFzcyB1c2VkIHRvIGRpc3BsYXkgdW50cmFuc2xhdGVkIGl0ZW1zCisgKi8KK2NsYXNzIFJCU2VhcmNoUGFuZWwgZXh0ZW5kcyBKUGFuZWwgeworCVJCTWFuYWdlciByYm07CisJQnVuZGxlIGJ1bmRsZTsKKwlSQk1hbmFnZXJHVUkgbGlzdGVuZXI7CisJCisJLy8gQ29tcG9uZW50cworCUpMYWJlbCB0aXRsZUxhYmVsICAgICAgID0gbmV3IEpMYWJlbCgpOworCUpMYWJlbCBmaW5kTGFiZWwgICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInNlYXJjaF9maW5kIikpOworCUpMYWJlbCByZXBsYWNlTGFiZWwgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInNlYXJjaF9yZXBsYWNlIikpOworCQorCUpUZXh0RmllbGQgZmluZEZpZWxkICAgID0gbmV3IEpUZXh0RmllbGQoKTsKKwlKVGV4dEZpZWxkIHJlcGxhY2VGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKCk7CisJCisJSkNoZWNrQm94IGtleXNDaGVjayAgICAgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoX2tleXMiKSwgZmFsc2UpOworCUpDaGVja0JveCB0cmFuc0NoZWNrICAgID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInNlYXJjaF92YWx1ZXMiKSwgdHJ1ZSk7CisJSkNoZWNrQm94IGNvbW1lbnRzQ2hlY2sgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoX2NvbW1lbnRzIiksIGZhbHNlKTsKKwlKQ2hlY2tCb3ggY2FzZUNoZWNrICAgICA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJzZWFyY2hfY2FzZV9zZW5zaXRpdmUiKSwgZmFsc2UpOworCQorCUpCdXR0b24gZmluZEJ1dHRvbiAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fc2VhcmNoX2ZpbmRfYWxsIikpOworCUpCdXR0b24gcmVwbGFjZUJ1dHRvbiAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsIikpOworCQorCVNlYXJjaEl0ZW1zVGFibGVNb2RlbCAgICAgbW9kZWw7CisJSlRhYmxlICAgICAgICAgICAgICAgICAgICB0YWJsZTsKKwlKU2Nyb2xsUGFuZSAgICAgICAgICAgICAgIHRhYmxlU2Nyb2xsOworCQorCXB1YmxpYyBSQlNlYXJjaFBhbmVsKFJCTWFuYWdlckdVSSBndWkpIHsKKwkJc3VwZXIoKTsKKwkJbGlzdGVuZXIgPSBndWk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldEJ1bmRsZShCdW5kbGUgYikgeworCQlyYm0gPSBudWxsOworCQlpZiAoYnVuZGxlID09IG51bGwpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKGJ1bmRsZSAhPSBiKSB7CisJCQlidW5kbGUgPSBiOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHNldE1hbmFnZXIoUkJNYW5hZ2VyIG0pIHsKKwkJYnVuZGxlID0gbnVsbDsKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlyYm0gPSBtOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbSkgeworCQkJcmJtID0gbTsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50cygpIHsKKwkJaWYgKHJibSAhPSBudWxsIHx8IGJ1bmRsZSAhPSBudWxsKSB7CisJCQlyYm0gPSBudWxsOworCQkJYnVuZGxlID0gbnVsbDsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcGVyZm9ybVNlYXJjaCgpIHsKKwkJU3RyaW5nIHNlYXJjaF90ZXJtID0gZmluZEZpZWxkLmdldFRleHQoKS50cmltKCk7CisJCWlmIChzZWFyY2hfdGVybS5sZW5ndGgoKSA8IDEpIHJldHVybjsKKwkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7CisJCQlwZXJmb3JtU2VhcmNoKHNlYXJjaF90ZXJtLCBidW5kbGUsIGNhc2VDaGVjay5pc1NlbGVjdGVkKCkpOworCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQlwZXJmb3JtU2VhcmNoKHNlYXJjaF90ZXJtLCAoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZWxlbWVudEF0KDApLCBjYXNlQ2hlY2suaXNTZWxlY3RlZCgpKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgcGVyZm9ybVNlYXJjaChTdHJpbmcgdGVybSwgQnVuZGxlIGJ1bmRsZSwgYm9vbGVhbiBjYXNlX3NlbnNpdGl2ZSkgeworCQlWZWN0b3IgcmV0X3YgPSBuZXcgVmVjdG9yKCk7CisJCUVudW1lcmF0aW9uIGtleXMgPSBidW5kbGUuYWxsSXRlbXMua2V5cygpOworCQl3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworCQkJQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pYnVuZGxlLmFsbEl0ZW1zLmdldChrZXkpOworCQkJaWYgKGNhc2Vfc2Vuc2l0aXZlKSB7CisJCQkJaWYgKGtleXNDaGVjay5pc1NlbGVjdGVkKCkgJiYga2V5LmluZGV4T2YodGVybSkgPj0gMCkgeworCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQljb250aW51ZTsKKwkJCQl9IC8vIGVuZCBpZiAtIGtleXMKKwkJCQlpZiAodHJhbnNDaGVjay5pc1NlbGVjdGVkKCkgJiYgaXRlbS5nZXRUcmFuc2xhdGlvbigpLmluZGV4T2YodGVybSkgPj0gMCkgeworCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQljb250aW51ZTsKKwkJCQl9IC8vIGVuZCBpZiAtIHRyYW5zbGF0aW9ucworCQkJCWlmIChjb21tZW50c0NoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCQlpZiAoaXRlbS5nZXRDb21tZW50KCkuaW5kZXhPZih0ZXJtKSA+PSAwKSB7CisJCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJSGFzaHRhYmxlIGxvb2t1cHMgPSBpdGVtLmdldExvb2t1cHMoKTsKKwkJCQkJRW51bWVyYXRpb24gZW51bTIgPSBsb29rdXBzLmtleXMoKTsKKwkJCQkJd2hpbGUgKGVudW0yLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQkJCQlTdHJpbmcgbG9va3VwX2tleSA9IChTdHJpbmcpZW51bTIubmV4dEVsZW1lbnQoKTsKKwkJCQkJCVN0cmluZyBsb29rdXBfdmFsdWUgPSAoU3RyaW5nKWxvb2t1cHMuZ2V0KGxvb2t1cF9rZXkpOworCQkJCQkJaWYgKGxvb2t1cF92YWx1ZS5pbmRleE9mKHRlcm0pID49IDApIHsKKwkJCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9IC8vIGVuZCB3aGlsZQorCQkJCX0gLy8gZW5kIGlmIC0gY29tbWVudHMKKwkJCX0gZWxzZSB7CisJCQkJLy8gTm90IGNhc2Ugc2Vuc2l0aXZlCQorCQkJCWlmIChrZXlzQ2hlY2suaXNTZWxlY3RlZCgpICYmIGtleS50b1VwcGVyQ2FzZSgpLmluZGV4T2YodGVybS50b1VwcGVyQ2FzZSgpKSA+PSAwKSB7CisJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gLy8gZW5kIGlmIC0ga2V5cworCQkJCWlmICh0cmFuc0NoZWNrLmlzU2VsZWN0ZWQoKSAmJiBpdGVtLmdldFRyYW5zbGF0aW9uKCkudG9VcHBlckNhc2UoKS5pbmRleE9mKHRlcm0udG9VcHBlckNhc2UoKSkgPj0gMCkgeworCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQljb250aW51ZTsKKwkJCQl9IC8vIGVuZCBpZiAtIHRyYW5zbGF0aW9ucworCQkJCWlmIChjb21tZW50c0NoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCQlpZiAoaXRlbS5nZXRDb21tZW50KCkudG9VcHBlckNhc2UoKS5pbmRleE9mKHRlcm0udG9VcHBlckNhc2UoKSkgPj0gMCkgeworCQkJCQkJcmV0X3YuYWRkRWxlbWVudChpdGVtKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCUhhc2h0YWJsZSBsb29rdXBzID0gaXRlbS5nZXRMb29rdXBzKCk7CisJCQkJCUVudW1lcmF0aW9uIGVudW0yID0gbG9va3Vwcy5rZXlzKCk7CisJCQkJCXdoaWxlIChlbnVtMi5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJCQkJU3RyaW5nIGxvb2t1cF9rZXkgPSAoU3RyaW5nKWVudW0yLm5leHRFbGVtZW50KCk7CisJCQkJCQlTdHJpbmcgbG9va3VwX3ZhbHVlID0gKFN0cmluZylsb29rdXBzLmdldChsb29rdXBfa2V5KTsKKwkJCQkJCWlmIChsb29rdXBfdmFsdWUudG9VcHBlckNhc2UoKS5pbmRleE9mKHRlcm0udG9VcHBlckNhc2UoKSkgPj0gMCkgeworCQkJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0gLy8gZW5kIHdoaWxlCisJCQkJfSAvLyBlbmQgaWYgLSBjb21tZW50cworCQkJfQorCQl9IC8vIGVuZCB3aGlsZQorCQltb2RlbC5zZXRJdGVtcyhyZXRfdik7CisJCW1vZGVsLnVwZGF0ZSgpOworCX0KKwkKKwlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtUmVwbGFjZSgpIHsKKwkJU3RyaW5nIHNlYXJjaF90ZXJtID0gZmluZEZpZWxkLmdldFRleHQoKS50cmltKCk7CisJCVN0cmluZyByZXBsYWNlX3Rlcm0gPSByZXBsYWNlRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJcGVyZm9ybVNlYXJjaCgpOworCQlpZiAoc2VhcmNoX3Rlcm0ubGVuZ3RoKCkgPCAxIHx8IHJlcGxhY2VfdGVybS5sZW5ndGgoKSA8IDEpIHJldHVybjsKKwkJaWYgKGtleXNDaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsCisJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9ub19rZXlfcmVwbGFjZSIpLAorCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigid2FybmluZyIpLCBKT3B0aW9uUGFuZS5XQVJOSU5HX01FU1NBR0UpOworCQl9CisJCVZlY3RvciBpdGVtcyA9IG1vZGVsLmdldEJ1bmRsZUl0ZW1zKCk7CisJCWZvciAoaW50IGk9MDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisJCQlCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5lbGVtZW50QXQoaSk7CisJCQlpZiAodHJhbnNDaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCQlpdGVtLnNldFRyYW5zbGF0aW9uKHJlcGxhY2UoaXRlbS5nZXRUcmFuc2xhdGlvbigpLCBzZWFyY2hfdGVybSwgcmVwbGFjZV90ZXJtKSk7CisJCQl9CisJCQlpZiAoY29tbWVudHNDaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCQlpdGVtLnNldENvbW1lbnQocmVwbGFjZShpdGVtLmdldENvbW1lbnQoKSwgc2VhcmNoX3Rlcm0sIHJlcGxhY2VfdGVybSkpOworCQkJfQorCQl9CisJCW1vZGVsLnVwZGF0ZSgpOworCX0KKwkKKwkvLyBSZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIG1hdGNoIGluIG9yaWdpbmFsIHdpdGggcmVwbGFjZQorCQorCXByaXZhdGUgU3RyaW5nIHJlcGxhY2UoU3RyaW5nIG9yaWdpbmFsLCBTdHJpbmcgbWF0Y2gsIFN0cmluZyByZXBsYWNlKSB7CisJCWludCBjdXJyZW50X2luZGV4ID0gLTE7CisJCXdoaWxlIChvcmlnaW5hbC5pbmRleE9mKG1hdGNoLCsrY3VycmVudF9pbmRleCkgPj0gMCkgeworCQkJY3VycmVudF9pbmRleCA9IG9yaWdpbmFsLmluZGV4T2YobWF0Y2gsIGN1cnJlbnRfaW5kZXgpOworCQkJb3JpZ2luYWwgPSBvcmlnaW5hbC5zdWJzdHJpbmcoMCxjdXJyZW50X2luZGV4KSArIHJlcGxhY2UgKworCQkJCQkgICBvcmlnaW5hbC5zdWJzdHJpbmcoY3VycmVudF9pbmRleCttYXRjaC5sZW5ndGgoKSwgb3JpZ2luYWwubGVuZ3RoKCkpOworCQl9CisJCXJldHVybiBvcmlnaW5hbDsKKwl9CisJCisJcHVibGljIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7CisJCS8vIEluaXRpYWxpemUgY29tcG9uZW50cworCQlpZiAoYnVuZGxlICE9IG51bGwpIHsKKwkJCXRpdGxlTGFiZWwuc2V0VGV4dChidW5kbGUubmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCXRpdGxlTGFiZWwuc2V0VGV4dChyYm0uZ2V0QmFzZUNsYXNzKCkgKyAiIC0gIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoIikpOworCQl9CisJCW1vZGVsID0gbmV3IFNlYXJjaEl0ZW1zVGFibGVNb2RlbChuZXcgVmVjdG9yKCkpOworCQkKKwkJdGl0bGVMYWJlbC5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLEZvbnQuUExBSU4sMTgpKTsKKwkJCisJCXJlbW92ZUFsbCgpOworCQlzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJdGFibGUgPSBuZXcgSlRhYmxlKG1vZGVsKTsKKwkJdGFibGVTY3JvbGwgPSBuZXcgSlNjcm9sbFBhbmUodGFibGUpOworCQkKKwkJdGFibGUuc2V0U2VsZWN0aW9uTW9kZShMaXN0U2VsZWN0aW9uTW9kZWwuU0lOR0xFX0lOVEVSVkFMX1NFTEVDVElPTik7CisJCXRhYmxlLmFkZE1vdXNlTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJRGltZW5zaW9uIGRpbSA9IG5ldyBEaW1lbnNpb24oNzUsMTUpOworCQkKKwkJZmluZEZpZWxkLnNldENvbHVtbnMoMjApOworCQlyZXBsYWNlRmllbGQuc2V0Q29sdW1ucygyMCk7CisJCWZpbmRMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGRpbSk7CisJCXJlcGxhY2VMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGRpbSk7CisJCQorCQlKUGFuZWwgaW5uZXJQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEJvcmRlckxheW91dCgpKTsKKwkJSlBhbmVsIHNvdXRoUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCB3ZXN0UGFuZWwxID0gbmV3IEpQYW5lbChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkxFRlQpKTsKKwkJSlBhbmVsIHdlc3RQYW5lbDIgPSBuZXcgSlBhbmVsKG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlCb3ggcmlnaHRCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlCb3ggbGVmdEJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQorCQkvLyBBZGQgYWN0aW9uIGxpc3RlbmVycworCQlmaW5kQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJcGVyZm9ybVNlYXJjaCgpOworCQkJfQorCQl9KTsKKwkJCisJCXJlcGxhY2VCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlwZXJmb3JtUmVwbGFjZSgpOworCQkJfQorCQl9KTsKKwkJCisJCWZpbmRCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9zZWFyY2hfZmluZF9hbGxfdHJpZ2dlciIpKSk7CisJCXJlcGxhY2VCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGxfdHJpZ2dlciIpKSk7CisJCQorCQkvLyBQbGFjZSBjb21wb25lbnRzCisJCXdlc3RQYW5lbDEuYWRkKGZpbmRMYWJlbCk7CisJCXdlc3RQYW5lbDEuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQl3ZXN0UGFuZWwxLmFkZChmaW5kRmllbGQpOworCQkKKwkJd2VzdFBhbmVsMi5hZGQocmVwbGFjZUxhYmVsKTsKKwkJd2VzdFBhbmVsMi5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCXdlc3RQYW5lbDIuYWRkKHJlcGxhY2VGaWVsZCk7CisJCQorCQlsZWZ0Qm94LmFkZChCb3guY3JlYXRlVmVydGljYWxHbHVlKCkpOworCQlsZWZ0Qm94LmFkZCh3ZXN0UGFuZWwxKTsKKwkJbGVmdEJveC5hZGQod2VzdFBhbmVsMik7CisJCS8vbGVmdEJveC5hZGQoY2FzZUNoZWNrKTsKKwkJCisJCXJpZ2h0Qm94LmFkZChrZXlzQ2hlY2spOworCQlyaWdodEJveC5hZGQodHJhbnNDaGVjayk7CisJCXJpZ2h0Qm94LmFkZChjb21tZW50c0NoZWNrKTsKKwkJCisJCXNvdXRoUGFuZWwuYWRkKGZpbmRCdXR0b24pOworCQlzb3V0aFBhbmVsLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJc291dGhQYW5lbC5hZGQocmVwbGFjZUJ1dHRvbik7CisJCXNvdXRoUGFuZWwuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoMTApKTsKKwkJc291dGhQYW5lbC5hZGQoY2FzZUNoZWNrKTsKKwkJCisJCWlubmVyUGFuZWwuYWRkKHRpdGxlTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCWlubmVyUGFuZWwuYWRkKGxlZnRCb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQlpbm5lclBhbmVsLmFkZChyaWdodEJveCwgQm9yZGVyTGF5b3V0LkVBU1QpOworCQlpbm5lclBhbmVsLmFkZChzb3V0aFBhbmVsLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQkKKwkJYWRkKGlubmVyUGFuZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCWFkZCh0YWJsZVNjcm9sbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCisJCWlmIChyYm0gPT0gbnVsbCAmJiBidW5kbGUgPT0gbnVsbCkgeworCQkJcmVtb3ZlQWxsKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlQ29tcG9uZW50cygpIHsKKwkJCisJfQorfQorCisvLyBUaGUgdGFibGUgbW9kZWwgZm9yIHNlYXJjaGVkIEl0ZW1zCisKK2NsYXNzIFNlYXJjaEl0ZW1zVGFibGVNb2RlbCBleHRlbmRzIEFic3RyYWN0VGFibGVNb2RlbCB7CisJVmVjdG9yIGl0ZW1zOworCQorCXB1YmxpYyBTZWFyY2hJdGVtc1RhYmxlTW9kZWwoVmVjdG9yIGl0ZW1zKSB7CisJCXRoaXMuaXRlbXMgPSBpdGVtczsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0SXRlbXMoVmVjdG9yIGl0ZW1zKSB7CisJCXRoaXMuaXRlbXMgPSBpdGVtczsKKwl9CisJCisJcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpIHsgcmV0dXJuIDM7IH0KKwkJICAgIAorCXB1YmxpYyBpbnQgZ2V0Um93Q291bnQoKSB7CisJCXJldHVybiBpdGVtcy5zaXplKCk7CisJfQorCQorCXB1YmxpYyBPYmplY3QgZ2V0VmFsdWVBdChpbnQgcm93LCBpbnQgY29sKSB7CisJCUJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLmVsZW1lbnRBdChyb3cpOworCQlTdHJpbmcgcmV0U3RyID0gbnVsbDsKKwkJCQkKKwkJc3dpdGNoKGNvbCkgeworCQljYXNlIDA6CisJCQlyZXRTdHIgPSBpdGVtLmdldEtleSgpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJldFN0ciA9IGl0ZW0uZ2V0VHJhbnNsYXRpb24oKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyZXRTdHIgPSAoaXRlbS5nZXRQYXJlbnRHcm91cCgpID09IG51bGwgPyAiIiA6IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRTdHIgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYmxlX2NlbGxfZXJyb3IiKTsKKwkJfQorCQkJCQorCQlyZXR1cm4gcmV0U3RyOworCX0KKwkJCQorCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uTmFtZShpbnQgY29sKSB7CisJCWlmIChjb2wgPT0gMCkgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9rZXkiKTsKKwkJZWxzZSBpZiAoY29sID09IDEpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19jb2x1bW5fdHJhbnNsYXRpb24iKTsKKwkJZWxzZSBpZiAoY29sID09IDIpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19jb2x1bW5fZ3JvdXAiKTsKKwkJZWxzZSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJsZV9jb2x1bW5fZXJyb3IiKTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW0gZ2V0QnVuZGxlSXRlbShpbnQgcm93KSB7CisJCXJldHVybiAoQnVuZGxlSXRlbSlpdGVtcy5lbGVtZW50QXQocm93KTsKKwl9CisJCisJcHVibGljIFZlY3RvciBnZXRCdW5kbGVJdGVtcygpIHsKKwkJcmV0dXJuIGl0ZW1zOworCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisJCWZpcmVUYWJsZURhdGFDaGFuZ2VkKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlN0YXRpc3RpY3NQYW5lbC5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlN0YXRpc3RpY3NQYW5lbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYzhlMzMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU3RhdGlzdGljc1BhbmVsLmphdmEKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuSlRleHRDb21wb25lbnQ7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIFRoZSBjbGFzcyB1c2VkIHRvIGRpc3BsYXkgc3RhdGlzdGljcworICovCitjbGFzcyBSQlN0YXRpc3RpY3NQYW5lbCBleHRlbmRzIEpQYW5lbCB7CisJUkJNYW5hZ2VyIHJibTsKKwlCdW5kbGUgYnVuZGxlOworCQorCS8vIENvbXBvbmVudHMgLSBCdW5kbGUKKwlKTGFiZWwgICAgIGpMYWJlbFN0YXRzVGl0bGU7CisJCQorCUpMYWJlbCAgICAgakxhYmVsU3RhdHNOYW1lOworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNDb21tZW50OworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNNYW5hZ2VyOworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNMYW5ndWFnZTsKKwlKTGFiZWwgICAgIGpMYWJlbFN0YXRzQ291bnRyeTsKKwlKTGFiZWwgICAgIGpMYWJlbFN0YXRzVmFyaWFudDsKKwlKTGFiZWwgICAgIGpMYWJlbFN0YXRzTnVtVHJhbnM7CisJSkxhYmVsICAgICBqTGFiZWxTdGF0c051bVVudHJhbnM7CisJCQorCUpUZXh0RmllbGQgalRleHRGaWVsZFN0YXRzTmFtZTsKKwlKVGV4dEZpZWxkIGpUZXh0RmllbGRTdGF0c0NvbW1lbnQ7CisJSlRleHRGaWVsZCBqVGV4dEZpZWxkU3RhdHNNYW5hZ2VyOworCUpUZXh0RmllbGQgalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2U7CisJSlRleHRGaWVsZCBqVGV4dEZpZWxkU3RhdHNDb3VudHJ5OworCUpUZXh0RmllbGQgalRleHRGaWVsZFN0YXRzVmFyaWFudDsKKwkKKwlKQnV0dG9uICAgIHVwZGF0ZUJ1dHRvbjsKKwkKKwlCb3ggICAgICAgIGJveFN0YXRzTGVmdFJpZ2h0MTsKKwlCb3ggICAgICAgIGJveFN0YXRzTGVmdFJpZ2h0MjsKKwkKKwkvLyBDb21wb25lbnRzIC0gYnVuZGxlIG1hbmFnZXIKKwlKTGFiZWwgICAgICB0aXRsZUxhYmVsOworCUpMYWJlbCAgICAgIG51bUZpbGVMYWJlbDsKKwlKTGFiZWwgICAgICBudW1EdXBMYWJlbDsKKwlKTGFiZWwgICAgICBudW1Hcm91cExhYmVsOworCUpMYWJlbCAgICAgIG51bUl0ZW1MYWJlbDsKKwkKKwlKTGlzdCAgICAgICBncm91cExpc3Q7CisJSkxpc3QgICAgICAgZmlsZUxpc3Q7CisJSkxpc3QgICAgICAgZHVwTGlzdDsKKwkKKwlKU2Nyb2xsUGFuZSBncm91cFNjcm9sbDsKKwlKU2Nyb2xsUGFuZSBkdXBTY3JvbGw7CisJSlNjcm9sbFBhbmUgZmlsZVNjcm9sbDsKKwkKKwlKUGFuZWwgICAgICBmaWxlUGFuZWw7CisJSlBhbmVsICAgICAgaXRlbVBhbmVsOworCUpQYW5lbCAgICAgIGdyb3VwUGFuZWw7CisJCisJSkJ1dHRvbiAgICAgZmlsZUJ1dHRvbjsKKwlKQnV0dG9uICAgICBncm91cEJ1dHRvbjsKKwlKQnV0dG9uICAgICBpdGVtQnV0dG9uOworCQorCUJveCAgICAgICAgIG1haW5Cb3g7CisJQm94ICAgICAgICAgZHVwQm94OworCQorCQorCXB1YmxpYyB2b2lkIHNldEJ1bmRsZShCdW5kbGUgYikgeworCQlyYm0gPSBudWxsOworCQlpZiAoYnVuZGxlID09IG51bGwpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKGJ1bmRsZSAhPSBiKSB7CisJCQlidW5kbGUgPSBiOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHNldE1hbmFnZXIoUkJNYW5hZ2VyIG0pIHsKKwkJYnVuZGxlID0gbnVsbDsKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlyYm0gPSBtOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbSkgeworCQkJcmJtID0gbTsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50cygpIHsKKwkJaWYgKHJibSAhPSBudWxsIHx8IGJ1bmRsZSAhPSBudWxsKSB7CisJCQlyYm0gPSBudWxsOworCQkJYnVuZGxlID0gbnVsbDsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0KKwl9CQorCQkKKwlwdWJsaWMgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJLy8gSW5pdGlhbGl6ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJJbml0aWFsaXppbmcgY29tcG9uZW50cyBmb3IgUmVzb3VyY2UgRmlsZSIpOworCQkJaW50IHVudHJhbnNsYXRlZCA9IGJ1bmRsZS5nZXRVbnRyYW5zbGF0ZWRJdGVtc1NpemUoKTsKKwkJCQorCQkJakxhYmVsU3RhdHNUaXRsZSAgICAgICAgICA9IG5ldyBKTGFiZWwoYnVuZGxlLm5hbWUpOworCQkKKwkJCWpMYWJlbFN0YXRzTmFtZSAgICAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c190aXRsZSIpKTsKKwkJCWpMYWJlbFN0YXRzQ29tbWVudCAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c19jb21tZW50IikpOworCQkJakxhYmVsU3RhdHNNYW5hZ2VyICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX21hbmFnZXIiKSk7CisJCQlqTGFiZWxTdGF0c0xhbmd1YWdlICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfbGFuZ3VhZ2UiKSk7CisJCQlqTGFiZWxTdGF0c0NvdW50cnkgICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfY291bnRyeSIpKTsKKwkJCWpMYWJlbFN0YXRzVmFyaWFudCAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c192YXJpYW50IikpOworCQkJakxhYmVsU3RhdHNOdW1UcmFucyAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX2l0ZW1fY291bnQiKSArICIgIiArCisJCQkJCQkJCQkJCQkgICBTdHJpbmcudmFsdWVPZihidW5kbGUuYWxsSXRlbXMuc2l6ZSgpKSk7CisJCQlqTGFiZWxTdGF0c051bVVudHJhbnMgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfdHJhbnNsYXRpb25fY291bnQiKSArIAorCQkJCQkJCQkJCQkJICAgU3RyaW5nLnZhbHVlT2YodW50cmFuc2xhdGVkKSk7CisJCQorCQkJalRleHRGaWVsZFN0YXRzTmFtZSAgICAgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUubmFtZSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bnRpdGxlZCIpIDogYnVuZGxlLm5hbWUpKTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvbW1lbnQgICAgPSBuZXcgSlRleHRGaWVsZCgoYnVuZGxlLmNvbW1lbnQgPT0gbnVsbCA/ICIiIDogYnVuZGxlLmNvbW1lbnQpKTsKKwkJCWpUZXh0RmllbGRTdGF0c01hbmFnZXIgICAgPSBuZXcgSlRleHRGaWVsZCgoYnVuZGxlLm1hbmFnZXIgPT0gbnVsbCA/ICIiIDogYnVuZGxlLm1hbmFnZXIpKTsKKwkJCWpUZXh0RmllbGRTdGF0c0xhbmd1YWdlICAgPSBuZXcgSlRleHRGaWVsZCgoYnVuZGxlLmxhbmd1YWdlID09IG51bGwgPyAiIiA6IGJ1bmRsZS5sYW5ndWFnZSksMjUpOworCQkJalRleHRGaWVsZFN0YXRzQ291bnRyeSAgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUuY291bnRyeSA9PSBudWxsID8gIiIgOiBidW5kbGUuY291bnRyeSksMjUpOworCQkJalRleHRGaWVsZFN0YXRzVmFyaWFudCAgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUudmFyaWFudCA9PSBudWxsID8gIiIgOiBidW5kbGUudmFyaWFudCksMjUpOworCQkKKwkJCWJveFN0YXRzTGVmdFJpZ2h0MSAgICAgICAgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQkJYm94U3RhdHNMZWZ0UmlnaHQyICAgICAgICA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CQorCQkKKwkJCXVwZGF0ZUJ1dHRvbiAgICAgICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl91cGRhdGUiKSk7CisJCQl1cGRhdGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl91cGRhdGVfdHJpZ2dlciIpKSk7CisJCQkKKwkJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQkJakxhYmVsU3RhdHNUaXRsZS5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLEZvbnQuUExBSU4sMTgpKTsKKwkJCQorCQkJQnV0dG9uRW5hYmxlckZvY3VzTGlzdGVuZXIgYmVmbCA9IG5ldyBCdXR0b25FbmFibGVyRm9jdXNMaXN0ZW5lcih1cGRhdGVCdXR0b24pOworCQkJCisJCQkvLyBBZGQgbGlzdGVuZXJzCisJCQl1cGRhdGVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCXVwZGF0ZUJ1bmRsZUluZm8oKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJalRleHRGaWVsZFN0YXRzTmFtZS5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJalRleHRGaWVsZFN0YXRzQ29tbWVudC5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJalRleHRGaWVsZFN0YXRzTWFuYWdlci5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2UuYWRkRm9jdXNMaXN0ZW5lcihiZWZsKTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvdW50cnkuYWRkRm9jdXNMaXN0ZW5lcihiZWZsKTsKKwkJCWpUZXh0RmllbGRTdGF0c1ZhcmlhbnQuYWRkRm9jdXNMaXN0ZW5lcihiZWZsKTsKKwkJCQorCQkJalRleHRGaWVsZFN0YXRzTmFtZS5zZXRDb2x1bW5zKDM1KTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvbW1lbnQuc2V0Q29sdW1ucygzNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNNYW5hZ2VyLnNldENvbHVtbnMoMzUpOworCQkJalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2Uuc2V0Q29sdW1ucygyNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNDb3VudHJ5LnNldENvbHVtbnMoMjUpOworCQkJalRleHRGaWVsZFN0YXRzVmFyaWFudC5zZXRDb2x1bW5zKDI1KTsKKwkJCQorCQkJLy91cGRhdGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkKKwkJCS8vIFVwZGF0ZSB0aGUgZGlzcGxheQorCQkJaWYgKG1haW5Cb3ggIT0gbnVsbCl7CisJCQkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJCX0gZWxzZSB7CisJCQkJbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQl9CisJCQlpZiAoZHVwQm94ICE9IG51bGwpCisJCQkJZHVwQm94LnJlbW92ZUFsbCgpOworCQkJcmVtb3ZlQWxsKCk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c1RpdGxlKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDEwKSk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c05hbWUpOworCQkJbWFpbkJveC5hZGQoalRleHRGaWVsZFN0YXRzTmFtZSk7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c0NvbW1lbnQpOworCQkJbWFpbkJveC5hZGQoalRleHRGaWVsZFN0YXRzQ29tbWVudCk7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c01hbmFnZXIpOworCQkJbWFpbkJveC5hZGQoalRleHRGaWVsZFN0YXRzTWFuYWdlcik7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c0xhbmd1YWdlKTsKKwkJCW1haW5Cb3guYWRkKGpUZXh0RmllbGRTdGF0c0xhbmd1YWdlKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzQ291bnRyeSk7CisJCQltYWluQm94LmFkZChqVGV4dEZpZWxkU3RhdHNDb3VudHJ5KTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzVmFyaWFudCk7CisJCQltYWluQm94LmFkZChqVGV4dEZpZWxkU3RhdHNWYXJpYW50KTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzTnVtVHJhbnMpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkJbWFpbkJveC5hZGQoakxhYmVsU3RhdHNOdW1VbnRyYW5zKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDEwKSk7CisJCQltYWluQm94LmFkZCh1cGRhdGVCdXR0b24pOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworCQkJaWYgKCEoZ2V0TGF5b3V0KCkgaW5zdGFuY2VvZiBGbG93TGF5b3V0KSkgeworCQkJCXNldExheW91dChuZXcgRmxvd0xheW91dCgpKTsKKwkJCX0KKwkJCWFkZChtYWluQm94KTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbnVsbCkgeworCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJJbml0aWFsaXppbmcgY29tcG9uZW50cyBmb3IgUmVzb3VyY2UgQnVuZGxlIik7CisJCQl0aXRsZUxhYmVsICAgICAgICAgID0gbmV3IEpMYWJlbChyYm0uZ2V0QmFzZUNsYXNzKCkgKyAiIC0gIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZWNsYXNzIikpOworCQkKKwkJCW51bUZpbGVMYWJlbCAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2ZpbGVfY291bnQiKSArICIgIiArIHJibS5nZXROdW1iZXJMYW5ndWFnZXMoKSk7CisJCQludW1Hcm91cExhYmVsICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2VzdGF0c19ncm91cF9jb3VudCIpICsgIiAiICsgcmJtLmdldE51bWJlckdyb3VwcygpKTsKKwkJCW51bUl0ZW1MYWJlbCAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2l0ZW1fY291bnQiKSArICIgIiArIHJibS5nZXROdW1iZXJUb3RhbFRyYW5zbGF0aW9ucygpKTsKKwkJCW51bUR1cExhYmVsICAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2R1cGxpY2F0ZXNfY291bnQiKSArICIgIiArIHJibS5nZXROdW1iZXJEdXBsaWNhdGVzKCkpOworCQkJCisJCQlmaWxlTGlzdCAgICAgICAgICAgID0gbmV3IEpMaXN0KHJibS5nZXRMYW5ndWFnZUxpc3RpbmdWZWN0b3IoKSk7CisJCQlncm91cExpc3QgICAgICAgICAgID0gbmV3IEpMaXN0KHJibS5nZXRHcm91cExpc3RpbmdWZWN0b3IoKSk7CisJCQlkdXBMaXN0ICAgICAgICAgICAgID0gbmV3IEpMaXN0KHJibS5nZXREdXBsaWNhdGVzTGlzdGluZ1ZlY3RvcigpKTsKKwkJCQorCQkJZmlsZUJ1dHRvbiAgICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2FkZF9maWxlIikpOworCQkJZ3JvdXBCdXR0b24gICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2FkZF9ncm91cCIpKTsKKwkJCWl0ZW1CdXR0b24gICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9hZGRfcmVzb3VyY2UiKSk7CisJCQkKKwkJCWZpbGVQYW5lbCAgICAgICAgICAgPSBuZXcgSlBhbmVsKCk7CisJCQlncm91cFBhbmVsICAgICAgICAgID0gbmV3IEpQYW5lbCgpOworCQkJaXRlbVBhbmVsICAgICAgICAgICA9IG5ldyBKUGFuZWwoKTsKKwkJCQorCQkJZmlsZVNjcm9sbCAgICAgICAgICA9IG5ldyBKU2Nyb2xsUGFuZShmaWxlTGlzdCk7CisJCQlncm91cFNjcm9sbCAgICAgICAgID0gbmV3IEpTY3JvbGxQYW5lKGdyb3VwTGlzdCk7CisJCQlkdXBTY3JvbGwgICAgICAgICAgID0gbmV3IEpTY3JvbGxQYW5lKGR1cExpc3QpOworCQkJCisJCQlpZiAobWFpbkJveCA9PSBudWxsKSB7CisJCQkJbWFpbkJveCAgICAgICAgID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCX0gZWxzZSB7CisJCQkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJCX0KKwkJCWR1cEJveCAgICAgICAgICAgICAgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkJCisJCQkvLyBTZXQgdXAgdGhlIGNvbXBvbmVudHMKKwkJCWZpbGVQYW5lbC5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCWdyb3VwUGFuZWwuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQlpdGVtUGFuZWwuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQkKKwkJCWZpbGVQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCQkgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlc3RhdHNfZmlsZV9ncm91cCIpKSk7CisJCQlncm91cFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2VzdGF0c19ncm91cF9ncm91cCIpKSk7CisJCQlpdGVtUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkJIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2l0ZW1fZ3JvdXAiKSkpOworCQkJCisJCQl0aXRsZUxhYmVsLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkJCisJCQlmaWxlQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fYWRkX2ZpbGVfdHJpZ2dlciIpKSk7CisJCQlncm91cEJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2FkZF9ncm91cF90cmlnZ2VyIikpKTsKKwkJCWl0ZW1CdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9hZGRfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQkKKwkJCS8vIEFkZCBsaXN0ZW5lcnMKKwkJCWZpbGVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUNvbnRhaW5lciBjID0gKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKTsKKwkJCQkJUkJNYW5hZ2VyR1VJIGd1aSA9IG51bGw7CisJCQkJCXdoaWxlICghKGMuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBSQk1hbmFnZXJHVUkpKSBjID0gYy5nZXRQYXJlbnQoKTsKKwkJCQkJZ3VpID0gKFJCTWFuYWdlckdVSSljLmdldFBhcmVudCgpOworCQkJCQlndWkuY3JlYXRlUmVzb3VyY2VGaWxlKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCWdyb3VwQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlDb250YWluZXIgYyA9ICgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCk7CisJCQkJCVJCTWFuYWdlckdVSSBndWkgPSBudWxsOworCQkJCQl3aGlsZSAoIShjLmdldFBhcmVudCgpIGluc3RhbmNlb2YgUkJNYW5hZ2VyR1VJKSkgYyA9IGMuZ2V0UGFyZW50KCk7CisJCQkJCWd1aSA9IChSQk1hbmFnZXJHVUkpYy5nZXRQYXJlbnQoKTsKKwkJCQkJZ3VpLmNyZWF0ZUJ1bmRsZUdyb3VwKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCWl0ZW1CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUNvbnRhaW5lciBjID0gKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKTsKKwkJCQkJUkJNYW5hZ2VyR1VJIGd1aSA9IG51bGw7CisJCQkJCXdoaWxlICghKGMuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBSQk1hbmFnZXJHVUkpKSBjID0gYy5nZXRQYXJlbnQoKTsKKwkJCQkJZ3VpID0gKFJCTWFuYWdlckdVSSljLmdldFBhcmVudCgpOworCQkJCQlndWkuY3JlYXRlQnVuZGxlSXRlbSgpOworCQkJCX0KKwkJCX0pOworCQkJCisJCQkvLyBVcGRhdGUgdGhlIGRpc3BsYXkKKwkJCWZpbGVQYW5lbC5yZW1vdmVBbGwoKTsKKwkJCWZpbGVQYW5lbC5hZGQobnVtRmlsZUxhYmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQkJZmlsZVBhbmVsLmFkZChmaWxlU2Nyb2xsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCWZpbGVQYW5lbC5hZGQoZmlsZUJ1dHRvbiwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJCQorCQkJZ3JvdXBQYW5lbC5yZW1vdmVBbGwoKTsKKwkJCWdyb3VwUGFuZWwuYWRkKG51bUdyb3VwTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCQlncm91cFBhbmVsLmFkZChncm91cFNjcm9sbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQlncm91cFBhbmVsLmFkZChncm91cEJ1dHRvbiwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJCQorCQkJZHVwQm94LnJlbW92ZUFsbCgpOworCQkJZHVwQm94LmFkZChudW1EdXBMYWJlbCk7CisJCQlkdXBCb3guYWRkKGR1cFNjcm9sbCk7CisJCQkKKwkJCWl0ZW1QYW5lbC5yZW1vdmVBbGwoKTsKKwkJCWl0ZW1QYW5lbC5hZGQobnVtSXRlbUxhYmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQkJaXRlbVBhbmVsLmFkZChkdXBCb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJaXRlbVBhbmVsLmFkZChpdGVtQnV0dG9uLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQkJCisJCQltYWluQm94LnJlbW92ZUFsbCgpOworCQkJbWFpbkJveC5hZGQodGl0bGVMYWJlbCk7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCgxMCkpOworCQkJbWFpbkJveC5hZGQoZmlsZVBhbmVsKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDEwKSk7CisJCQltYWluQm94LmFkZChncm91cFBhbmVsKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDEwKSk7CisJCQltYWluQm94LmFkZChpdGVtUGFuZWwpOworCQkJCisJCQlyZW1vdmVBbGwoKTsKKwkJCWlmICghKGdldExheW91dCgpIGluc3RhbmNlb2YgQm9yZGVyTGF5b3V0KSkKKwkJCQlzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCWFkZChtYWluQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfSBlbHNlIHsKKwkJCXJlbW92ZUFsbCgpOwkKKwkJfQorCQlyZXBhaW50KCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbXBvbmVudHMoKSB7CisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJaW50IHVudHJhbnNsYXRlZCA9IGJ1bmRsZS5nZXRVbnRyYW5zbGF0ZWRJdGVtc1NpemUoKTsKKwkJCQorCQkJakxhYmVsU3RhdHNUaXRsZS5zZXRUZXh0KGJ1bmRsZS5uYW1lKTsKKwkJCisJCQlqVGV4dEZpZWxkU3RhdHNOYW1lLnNldFRleHQoYnVuZGxlLm5hbWUgPT0gbnVsbCA/IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidW50aXRsZWQiKSA6IGJ1bmRsZS5uYW1lKTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvbW1lbnQuc2V0VGV4dChidW5kbGUuY29tbWVudCA9PSBudWxsID8gIiIgOiBidW5kbGUuY29tbWVudCk7CisJCQlqVGV4dEZpZWxkU3RhdHNNYW5hZ2VyLnNldFRleHQoYnVuZGxlLm1hbmFnZXIgPT0gbnVsbCA/ICIiIDogYnVuZGxlLm1hbmFnZXIpOworCQkJalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2Uuc2V0VGV4dChidW5kbGUubGFuZ3VhZ2UgPT0gbnVsbCA/ICIiIDogYnVuZGxlLmxhbmd1YWdlKTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvdW50cnkuc2V0VGV4dChidW5kbGUuY291bnRyeSA9PSBudWxsID8gIiIgOiBidW5kbGUuY291bnRyeSk7CisJCQlqVGV4dEZpZWxkU3RhdHNWYXJpYW50LnNldFRleHQoYnVuZGxlLnZhcmlhbnQgPT0gbnVsbCA/ICIiIDogYnVuZGxlLnZhcmlhbnQpOworCQkJakxhYmVsU3RhdHNOdW1UcmFucy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c19pdGVtX2NvdW50IikgKyAiICIgKworCQkJCQkgICBTdHJpbmcudmFsdWVPZihidW5kbGUuYWxsSXRlbXMuc2l6ZSgpKSk7CisJCQlqTGFiZWxTdGF0c051bVVudHJhbnMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfdHJhbnNsYXRpb25fY291bnQiKSArIAorCQkJCQkgICBTdHJpbmcudmFsdWVPZih1bnRyYW5zbGF0ZWQpKTsKKwkJfSBlbHNlIGlmIChyYm0gPT0gbnVsbCkgeworCQkJcmVtb3ZlQWxsKCk7CisJCX0KKwkJCisJfQorCQorCXZvaWQgdXBkYXRlQnVuZGxlSW5mbygpIHsKKwkJYnVuZGxlLm5hbWUgICAgID0galRleHRGaWVsZFN0YXRzTmFtZS5nZXRUZXh0KCkudHJpbSgpOworCQlidW5kbGUuY29tbWVudCAgPSBqVGV4dEZpZWxkU3RhdHNDb21tZW50LmdldFRleHQoKS50cmltKCk7CisJCWJ1bmRsZS5tYW5hZ2VyICA9IGpUZXh0RmllbGRTdGF0c01hbmFnZXIuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJYnVuZGxlLmxhbmd1YWdlID0galRleHRGaWVsZFN0YXRzTGFuZ3VhZ2UuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJYnVuZGxlLmNvdW50cnkgID0galRleHRGaWVsZFN0YXRzQ291bnRyeS5nZXRUZXh0KCkudHJpbSgpOworCQlidW5kbGUudmFyaWFudCAgPSBqVGV4dEZpZWxkU3RhdHNWYXJpYW50LmdldFRleHQoKS50cmltKCk7CisJCXVwZGF0ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwl9CisJCisJcHVibGljIFJCU3RhdGlzdGljc1BhbmVsKCkgeworCQlzdXBlcigpOworCQlidW5kbGUgPSBudWxsOworCQlyYm0gPSBudWxsOworCX0KKwkKK30KKworY2xhc3MgQnV0dG9uRW5hYmxlckZvY3VzTGlzdGVuZXIgaW1wbGVtZW50cyBGb2N1c0xpc3RlbmVyIHsKKwlKQnV0dG9uIGJ1dHRvbjsKKwlTdHJpbmcgYmVmb3JlVGV4dCA9IG51bGw7CisJCisJcHVibGljIEJ1dHRvbkVuYWJsZXJGb2N1c0xpc3RlbmVyKEpCdXR0b24gYnV0dG9uKSB7CisJCXN1cGVyKCk7CisJCXRoaXMuYnV0dG9uID0gYnV0dG9uOworCX0KKwkKKwlwdWJsaWMgdm9pZCBmb2N1c0dhaW5lZChGb2N1c0V2ZW50IGV2KSB7CisJCU9iamVjdCBvID0gZXYuZ2V0U291cmNlKCk7CisJCWlmIChvIGluc3RhbmNlb2YgSlRleHRDb21wb25lbnQpIHsKKwkJCUpUZXh0Q29tcG9uZW50IGp0YyA9IChKVGV4dENvbXBvbmVudClvOworCQkJYmVmb3JlVGV4dCA9IGp0Yy5nZXRUZXh0KCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZXYpIHsKKwkJT2JqZWN0IG8gPSBldi5nZXRTb3VyY2UoKTsKKwkJaWYgKG8gaW5zdGFuY2VvZiBKVGV4dENvbXBvbmVudCkgeworCQkJSlRleHRDb21wb25lbnQganRjID0gKEpUZXh0Q29tcG9uZW50KW87CisJCQlTdHJpbmcgYWZ0ZXJUZXh0ID0ganRjLmdldFRleHQoKTsKKwkJCWlmICghYWZ0ZXJUZXh0LmVxdWFscyhiZWZvcmVUZXh0KSkgYnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCX0gZWxzZSBidXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJVbnRyYW5zbGF0ZWRQYW5lbC5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlVudHJhbnNsYXRlZFBhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4N2RhNAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJVbnRyYW5zbGF0ZWRQYW5lbC5qYXZhCkBAIC0wLDAgKzEsMzExIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZheC5zd2luZy50YWJsZS4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLyoqCisgKiBUaGUgY2xhc3MgdXNlZCB0byBkaXNwbGF5IHVudHJhbnNsYXRlZCBpdGVtcworICovCitjbGFzcyBSQlVudHJhbnNsYXRlZFBhbmVsIGV4dGVuZHMgSlBhbmVsIHsKKwlSQk1hbmFnZXIgcmJtOworCUJ1bmRsZSBidW5kbGU7CisJUkJNYW5hZ2VyR1VJIGxpc3RlbmVyOworCQorCS8vIENvbXBvbmVudHMgLSBCdW5kbGUKKwlKTGFiZWwgICAgICAgICAgICAgICAgICAgICAgakxhYmVsVW50cmFuc1RpdGxlOworCVVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCB1bnRyYW5zVGFibGVNb2RlbDsKKwlKVGFibGUgICAgICAgICAgICAgICAgICAgICAgalRhYmxlVW50cmFuczsKKwlKU2Nyb2xsUGFuZSAgICAgICAgICAgICAgICAgalNjcm9sbFBhbmVVbnRyYW5zVGFibGU7CisJCisJLy8gQ29tcG9uZW50cyAtIEJ1bmRsZSBNYW5hZ2VyCisJQm94ICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Cb3g7CisJSlBhbmVsICAgICAgICAgICAgICAgICAgICAgIG1haW5QYW5lbHNbXTsKKwlKTGFiZWwgICAgICAgICAgICAgICAgICAgICAgbnVtVW50cmFuc0xhYmVsc1tdOworCUpTY3JvbGxQYW5lICAgICAgICAgICAgICAgICBtYWluU2Nyb2xsOworCUpTY3JvbGxQYW5lICAgICAgICAgICAgICAgICBsaXN0U2Nyb2xsc1tdOworCUpMaXN0ICAgICAgICAgICAgICAgICAgICAgICB1bnRyYW5zTGlzdHNbXTsKKwkKKwlwdWJsaWMgUkJVbnRyYW5zbGF0ZWRQYW5lbChSQk1hbmFnZXJHVUkgZ3VpKSB7CisJCXN1cGVyKCk7CisJCWxpc3RlbmVyID0gZ3VpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRCdW5kbGUoQnVuZGxlIGIpIHsKKwkJcmJtID0gbnVsbDsKKwkJaWYgKGJ1bmRsZSA9PSBudWxsKSB7CisJCQlidW5kbGUgPSBiOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfSBlbHNlIGlmIChidW5kbGUgIT0gYikgeworCQkJYnVuZGxlID0gYjsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRNYW5hZ2VyKFJCTWFuYWdlciBtKSB7CisJCWJ1bmRsZSA9IG51bGw7CisJCWlmIChyYm0gPT0gbnVsbCkgeworCQkJcmJtID0gbTsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0gZWxzZSBpZiAocmJtICE9IG0pIHsKKwkJCXJibSA9IG07CisJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgcmVtb3ZlRWxlbWVudHMoKSB7CisJCWlmIChyYm0gIT0gbnVsbCB8fCBidW5kbGUgIT0gbnVsbCkgeworCQkJcmJtID0gbnVsbDsKKwkJCWJ1bmRsZSA9IG51bGw7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9CisJfQkKKwkKKwkvLyBNYXJrcyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYXMgdHJhbnNsYXRlZCBhbmQgcmVtb3ZlcyBmcm9tIHRoaXMgdmlldworCXByaXZhdGUgdm9pZCBtYXJrU2VsZWN0ZWRSZXNvdXJjZUFzVHJhbnNsYXRlZCgpIHsKKwkJaWYgKGJ1bmRsZSA9PSBudWxsKSByZXR1cm47CisJCWlmIChqVGFibGVVbnRyYW5zLmdldFNlbGVjdGVkUm93KCkgPCAwKSByZXR1cm47CisJCWlmIChqVGFibGVVbnRyYW5zLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCWludCByb3cgPSBqVGFibGVVbnRyYW5zLmdldFNlbGVjdGVkUm93KCk7CisJCQlVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwgbW9kZWwgPSAoVW50cmFuc2xhdGVkSXRlbXNUYWJsZU1vZGVsKWpUYWJsZVVudHJhbnMuZ2V0TW9kZWwoKTsKKwkJCUJ1bmRsZUl0ZW0gaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCWl0ZW0uc2V0VHJhbnNsYXRlZCh0cnVlKTsKKwkJCW1vZGVsLnVwZGF0ZSgpOworCQl9CisJfQorCQorCS8vIFJlbW92ZXMgdGhlIHNlbGVjdGVkIHJlc291cmNlIGZyb20gdGhlIHJlc291cmNlIGZpbGUKKwlwcml2YXRlIHZvaWQgZGVsZXRlU2VsZWN0ZWRSZXNvdXJjZSgpIHsKKwkJaWYgKGJ1bmRsZSA9PSBudWxsKSByZXR1cm47CisJCWlmIChqVGFibGVVbnRyYW5zLmdldFNlbGVjdGVkUm93KCkgPCAwKSByZXR1cm47CisJCWlmIChqVGFibGVVbnRyYW5zLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpIHsKKwkJCWludCByb3cgPSBqVGFibGVVbnRyYW5zLmdldFNlbGVjdGVkUm93KCk7CisJCQlVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwgbW9kZWwgPSAoVW50cmFuc2xhdGVkSXRlbXNUYWJsZU1vZGVsKWpUYWJsZVVudHJhbnMuZ2V0TW9kZWwoKTsKKwkJCUJ1bmRsZUl0ZW0gaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCWlmIChpdGVtLmdldFBhcmVudEdyb3VwKCkgIT0gbnVsbCAmJiBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkgIT0gbnVsbCkgeworCQkJCUJ1bmRsZSBidW5kbGUgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCk7CisJCQkJYnVuZGxlLnJlbW92ZUl0ZW0oaXRlbS5nZXRLZXkoKSk7CisJCQl9CisJCQltb2RlbC51cGRhdGUoKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgcHJpbnRUYWJsZSgpIHsKKwkJUHJpbnRKb2IgcGpvYiA9IGdldFRvb2xraXQoKS5nZXRQcmludEpvYihuZXcgRnJhbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmludGluZyBUZXN0IiwgbnVsbCk7CisKKyAgICAgICAgaWYgKHBqb2IgIT0gbnVsbCkgeyAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoaWNzIHBnID0gcGpvYi5nZXRHcmFwaGljcygpOworCisgICAgICAgICAgICBpZiAocGcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8valRhYmxlVW50cmFucy5wcmludChwZyk7CisgICAgICAgICAgICAgICAgRGltZW5zaW9uIHBhZ2VfZGltID0gcGpvYi5nZXRQYWdlRGltZW5zaW9uKCk7CisJCQkJcGcuc2V0Q29sb3IoQ29sb3IuYmxhY2spOworCQkJCWludCB5X29mZiA9IDUwOworCQkJCWludCB4X29mZiA9IDMwOworCQkJCVRhYmxlTW9kZWwgbW9kZWwgPSBqVGFibGVVbnRyYW5zLmdldE1vZGVsKCk7CisJCQkJcGcuc2V0Rm9udChuZXcgRm9udCgiU2Fuc1NlcmlmIiwgRm9udC5CT0xELCAxNCkpOworCQkJCXBnLmRyYXdTdHJpbmcoIlVudHJhbnNsYXRlZCBJdGVtczogICAgICAgUGFnZSAxIiwgeF9vZmYsIHlfb2ZmKTsKKwkJCQlwZy5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLCBGb250LlBMQUlOLCAxMCkpOworCQkJCQorCQkJCWZvciAoaW50IGk9MCA7IGkgPCBtb2RlbC5nZXRSb3dDb3VudCgpOyBpKyspIHsKKwkJCQkJaWYgKHlfb2ZmIDwgcGFnZV9kaW0uaGVpZ2h0IC0gNTApIHsKKwkJCQkJCXlfb2ZmICs9IDE1OworCQkJCQkJU3RyaW5nIGtleSA9IG1vZGVsLmdldFZhbHVlQXQoaSwgMCkudG9TdHJpbmcoKTsKKwkJCQkJCVN0cmluZyB0cmFuc2xhdGlvbiA9IG1vZGVsLmdldFZhbHVlQXQoaSwxKS50b1N0cmluZygpOworCQkJCQkJcGcuZHJhd1N0cmluZyhrZXkgKyAiIC0+ICIgKyB0cmFuc2xhdGlvbiwgeF9vZmYsIHlfb2ZmKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlwZy5kaXNwb3NlKCk7IC8vIGZsdXNoIHBhZ2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBqb2IuZW5kKCk7CisKKyAgICAgICAgfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJLy8gSW5pdGlhbGl6ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJakxhYmVsVW50cmFuc1RpdGxlICAgICAgICA9IG5ldyBKTGFiZWwoYnVuZGxlLm5hbWUpOworCQkJdW50cmFuc1RhYmxlTW9kZWwgICAgICAgICA9IG5ldyBVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwoYnVuZGxlKTsKKwkJCWpUYWJsZVVudHJhbnMgICAgICAgICAgICAgPSBuZXcgSlRhYmxlKHVudHJhbnNUYWJsZU1vZGVsKTsKKwkJCWpTY3JvbGxQYW5lVW50cmFuc1RhYmxlICAgPSBuZXcgSlNjcm9sbFBhbmUoalRhYmxlVW50cmFucyk7CisJCisJCQkvLyBMb3dlciBwYW5lbCBjb21wb25lbnRzCisJCQlKUGFuZWwgIGxvd2VyUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCQlKQnV0dG9uIGRlbGV0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZSIpKTsKKwkJCUpCdXR0b24gdHJhbnNsYXRlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fbWFya190cmFuc2xhdGVkIikpOworCQkJSkJ1dHRvbiBwcmludEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3ByaW50X3RhYmxlIikpOworCQkJCisJCQlkZWxldGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQl0cmFuc2xhdGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9tYXJrX3RyYW5zbGF0ZWRfdHJpZ2dlciIpKSk7CisJCQlsb3dlclBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucyIpKSk7CisJCQlsb3dlclBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgxLDIpKTsKKwkJCQorCQkJalRhYmxlVW50cmFucy5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfU0VMRUNUSU9OKTsKKwkJCWpUYWJsZVVudHJhbnMuYWRkTW91c2VMaXN0ZW5lcihsaXN0ZW5lcik7CisJCQkKKwkJCWpMYWJlbFVudHJhbnNUaXRsZS5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLEZvbnQuUExBSU4sMTgpKTsKKwkJCQorCQkJLy8gQWRkIGFjdGlvbiBsaXN0ZW5lcnMKKwkJCWRlbGV0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCWRlbGV0ZVNlbGVjdGVkUmVzb3VyY2UoKTsKKwkJCQl9CisJCQl9KTsKKwkJCXRyYW5zbGF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCW1hcmtTZWxlY3RlZFJlc291cmNlQXNUcmFuc2xhdGVkKCk7CisJCQkJfQorCQkJfSk7CisJCQlwcmludEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCXByaW50VGFibGUoKTsKKwkJCQl9CisJCQl9KTsJCisJCQkKKwkJCXJlbW92ZUFsbCgpOworCQkJc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQlsb3dlclBhbmVsLmFkZChkZWxldGVCdXR0b24pOworCQkJbG93ZXJQYW5lbC5hZGQodHJhbnNsYXRlQnV0dG9uKTsKKwkJCS8vbG93ZXJQYW5lbC5hZGQocHJpbnRCdXR0b24pOworCQkJYWRkKGpMYWJlbFVudHJhbnNUaXRsZSwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJCWFkZChqU2Nyb2xsUGFuZVVudHJhbnNUYWJsZSwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQlhZGQobG93ZXJQYW5lbCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbnVsbCkgeworCQkJCisJCQlpbnQgbGFuZ0NvdW50ID0gMDsgICAgICAgLy8gVGhlIG51bWJlciBvZiBsYW5ndWFnZXMgd2l0aCB1bnRyYW5zbGF0ZWQgSXRlbXMKKwkJCWZvciAoaW50IGk9MDsgaSA8IHJibS5nZXRCdW5kbGVzKCkuc2l6ZSgpOyBpKyspIHsKKwkJCQlCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmVsZW1lbnRBdChpKTsKKwkJCQlpZiAoYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpID4gMCkgbGFuZ0NvdW50Kys7CisJCQl9CisJCQkKKwkJCS8vIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudHMKKwkJCW1haW5QYW5lbHMgICAgICAgICAgICAgICA9IG5ldyBKUGFuZWxbbGFuZ0NvdW50XTsKKwkJCW51bVVudHJhbnNMYWJlbHMgICAgICAgICA9IG5ldyBKTGFiZWxbbGFuZ0NvdW50XTsKKwkJCWxpc3RTY3JvbGxzICAgICAgICAgICAgICA9IG5ldyBKU2Nyb2xsUGFuZVtsYW5nQ291bnRdOworCQkJdW50cmFuc0xpc3RzICAgICAgICAgICAgID0gbmV3IEpMaXN0W2xhbmdDb3VudF07CisJCQkKKwkJCW1haW5Cb3ggICAgICAgICAgICAgICAgICA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQltYWluU2Nyb2xsICAgICAgICAgICAgICAgPSBuZXcgSlNjcm9sbFBhbmUobWFpbkJveCk7CisJCQlqTGFiZWxVbnRyYW5zVGl0bGUgICAgICAgPSBuZXcgSkxhYmVsKHJibS5nZXRCYXNlQ2xhc3MoKSArICIgLSAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bnRyYW5zbGF0ZWRfaXRlbXMiKSk7CisJCQkKKwkJCS8vIFNldCBjb21wb25lbnQgcHJvcGVydGllcworCQkJakxhYmVsVW50cmFuc1RpdGxlLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkJbWFpbkJveC5hZGQoakxhYmVsVW50cmFuc1RpdGxlKTsKKwkJCQorCQkJaW50IGNvdW50ID0gMDsKKwkJCWZvciAoaW50IGk9MDsgaSA8IHJibS5nZXRCdW5kbGVzKCkuc2l6ZSgpOyBpKyspIHsKKwkJCQlCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmVsZW1lbnRBdChpKTsKKwkJCQlpZiAoYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpID4gMCkgeworCQkJCQltYWluUGFuZWxzW2NvdW50XSA9IG5ldyBKUGFuZWwoKTsKKwkJCQkJbWFpblBhbmVsc1tjb3VudF0uc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQkJCW51bVVudHJhbnNMYWJlbHNbY291bnRdID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2V1bnRyYW5zX3VudHJhbnNfY291bnQiKSArCisJCQkJCQkJCQkJCQkJCSBidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbXNTaXplKCkpOworCQkJCQkvLyBUT0RPOiBJbXBsZW1lbnQgYSBMaXN0IE1vZGVsIGZvciB0aGlzIGxpc3QsIHJlbW92ZSB1c2Ugb2YgdmVjdG9yCisJCQkJCXVudHJhbnNMaXN0c1tjb3VudF0gPSBuZXcgSkxpc3QoYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zQXNWZWN0b3IoKSk7CisJCQkJCWxpc3RTY3JvbGxzW2NvdW50XSA9IG5ldyBKU2Nyb2xsUGFuZSh1bnRyYW5zTGlzdHNbY291bnRdKTsKKwkJCQkJCisJCQkJCW1haW5QYW5lbHNbY291bnRdLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcigKKwkJCQkJCQkJCQkJCUJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2V1bnRyYW5zX2ZpbGUiKSArICIgIiArIGJ1bmRsZS50b1N0cmluZygpKSk7CisJCQkJCW1haW5QYW5lbHNbY291bnRdLnJlbW92ZUFsbCgpOworCQkJCQltYWluUGFuZWxzW2NvdW50XS5hZGQobnVtVW50cmFuc0xhYmVsc1tjb3VudF0sIEJvcmRlckxheW91dC5OT1JUSCk7CisJCQkJCW1haW5QYW5lbHNbY291bnRdLmFkZChsaXN0U2Nyb2xsc1tjb3VudF0sIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJCQkKKwkJCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkJCQltYWluQm94LmFkZChtYWluUGFuZWxzW2NvdW50XSk7CisJCQkJCQorCQkJCQljb3VudCsrOworCQkJCX0KKwkJCX0KKwkJCW1haW5TY3JvbGwuc2V0UHJlZmVycmVkU2l6ZShnZXRTaXplKCkpOworCQkJcmVtb3ZlQWxsKCk7CisJCQlhZGQobWFpblNjcm9sbCk7CisJCX0gZWxzZSB7CisJCQlyZW1vdmVBbGwoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGVDb21wb25lbnRzKCkgeworCQkvLyBVcGRhdGUgY29tcG9uZW50cworCQlpZiAoYnVuZGxlICE9IG51bGwpIHsKKwkJCWpMYWJlbFVudHJhbnNUaXRsZS5zZXRUZXh0KGJ1bmRsZS5uYW1lKTsKKwkJCXVudHJhbnNUYWJsZU1vZGVsLnNldEJ1bmRsZShidW5kbGUpOworCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgeworCQkJcmVtb3ZlQWxsKCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogVGhlIHRhYmxlIG1vZGVsIGZvciB1bnRyYW5zbGF0ZWQgSXRlbXMKKyAqLworCitjbGFzcyBVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlTW9kZWwgeworCUJ1bmRsZSBidW5kbGU7CisJCisJcHVibGljIFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbChCdW5kbGUgYnVuZGxlKSB7CisJCXRoaXMuYnVuZGxlID0gYnVuZGxlOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRCdW5kbGUoQnVuZGxlIGJ1bmRsZSkgeworCQl0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKKwkJdXBkYXRlKCk7CisJfQorCQorCXB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKSB7IHJldHVybiAzOyB9CisJCSAgICAKKwlwdWJsaWMgaW50IGdldFJvd0NvdW50KCkgeworCQlyZXR1cm4gYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpOworCX0KKwkKKwlwdWJsaWMgT2JqZWN0IGdldFZhbHVlQXQoaW50IHJvdywgaW50IGNvbCkgeworCQlCdW5kbGVJdGVtIGl0ZW0gPSBidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbShyb3cpOworCQlTdHJpbmcgcmV0U3RyID0gbnVsbDsKKwkJCQkKKwkJc3dpdGNoKGNvbCkgeworCQljYXNlIDA6CisJCQlyZXRTdHIgPSBpdGVtLmdldEtleSgpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJldFN0ciA9IGl0ZW0uZ2V0VHJhbnNsYXRpb24oKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyZXRTdHIgPSAoaXRlbS5nZXRQYXJlbnRHcm91cCgpID09IG51bGwgPyAiIiA6IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRTdHIgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYmxlX2NlbGxfZXJyb3IiKTsKKwkJfQorCQkJCQorCQlyZXR1cm4gcmV0U3RyOworCX0KKwkJCQorCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uTmFtZShpbnQgY29sKSB7CisJCWlmIChjb2wgPT0gMCkgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9rZXkiKTsKKwkJZWxzZSBpZiAoY29sID09IDEpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19jb2x1bW5fdHJhbnNsYXRpb24iKTsKKwkJZWxzZSBpZiAoY29sID09IDIpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19jb2x1bW5fZ3JvdXAiKTsKKwkJZWxzZSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJsZV9jb2x1bW5fZXJyb3IiKTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW0gZ2V0QnVuZGxlSXRlbShpbnQgcm93KSB7CisJCXJldHVybiBidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbShyb3cpOworCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisJCWZpcmVUYWJsZURhdGFDaGFuZ2VkKCk7CisJfQorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1Jlc291cmNlQ3JlYXRpb25EaWFsb2cuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUmVzb3VyY2VDcmVhdGlvbkRpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTJiNzkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1Jlc291cmNlQ3JlYXRpb25EaWFsb2cuamF2YQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIEEgZGlhbG9nIGZvciBjcmVhdGluZyBuZXcgUmVzb3VyY2UgRmlsZXMKKyAqLworY2xhc3MgUmVzb3VyY2VDcmVhdGlvbkRpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworCVJCTWFuYWdlciByYm07CisJUkJNYW5hZ2VyR1VJIGd1aTsKKwkKKwkvLyBDb21wb25lbnRzCisJQm94IG1haW5Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCUJveCBpbmZvQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwlKUGFuZWwgaW5mb1BhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBpbmZvVGl0bGVQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgaW5mb0NvbW1lbnRQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgaW5mb01hbmFnZXJQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgbGFuZ1BhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBjb3VuUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJSlBhbmVsIHZhcmlQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgYnV0dFBhbmVsID0gbmV3IEpQYW5lbCgpOworCQorCUpMYWJlbCBpbnN0cnVjdGlvbnNMYWJlbCA9IG5ldyBKTGFiZWwoIiIpOworCUpMYWJlbCB0aXRsZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19maWxlX3RpdGxlIikpOworCUpMYWJlbCBjb21tZW50TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfY29tbWVudCIpKTsKKwlKTGFiZWwgbWFuYWdlckxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19maWxlX21hbmFnZXIiKSk7CisJSkxhYmVsIGVuYzFMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZW5jb2RpbmciKSk7CisJSkxhYmVsIGVuYzJMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZW5jb2RpbmciKSk7CisJSkxhYmVsIGVuYzNMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZW5jb2RpbmciKSk7CisJSkxhYmVsIG5hbTFMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbmFtZSIpKTsKKwlKTGFiZWwgbmFtMkxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19uYW1lIikpOworCUpMYWJlbCBuYW0zTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX25hbWUiKSk7CisJCisJSlRleHRGaWVsZCB0aXRsZUZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgY29tbWVudEZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgbWFuYWdlckZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgZW5jMUZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgZW5jMkZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgZW5jM0ZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgbmFtMUZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgbmFtMkZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgbmFtM0ZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCQorCUpDaGVja0JveCBjb3B5Q2hlY2tCb3ggPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2NoZWNrYm94X2NvcHlfZWxlbWVudHMiKSwgdHJ1ZSk7CisJCisJSkJ1dHRvbiBjcmVhdGVCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGUiKSk7CisJSkJ1dHRvbiBjYW5jZWxCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jYW5jZWwiKSk7CisJCisJcHVibGljIFJlc291cmNlQ3JlYXRpb25EaWFsb2coUkJNYW5hZ2VyIHJibSwgSkZyYW1lIGZyYW1lLCBTdHJpbmcgdGl0bGUsIGJvb2xlYW4gbW9kYWwpIHsKKwkJc3VwZXIoZnJhbWUsIHRpdGxlLCBtb2RhbCk7CisJCXRoaXMuZ3VpID0gKFJCTWFuYWdlckdVSSlmcmFtZTsKKwkJdGhpcy5yYm0gPSByYm07CisJCWluaXRDb21wb25lbnRzKCk7CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5LRVlfRVZFTlRfTUFTSyk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldikgeworCQlpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0VOVEVSKSB7CisJCQlib29sZWFuIHN1Y2Nlc3MgPSBjcmVhdGVSZXNvdXJjZSgpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfZmlsZSIpICsgIiAiICsKKwkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9maWxlIik7CisJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgYWxlcnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQl9IGVsc2UgeworCQkJCXNldFZpc2libGUoZmFsc2UpOworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfQ0FOQ0VMKSB7CisJCQljbG9zZVdpbmRvdygpOworCQl9CisJfQorCQorCWJvb2xlYW4gY3JlYXRlUmVzb3VyY2UoKSB7CisJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlTdHJpbmcgZW5jb2RpbmcgPSBlbmMxRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJU3RyaW5nIGVuYzIgPSBlbmMyRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJaWYgKGVuYzIgIT0gbnVsbCAmJiAhZW5jMi5lcXVhbHMoIiIpKSBlbmNvZGluZyArPSAiXyIgKyBlbmMyOworCQlTdHJpbmcgZW5jMyA9IGVuYzNGaWVsZC5nZXRUZXh0KCkudHJpbSgpOworCQlpZiAoZW5jMyAhPSBudWxsICYmICFlbmMzLmVxdWFscygiIikpIGVuY29kaW5nICs9ICJfIiArIGVuYzM7CisJCWJvb2xlYW4gcmV0ID0gcmJtLmNyZWF0ZVJlc291cmNlKHRpdGxlRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgY29tbWVudEZpZWxkLmdldFRleHQoKS50cmltKCksIG1hbmFnZXJGaWVsZC5nZXRUZXh0KCkudHJpbSgpLAorCQkJCQkJCWVuY29kaW5nLCBuYW0xRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgbmFtMkZpZWxkLmdldFRleHQoKS50cmltKCksCisJCQkJCQkJbmFtM0ZpZWxkLmdldFRleHQoKS50cmltKCksIGNvcHlDaGVja0JveC5pc1NlbGVjdGVkKCkpOworCQlpZiAocmV0KSB7IAorCQkJZ3VpLnVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCQlndWkudXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCWd1aS51cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisJCisJcHVibGljIHZvaWQgaW5pdENvbXBvbmVudHMoKXsKKwkJLy8gRXJyb3IgY2hlY2sKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX25vX2J1bmRsZV9mb3JfZmlsZSIpOworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgYWxlcnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQljbG9zZVdpbmRvdygpOworCQkJcmV0dXJuOworCQl9CisJCQorCQkvLyBJbml0aWFsaXplIHZhbHVlcworCQlpbnQgdGVtcFdpZHRoID0gMTc1OworCQlEaW1lbnNpb24gbGFiZWxEaW0gPSBuZXcgRGltZW5zaW9uKHRlbXBXaWR0aCwgMzApOworCQl0aXRsZUxhYmVsLnNldFByZWZlcnJlZFNpemUobGFiZWxEaW0pOworCQljb21tZW50TGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsYWJlbERpbSk7CisJCW1hbmFnZXJMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxhYmVsRGltKTsKKwkJCisJCWluZm9QYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19maWxlX2luZm8iKSkpOworCQlsYW5nUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbGFuZ3VhZ2UiKSkpOworCQljb3VuUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfY291bnRyeSIpKSk7CisJCXZhcmlQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ192YXJpYW50IikpKTsKKwkJCisJCXRpdGxlRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCWNvbW1lbnRGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJbWFuYWdlckZpZWxkLnNldENvbHVtbnMoMzApOworCQkKKwkJZW5jMUZpZWxkLnNldENvbHVtbnMoMyk7CisJCWVuYzJGaWVsZC5zZXRDb2x1bW5zKDMpOworCQllbmMzRmllbGQuc2V0Q29sdW1ucygzKTsKKwkJbmFtMUZpZWxkLnNldENvbHVtbnMoMjApOworCQluYW0yRmllbGQuc2V0Q29sdW1ucygyMCk7CisJCW5hbTNGaWVsZC5zZXRDb2x1bW5zKDIwKTsKKwkJCisJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQlpbmZvVGl0bGVQYW5lbC5hZGQodGl0bGVMYWJlbCk7IGluZm9UaXRsZVBhbmVsLmFkZCh0aXRsZUZpZWxkKTsKKwkJaW5mb0NvbW1lbnRQYW5lbC5hZGQoY29tbWVudExhYmVsKTsgaW5mb0NvbW1lbnRQYW5lbC5hZGQoY29tbWVudEZpZWxkKTsKKwkJaW5mb01hbmFnZXJQYW5lbC5hZGQobWFuYWdlckxhYmVsKTsgaW5mb01hbmFnZXJQYW5lbC5hZGQobWFuYWdlckZpZWxkKTsKKwkJaW5mb0JveC5hZGQoaW5mb1RpdGxlUGFuZWwpOworCQlpbmZvQm94LmFkZChpbmZvQ29tbWVudFBhbmVsKTsKKwkJaW5mb0JveC5hZGQoaW5mb01hbmFnZXJQYW5lbCk7CisJCWluZm9QYW5lbC5hZGQoaW5mb0JveCk7CisJCQorCQlsYW5nUGFuZWwuYWRkKGVuYzFMYWJlbCk7IGxhbmdQYW5lbC5hZGQoZW5jMUZpZWxkKTsgbGFuZ1BhbmVsLmFkZChuYW0xTGFiZWwpOyBsYW5nUGFuZWwuYWRkKG5hbTFGaWVsZCk7CisJCWNvdW5QYW5lbC5hZGQoZW5jMkxhYmVsKTsgY291blBhbmVsLmFkZChlbmMyRmllbGQpOyBjb3VuUGFuZWwuYWRkKG5hbTJMYWJlbCk7IGNvdW5QYW5lbC5hZGQobmFtMkZpZWxkKTsKKwkJdmFyaVBhbmVsLmFkZChlbmMzTGFiZWwpOyB2YXJpUGFuZWwuYWRkKGVuYzNGaWVsZCk7IHZhcmlQYW5lbC5hZGQobmFtM0xhYmVsKTsgdmFyaVBhbmVsLmFkZChuYW0zRmllbGQpOworCQkKKwkJYnV0dFBhbmVsLmFkZChjcmVhdGVCdXR0b24pOyBidXR0UGFuZWwuYWRkKGNhbmNlbEJ1dHRvbik7CisJCQorCQkvLyBBZGQgdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVycworCQljYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJSkRpYWxvZyBkaWFsb2cgPSAoSkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJfQorCQl9KTsKKwkJCisJCWNyZWF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlSZXNvdXJjZUNyZWF0aW9uRGlhbG9nIGRpYWxvZyA9CisJCQkJCShSZXNvdXJjZUNyZWF0aW9uRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlhbG9nLmNyZWF0ZVJlc291cmNlKCk7CisJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfY3JlYXRlX2ZpbGUiKSArICIgIiArCisJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfdHJ5X2FnYWluX2ZpbGUiKTsKKwkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJZ2V0Um9vdFBhbmUoKS5zZXREZWZhdWx0QnV0dG9uKGNyZWF0ZUJ1dHRvbik7CisJCQorCQkvLyBDb21wbGV0ZSB0aGUgY29tcG9uZW50IGxheW91dAorCQltYWluQm94LnJlbW92ZUFsbCgpOworCQkvL21haW5Cb3guYWRkKGluc3RydWN0aW9uc0xhYmVsKTsKKwkJbWFpbkJveC5hZGQoaW5mb1BhbmVsKTsKKwkJbWFpbkJveC5hZGQobGFuZ1BhbmVsKTsKKwkJbWFpbkJveC5hZGQoY291blBhbmVsKTsKKwkJbWFpbkJveC5hZGQodmFyaVBhbmVsKTsKKwkJbWFpbkJveC5hZGQoY29weUNoZWNrQm94KTsKKwkJbWFpbkJveC5hZGQoYnV0dFBhbmVsKTsKKwkJCisJCXNldExvY2F0aW9uKG5ldyBqYXZhLmF3dC5Qb2ludCg1MCwgNTApKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQobWFpbkJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCXZhbGlkYXRlVHJlZSgpOworCQlwYWNrKCk7CisJCXNldFZpc2libGUodHJ1ZSk7CisJCS8vc2V0UmVzaXphYmxlKGZhbHNlKTsKKwl9CisJCisJdm9pZCBjbG9zZVdpbmRvdygpIHsKKwkJc2V0VmlzaWJsZShmYWxzZSk7CisJCWRpc3Bvc2UoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDI3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjJhYTIyMGMyYTczMjIzMGMxZWYyNzkyOTk2NjdjZTdiNjk4NDVkOGFiZGNiZWVlY2UyZjU0OGQ1NGZlYWZiNTkKK3NpemUgMTYxOQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2J1bmRsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fYnVuZGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZlMzhhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2J1bmRsZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MGQwMjI2NzU0MzA5NmJhNWQyZGRjMzQ5NGQ0ODg3NjljZmMxMzk2OTg2MDA0OTQ5M2QzMzk5Mjc4Y2I0MjRhYgorc2l6ZSAxMDg2CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fY291bnRyeS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fY291bnRyeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhN2FjZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9jb3VudHJ5LmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjoyZmNlOGVlNzk2MDk2Y2JjMWE2YWY2YzRjMWNlMWEzNTcxMmQzYTVhZWU0ZWQ1N2I5YzRlM2Q0Njc3ZGZlOWRmCitzaXplIDU3NgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2ZpbGUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2ZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDhmZWYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZmlsZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OTEyZjk0NmU3Y2I0ZGMyOWVjNTJmZTA4OTU5NTExYjFiYmY1ODJiYjQzZTI1MjdhMjQzOWYxMzdiMzFmYjMwYgorc2l6ZSAyODUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9ncm91cC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZ3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzFkYWQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZ3JvdXAuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjZmNmQyMTJmNDZkYTBlYTIwNzZjZGJjZDIyMzc2YjNlNzM4MDZjYTQxZmMzY2RlOTU1NTYwMDg5ZGUyZDUwMDQKK3NpemUgMzY5CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25faXRlbS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25faXRlbS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmZTc2NAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9pdGVtLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo4MGFhYTA5OGI1Zjc2YWIyMjUzNGUzZWUxNGM4MGNjMjlmZjQ2MmY5MTRjMWU4N2ZlNTM2ODA4Nzk4ODBmYTliCitzaXplIDIwMApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2xhbmd1YWdlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9sYW5ndWFnZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMmVlMQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9sYW5ndWFnZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6Y2RmZDU4YzhhZjljMGJiODNiM2ZhZDY4ZTkwYzhkOGYwY2FiYTI4ZjU3MWVkMmFjNjJkNmE4YzNjNDg2MDE5Zgorc2l6ZSAxMDc4CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fcHJvamVjdC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fcHJvamVjdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxMjIyOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9wcm9qZWN0LmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpiMWE5MWQzZWU3OTJiMWQxOWI1ZTM0YzBjZjMyMDdiNWYwYjc0NWZiNTU5MWMyY2I1NmNhMWVhZDRkOTA1YTdjCitzaXplIDI5MQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX3ZhcmlhbnQuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX3ZhcmlhbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDJiNDAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fdmFyaWFudC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NGZlZDZhNDg5ODIyOGZkY2Y5N2E5ODJmZjQzYTc5MDE0OTI5OWI3Y2E5M2YyZjQyYjQzZTRlNGViNThkZTY3OQorc2l6ZSA0NTAKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9pbnN0YWxsLmJhdCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9pbnN0YWxsLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjM3MDExCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2luc3RhbGwuYmF0CkBAIC0wLDAgKzEsNjQgQEAKK0BlY2hvIG9mZgorCityZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3JlbSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorcmVtICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCityZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworY2FsbCBjb21waWxlLmJhdCAtTworCitlY2hvICogTWFraW5nIERpcmVjdG9yaWVzCisKK21rZGlyIHppcAorY2QgemlwCitta2RpciBsaWIKK21rZGlyIGRvY3MKK2NkIGRvY3MKK21rZGlyIEltYWdlcworY2QgSW1hZ2VzCitta2RpciBTY3JlZW5zaG90cworY2QgLi4KK21rZGlyIFR1dG9yaWFsCitta2RpciBWaWV3cworY2QgLi4KK21rZGlyIFJlcG9ydHMKK2NkIC4uCisKK2VjaG8gKiBDb3B5aW5nIEZpbGVzCisKK2VjaG8gKiogQ29weWluZyBCYXRjaCBGaWxlcyBhbmQgUHJvcGVydGllcworCitjb3B5IFJCTWFuYWdlci5qYXIgemlwCitjb3B5IFJCUmVwb3J0ZXIuYmF0IHppcAorY29weSByYm1hbmFnZXJfc2Nhbm5lci54bWwgemlwCitjb3B5IHJlc291cmNlc1xwcmVmZXJlbmNlcy5wcm9wZXJ0aWVzIHppcAorYXR0cmliIC1yIHppcC9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCisKK2VjaG8gKiogQ29weWluZyBEb2N1bWVudGF0aW9uCisKK2NkIGRvY3MKK2NvcHkgKi5odG1sIC4uXHppcFxkb2NzXAorY2QgSW1hZ2VzCitjb3B5ICouZ2lmIC4uXC4uXHppcFxkb2NzXEltYWdlc1wKK2NvcHkgKi5qcGcgLi5cLi5cemlwXGRvY3NcSW1hZ2VzXAorY2QgU2NyZWVuc2hvdHMKK2NvcHkgKi5naWYgLi5cLi5cLi5cemlwXGRvY3NcSW1hZ2VzXFNjcmVlbnNob3RzXAorY29weSAqLmpwZyAuLlwuLlwuLlx6aXBcZG9jc1xJbWFnZXNcU2NyZWVuc2hvdHNcCitjZCAuLlwuLlxUdXRvcmlhbAorY29weSAqLmh0bWwgLi5cLi5cemlwXGRvY3NcVHV0b3JpYWxcCitjZCAuLlxWaWV3cworY29weSAqLmh0bWwgLi5cLi5cemlwXGRvY3NcVmlld3NcCitjZCAuLlwuLgorCitlY2hvICoqIENvcHlpbmcgSmFyIEZpbGVzCisKK2NkIGxpYgorY29weSAqLmphciAuLlx6aXBcbGliXAorY2QgLi4KKworZWNobyAqKiBDb3B5aW5nIExpY2Vuc2UKK2NvcHkgLi5cLi5cLi5cbGljZW5zZS5odG1sIHppcAorCitAZWNobyAqIERpcmVjdG9yeSBjcmVhdGVkOiB6aXAKK0BlY2hvICoqIERvbid0IGZvcmdldCB0byBtb2RpZnkgcHJlZmVyZW5jZXMucHJvcGVydGllcworcGF1c2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vbWFuaWZlc3Quc3R1YiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9tYW5pZmVzdC5zdHViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Njc0MjkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vbWFuaWZlc3Quc3R1YgpAQCAtMCwwICsxLDEyIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK1NwZWNpZmljYXRpb24tVGl0bGU6IFJlc291cmNlIEJ1bmRsZSBNYW5hZ2VyCitTcGVjaWZpY2F0aW9uLVZlcnNpb246IDAuNy4xCitTcGVjaWZpY2F0aW9uLVZlbmRvcjogSUJNIENvcnBvcmF0aW9uCitJbXBsZW1lbnRhdGlvbi1UaXRsZTogUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIKK0ltcGxlbWVudGF0aW9uLVZlcnNpb246IDAuNy4xCitJbXBsZW1lbnRhdGlvbi1WZW5kb3I6IElCTSBDb3Jwb3JhdGlvbgorSW1wbGVtZW50YXRpb24tVmVuZG9yLUlkOiBjb20uaWJtCitNYWluLUNsYXNzOiBjb20uaWJtLnJibS5SQk1hbmFnZXIKK0NsYXNzLVBhdGg6IGxpYi94ZXJjZXMuamFyCisKK05hbWU6IGNvbS9pYm0vcmJtCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vcHJlZmVyZW5jZXMucHJvcGVydGllcyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2ZlODAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcHJlZmVyZW5jZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDMzIEBACisjUkJNYW5hZ2VyIFByZWZlcmVuY2VzCisjRnJpIE1heSAxMCAwODo1NzoxOSBQRFQgMjAwMgorcmVwb3J0ZXJfZm9ybWF0X2h0bWxfZmlsZT1yZXBvcnQuaHRtbAordXNlcm5hbWU9VW5rbm93bgorcmVwb3J0ZXJfZm9ybWF0X3RleHRfZGV0YWlsPUhpZ2gKK3JlcG9ydGVyX2Zvcm1hdF94bWxfZGV0YWlsPUhpZ2gKK3JlcG9ydGVyX2Zvcm1hdF9obXRsX2VuYWJsZWQ9WWVzCityZXBvcnRlcl9lbmFibGVkPVllcworcmVwb3J0ZXJfZm9ybWF0X3htbF9maWxlPXJlcG9ydC54bWwKK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfaG91cj0xCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3ZhbHVlPTEKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdW5pdHM9SG91cnMKK3JlcG9ydGVyX3BlcmZvcm1fc2Nhbj1ZZXMKK3JlcG9ydGVyX2Zvcm1hdF90ZXh0X2ZpbGU9cmVwb3J0LnR4dAorcmVwb3J0ZXJfZm9ybWF0X3htbF9lbmFibGVkPVllcworcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9kYXk9U2F0dXJkYXkKK2xvY2FsZT1lbgorcmVwb3J0ZXJfaW50ZXJ2YWw9U2VxdWVudGlhbAorcmVjZW50ZmlsZWxvYzM9CityZWNlbnRmaWxlbG9jMj0KK3JlY2VudGZpbGVsb2MxPQorcmVjZW50ZmlsZWxvYzA9CityZXBvcnRlcl9zY2FuX2ZpbGU9Li9yYm1hbmFnZXJfc2Nhbm5lci54bWwKK3JlcG9ydGVyX2Zvcm1hdF9odG1sX2VuYWJsZWQ9WWVzCityZWNlbnRmaWxlaWQzPQorcmVjZW50ZmlsZWlkMj0KK3JlY2VudGZpbGVpZDE9CityZWNlbnRmaWxlaWQwPQorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGU9MDAKK3JlcG9ydGVyX2Zvcm1hdF90ZXh0X2VuYWJsZWQ9WWVzCityZXBvcnRlcl9iYXNlX2NsYXNzX2ZpbGU9CityZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5PQorcmVwb3J0ZXJfZm9ybWF0X2h0bWxfZGV0YWlsPUhpZ2gKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yYm1hbmFnZXJfc2Nhbm5lci54bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmJtYW5hZ2VyX3NjYW5uZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGFiMjkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmJtYW5hZ2VyX3NjYW5uZXIueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4gCis8UkJGaWxlU2Nhbm5lciBuYW1lPSJSQk1hbmFnZXIgU2Nhbm5lciIgZmlsZW5hbWU9InJibWFuYWdlcl9zY2FubmVyLnhtbCI+CisJPEZpbGVSdWxlcz4KKwkJPCEtLSAgRmlsZVJ1bGVzIGNhbiBoYXZlIGF0dHJpYnV0ZXMgc3RhcnRzX3dpdGgsIGVuZHNfd2l0aCwgYW5kIGNvbnRhaW5zIC0tPiAKKwkJPEZpbGVSdWxlIG5hbWU9IkphdmEgRmlsZSIgZW5kc193aXRoPSIuamF2YSIgLz4gCisJCTxGaWxlUnVsZSBuYW1lPSJYU0wgRmlsZSIgZW5kc193aXRoPSIueHNsIiAvPiAKKwk8L0ZpbGVSdWxlcz4KKwk8UGFyc2VSdWxlcz4KKwkJPCEtLSAgUGFyc2VSdWxlcyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIGZvbGxvd3MgYW5kIHByZWNlZGVzIC0tPiAKKwkJPFBhcnNlUnVsZSBuYW1lPSJKYXZhIHN0YXRpYyByZXNvdXJjZSIgZm9sbG93cz0iUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCZxdW90OyIgcHJlY2VkZXM9IiZxdW90OyIgLz4KKwk8L1BhcnNlUnVsZXM+CisJPFNjYW4+CisJCTxEaXJlY3RvcnkgbG9jYXRpb249Ii4iIHJlY3Vyc2VfZGlyZWN0b3JpZXM9InRydWUiPgorCQkJPFJ1bGVzPgorCQkJCTxBcHBseUZpbGVSdWxlIG5hbWU9IkphdmEgRmlsZSI+CisJCQkJCTxBcHBseVBhcnNlUnVsZSBuYW1lPSJKYXZhIHN0YXRpYyByZXNvdXJjZSIgLz4KKwkJCQk8L0FwcGx5RmlsZVJ1bGU+CisJCQk8L1J1bGVzPgorCQk8L0RpcmVjdG9yeT4KKwk8L1NjYW4+Cis8L1JCRmlsZVNjYW5uZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3JlYWRtZS50eHQgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThmMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3JlYWRtZS50eHQKQEAgLTAsMCArMSwxMiBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFJCTWFuYWdlciAoUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIpCisKK1RvIHJ1biB0aGUgUkJNYW5hZ2VyLmphciwgZG91YmxlIGNsaWNrIG9uIFJCTWFuYWdlci5qYXIgaW4gV2luZG93cworCW9yIHJ1biAiamF2YSAtamFyIFJCTWFuYWdlci5qYXIiIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KK1RvIGNyZWF0ZSB0aGUgUkJNYW5hZ2VyLmphciBmaWxlLCB1c2U6IGNvbXBpbGUuYmF0CitUbyBjcmVhdGUgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIHVzZTogaW5zdGFsbC5iYXQKKworSGVscCBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgY29udGFpbmVkIGluIHRoZSBkb2NzIGRpcmVjdG9yeS4KKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBSQk1hbmFnZXIgcmVxdWlyZXMgdmVyc2lvbiAzLjEuMCBvZiB0aGUKK3hlcmNlcy5qYXIgZmlsZSB0byBjb21waWxlLCBidXQgZG9lcyBub3QgcmVxdWlyZSBpdCBmb3IgYmFzaWMKK2Z1bmN0aW9uYWxpdHkuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIucHJvcGVydGllcyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjYjY0OAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMjEzIEBACisjIEBmaWxlICAgICAgICAgIFJlc291cmNlIEJ1bmRsZSBNYW5hZ2VyIEJhc2UgQ2xhc3MKKyMgQGZpbGVFbmNvZGluZyAgCisjIEBmaWxlTGFuZ3VhZ2UgIEVuZ2xpc2gKKyMgQGZpbGVDb3VudHJ5ICAgVS5TLgorIyBAZmlsZVZhcmlhbnQgICAKKyMgQGZpbGVNYW5hZ2VyICAgSmFyZWQgSmFja3NvbgorIyBAZmlsZUNvbW1lbnQgICBUaGlzIGlzIHRoZSBCYXNlIENsYXNzIG9mIHRoZSB0cmFuc2xhdGlvbiByZXNvdXJjZSBidW5kbGUgdXNlZCBieSB0aGlzIGFwcGxpY2F0aW9uCisKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBHcm91cHMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9uIEl0ZW1zIGZvciB0aGUgQmFzZSBDbGFzcyBHcm91cCB0YWJiZWQgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfY29tbWVudD1Hcm91cFwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfbmFtZT1Hcm91cFwgTmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfb3B0aW9ucz1SZXNvdXJjZVwgR3JvdXBcIE9wdGlvbnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9pdGVtX29wdGlvbnM9UmVzb3VyY2VcIEl0ZW1cIE9wdGlvbnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19maWxlX2dyb3VwPVJlc291cmNlXCBGaWxlcworCisjCisjIEBncm91cCBCYXNlIENsYXNzIFN0YXRpc3RpY3MgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IEFsbCB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgYXBwZWFyaW5nIG9uIHRoZSBzdGF0aXN0aWNzIHBhbmUgZm9yIHRoZSBiYXNlIGNsYXNzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19kdXBsaWNhdGVzX2NvdW50PU51bWJlclwgb2ZcIER1cGxpY2F0ZVwgUmVzb3VyY2VcIEtleXNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfY291bnQ9TnVtYmVyXCBvZlwgUmVzb3VyY2VcIEZpbGVzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9jb3VudD1OdW1iZXJcIG9mXCBSZXNvdXJjZVwgR3JvdXBzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9ncm91cD1SZXNvdXJjZVwgR3JvdXBzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9jb3VudD1OdW1iZXJcIG9mXCBSZXNvdXJjZVwgSXRlbXNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2l0ZW1fZ3JvdXA9UmVzb3VyY2VcIEl0ZW1zCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXBwZWFyaW5nIG9uIHRoZSBCYXNlIENsYXNzIFVudHJhbnNsYXRlZCBJdGVtcyBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBmaWxlIGJlaW5nIHZpZXdlZAorYmFzZXVudHJhbnNfZmlsZT1GaWxlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgcmVzb3VyY2UgaXRlbXMgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGZpbGUKK2Jhc2V1bnRyYW5zX3VudHJhbnNfY291bnQ9TnVtYmVyXCBvZlwgVW50cmFuc2xhdGVkXCBJdGVtc1w6CisKKyMKKyMgQGdyb3VwIEJ1dHRvbiBOYW1lcworIworIyBAZ3JvdXBDb21tZW50IFRoZSBuYW1lcyBkaXNwbGF5ZWQgb24gdGhlIHZhcmlvdXMgYnV0dG9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBsYW5ndWFnZSBmaWxlCitidXR0b25fYWRkX2ZpbGU9QWRkXCBhXCBOZXdcIFJlc291cmNlXCBGaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9maWxlX3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9hZGRfZ3JvdXA9QWRkXCBhXCBOZXdcIFJlc291cmNlXCBHcm91cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSB0cmFuc2xhdGlvbiBpdGVtCitidXR0b25fYWRkX3Jlc291cmNlPUFkZFwgYVwgTmV3XCBSZXNvdXJjZVwgSXRlbQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfcmVzb3VyY2VfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBjYW5jZWxpbmcgYWN0aW9ucworYnV0dG9uX2NhbmNlbD1DYW5jZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIGEgY2hvaWNlIG9yIHNlbGVjdGlvbiBvcHRpb24KK2J1dHRvbl9jaG9vc2U9Q2hvb3NlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2Nob29zZV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGdlbmVyaWMgY3JlYXRpb24gb2YgZ3JvdXBzLCBpdGVtcywgZmlsZXMsIGV0Yy4KK2J1dHRvbl9jcmVhdGU9Q3JlYXRlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEZvciBjcmVhdGlvbiBvZiBhIHJlc291cmNlIGdyb3VwCitidXR0b25fY3JlYXRlX2dyb3VwPUNyZWF0ZVwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX2dyb3VwX3RyaWdnZXI9ZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIGNyZWF0aW5nIGFuIGl0ZW0gdGhlbiBjb250aW51aW5nIGNyZWF0aW5nIG1vcmUgaXRlbXMKK2J1dHRvbl9jcmVhdGVfbW9yZT1DcmVhdGVcICZcIENvbnRpbnVlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9tb3JlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgYSBAbW9kaWZpZXIgYQorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZT1DcmVhdGVcIFJlc291cmNlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgYSBAbW9kaWZpZXIgYQorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIGEgZ3JvdXAgYW5kIGl0cyBjb250ZW50cworYnV0dG9uX2RlbGV0ZV9ncm91cD1EZWxldGVcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcGVybWFuZW50bHkgcmVtb3ZpbmcgYSByZXNvdXJjZSBmcm9tIHRoZSBidW5kbGUKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2U9RGVsZXRlXCBSZXNvdXJjZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlcj1kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgR2VuZXJpYyBlZGl0IGJ1dHRvbgorYnV0dG9uX2VkaXQ9RWRpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgYSBAbW9kaWZpZXIgYQorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgZ3JvdXAgbmFtZSBhbmQgY29tbWVudAorYnV0dG9uX2VkaXRfZ3JvdXA9RWRpdFwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIGEgQG1vZGlmaWVyIGEKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBlZGl0aW5nIHJlc291cmNlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcga2V5IGFuZCB0cmFuc2xhdGlvbgorYnV0dG9uX2VkaXRfcmVzb3VyY2U9RWRpdFwgUmVzb3VyY2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fZWRpdF9yZXNvdXJjZV90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBpbml0aWF0aW5nIGFuIGltcG9ydCBvZiByZXNvdXJjZXMgZnJvbSBhbiBhbHRlcm5hdGUgc291cmNlCitidXR0b25faW1wb3J0PUltcG9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9pbXBvcnRfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBhbGxvd3MgYSBzZWxlY3RlZCByZXNvdXJjZSB0byBiZSBtYXJrZWQgYXMgdHJhbnNsYXRlZCB3aXRob3V0IGZ1cnRoZXIgZWRpdGluZworYnV0dG9uX21hcmtfdHJhbnNsYXRlZD1NYXJrXCBSZXNvdXJjZVwgYXNcIFRyYW5zbGF0ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fbWFya190cmFuc2xhdGVkX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGFkZGluZyB0aGUgY3VycmVudCByZXNvdXJjZSBidW5kbGUgaW4gdGhlIG1haW4gYXBwbGljYXRpb24gdG8gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X2FkZD1BZGRcIEN1cnJlbnRcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2FkZF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjbG9zaW5nIHRoZSBwcm9qZWN0IHdpbmRvdworYnV0dG9uX3Byb2plY3RfY2xvc2U9Q2xvc2VcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9jbG9zZV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfbmV3PU5ld1wgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X25ld190cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBvcGVuaW5nIGEgcHJvamVjdCBmaWxlCitidXR0b25fcHJvamVjdF9vcGVuPU9wZW5cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9vcGVuX3RyaWdnZXI9bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZT1SZW1vdmVcIFNlbGVjdGlvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjYXVzaW5nIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUgdG8gYmUgdGhlIG9uZSBiZWluZyBlZGl0ZWQgaW4gdGhlIG1haW4gYXBwbGljYXRpb24KK2J1dHRvbl9wcm9qZWN0X3NlbGVjdD1FZGl0XCBTZWxlY3RlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3NlbGVjdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgYSBjb21wbGV0ZSBzZWFyY2gKK2J1dHRvbl9zZWFyY2hfZmluZF9hbGw9RmluZFwgQWxsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbF90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgY29tcGxldGUgc2VhcmNoIGFuZCByZXBsYWNlCitidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsPVJlcGxhY2VcIEFsbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGxfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIHVwZGF0aW5nIGluZm9ybWF0aW9uCitidXR0b25fdXBkYXRlPVVwZGF0ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl91cGRhdGVfdHJpZ2dlcj11CisKKyMKKyMgQGdyb3VwIERpYWxvZ3MKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbnMgdmFyaW91cyBkaWFsb2cgYm94ZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2Ygd2V0aGVyIG9yIG5vdCBhIG5ldyBmaWxlIHdpbGwgYmUgcG9wdWxhdGVkIGZyb20gdGhlIGVsZW1lbnRzIGluIHRoZSBiYXNlIGNsYXNzCitkaWFsb2dfY2hlY2tib3hfY29weV9lbGVtZW50cz1Db3B5XCBlbnRyaWVzXCBmcm9tXCB0aGVcIGJhc2VcIGNsYXNzXCB0b1wgdGhlXCBuZXdcIGZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBJbmRpY2F0b3Igb2Ygd2V0aGVyIGFuIGl0ZW0gaXMgdHJhbnNsYXRlZCBvciBub3QKK2RpYWxvZ19jaGVja2JveF90cmFuc2xhdGVkPVRyYW5zbGF0ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19jb21tZW50PUNvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2NvdW50cnk9Q291bnRyeQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0ZWQ9Q3JlYXRlZFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRvcj1DcmVhdGVkXCBCeVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQHsxfSBUaGUgZGF0ZQorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gaW52b2x2ZWQKKyMgQGNvbW1lbnQgVGhlIGRhdGUgYW5kIHBlcnNvbiBhc3NvY2lhdGVkIHdpdGggYSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYW4gaXRlbQorZGlhbG9nX2RhdGVfcGVyc29uPXswfVwgYnlcIHsxfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfY29tbWVudD1EZWZhdWx0XCBDb21tZW50XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWZhdWx0X3RyYW5zbGF0aW9uPURlZmF1bHRcIFRyYW5zbGF0aW9uXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZmlsZT1EZWxldGVcIGFcIFJlc291cmNlXCBGaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2dyb3VwPURlbGV0ZVwgYVwgUmVzb3VyY2VcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2l0ZW09RGVsZXRlXCBhXCBSZXNvdXJjZVwgSXRlbQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBXYXJuaW5nIGRpc3BsYXllZCB3aGVuIGEgdXNlciBhc2tzIGZvciBhIGRlbGV0aW9uIG9mIGEgZmlsZS4gUHJvbXB0cyBmb3IgJ1llcycgb3IgJ05vJworZGlhbG9nX2RlbGV0ZV93YXJuaW5nPVdhcm5pbmdcIVwgVGhlXCBkZWxldGlvblwgb3BlcmF0aW9uXCBjYW5cIG5vXCBiZVwgdW5kb25lLlxuQXJlXCB5b3VcIHN1cmVcIHlvdVwgd2FudFwgdG9cIGNvbnRpbnVlPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2VuY29kaW5nPUVuY29kaW5nXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2NvbW1lbnQ9UmVzb3VyY2VcIEZpbGVcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPUJhc2VcIENsYXNzXCBQcm9wZXJ0eVwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGVzY3JpcHRpb24gb2YgRmlsZSBGaWx0ZXIgZm9yIFJCUmVwb3J0ZXIgWE1MIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlcworZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uX3NjYW49WE1MXCBSQlJlcG9ydGVyXCBTY2FuXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfaW5mbz1GaWxlXCBJbmZvcm1hdGlvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfbWFuYWdlcj1SZXNvdXJjZVwgTWFuYWdlclwgTmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV90aXRsZT1SZXNvdXJjZVwgRmlsZVwgVGl0bGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2dyb3VwPUdyb3VwXCBOYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cF9jb21tZW50PUdyb3VwXCBDb21tZW50XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19rZXk9RW50cnlcIEtleVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfbGFuZ3VhZ2U9TGFuZ3VhZ2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19sb29rdXBzPUxvb2t1cHNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVkPUxhc3RcIE1vZGlmaWVkXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllcj1MYXN0XCBNb2RpZmllZFwgQnlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgbGFuZ3VhZ2UsIGNvdW50cnksIG9yIHZhcmlhbnQgb2YgYSBsYW5ndWFnZSBmaWxlCitkaWFsb2dfbmFtZT1OYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIGEgbmFtZSBmb3IgdGhlIHJlc291cmNlIGJ1bmRsZSwgYmVmb3JlIGNyZWF0aW5nIHRoYXQgYnVuZGxlCitkaWFsb2dfbmV3X2Jhc2VjbGFzcz1QbGVhc2VcIGVudGVyXCBhXCBiYXNlXCBjbGFzc1wgbmFtZVwgZm9yXCB0aGVcIG5ld1wgcmVzb3VyY2VcIGJ1bmRsZS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGlhbG9nIHBvcHVwIHdpbmRvdyB0ZXh0IHByb21wdGluZyB0aGUgdXNlciBmb3IgdGhlIG5hbWUgb2YgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorZGlhbG9nX25ld19wcm9qZWN0PVBsZWFzZVwgZW50ZXJcIGFcIHRpdGxlXCBmb3JcIHlvdXJcIG5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlcyBtYWtpbmcgaXQgdGhyb3VnaCB0aGUgZmlsdGVyIHVwb24gb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZQorZGlhbG9nX29wZW5fZmlsZV9maWx0ZXI9QmFzZVwgQ2xhc3NcIFByb3BlcnR5XCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoaXMgaXMgYSBzZWN0aW9uIGhlYWRpbmcgZm9yIHNldHRpbmcgdGhlIGxvY2FsZQorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZT1Mb2NhbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBMb2NhbGVzIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIGZvciB0aGUgYXBwbGljYXRpb24KK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfZGVmaW5lZD1EZWZpbmVkXCBmb3JcIFJCTWFuYWdlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9pc289SVNPXCBTdGFuZGFyZHNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IExvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IEphdmEgVmlydHVhbCBNYWNoaW5lCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX21hY2hpbmU9TWFjaGluZVwgU3VwcG9ydGVkXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX3dhcm5pbmc9Tk9URVw6XCBMb2NhbGVcIGNoYW5nZXNcIGFyZVwgbm90XCBhcHBsaWVkXCB1bnRpbFwgYXBwbGljYXRpb25cIGlzXCByZXN0YXJ0ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb29rYW5kZmVlbD1Mb29rXCBBbmRcIEZlZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX3VzZXJuYW1lPVVzZXJcIE5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZXNjcmlwdG9yIHRoYXQgZ29lcyBpbnRvIEdVSSBmaWxlIGNob29zZXIKK2RpYWxvZ19wcm9qZWN0X2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPVJCTWFuYWdlclwgUHJvamVjdFwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRmlsZSBGaWx0ZXIgZGVzY3JpcHRpb24gZm9yIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0IGZpbGVzCitkaWFsb2dfcHJvamVjdF9maWx0ZXJfZGVzY3JpcHRpb249UmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiB0aGF0IG5vIHByb2plY3QgaXMgb3BlbiwgcGxhY2VkIGluIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nIHdoZXJlIHRoZSBwcm9qZWN0IG5hbWUgd291bGQgbm9ybWFsbHkgZ28KK2RpYWxvZ19wcm9qZWN0X25vbmVfc2VsZWN0ZWQ9Tm9cIEFjdGl2ZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgd2luZG93IHNob3dpbmcgYWxsIHRoZSByZXNvdXJjZSBidW5kbGVzIGluIGEgcHJvamVjdAorZGlhbG9nX3Byb2plY3RfdGl0bGU9UmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBQcm9tcHRzIHRoZSB1c2VyIGlmIHRoZXkgd291bGQgbGlrZSB0byBzYXZlIGNoYW5nZXMgYmVmb3JlIGV4aXRpbmcKK2RpYWxvZ19xdWl0X3NhdmU9V291bGRcIHlvdVwgbGlrZVwgdG9cIHNhdmVcIHlvdXJcIGNoYW5nZXNcIGJlZm9yZVwgcXVpdGluZ1wgUkJNYW5hZ2VyPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBIGdlbmVyaWMgcHJvcG1wdCB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3aXNoIHRvIHNhdmUgY2hhbmdlcworZGlhbG9nX3NhdmU9V291bGRcIHlvdVwgbGlrZVwgdG9cIHNhdmVcIHlvdXJcIGNoYW5nZXNcIHRvXCB0aGVcIHJlc291cmNlXCBidW5kbGU/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfc2VhcmNoX29wdGlvbnM9U2VhcmNoXCBPcHRpb25zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfc2VhcmNoX3BhcmFtPVNlYXJjaFwgRm9yXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgdGl0bGUgb2YgdGhlIGFib3V0IGRpYWxvZyBib3gKK2RpYWxvZ190aXRsZV9hYm91dF9yYm1hbmFnZXI9QWJvdXRcIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDEtMjIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgZGVsZXRpb24gb2YgYW4gZW50aXJlIHJlc291cmNlIGdyb3VwCitkaWFsb2dfdGl0bGVfZGVsZXRlX2dyb3VwPURlbGV0ZVwgUmVzb3VyY2VcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIHdoZW4gcHJvbXB0aW5nIHRvIGRlbGV0ZSBhIHJlc291cmNlCitkaWFsb2dfdGl0bGVfZGVsZXRlX2l0ZW09RGVsZXRlXCBSZXNvdXJjZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2VkaXRfZ3JvdXA9RWRpdFwgYVwgUmVzb3VyY2VcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9pdGVtPUVkaXRcIGFcIFJlc291cmNlXCBJdGVtCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2Vycm9yPUVycm9yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3JfY3JlYXRpbmdfYnVuZGxlPUVycm9yXCBDcmVhdGluZ1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDEtMjIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgd2hlbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIG5vdCBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZGlhbG9nX3RpdGxlX2Vycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0PUVycm9yXDpcIFVucmVhZGFibGVcIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGl0bGUgb24gYSB3YXJuaW5nIGRpYWxvZyB0aGF0IEkvTyBtYWxmdW5jdGlvbmVkIG9wZW5pbmcgYSBmaWxlCitkaWFsb2dfdGl0bGVfZXJyb3Jfb3BlbmluZ19maWxlPUVycm9yXCBPcGVuaW5nXCBGaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgYSBkaWFsb2cgYm94IGZvciBlbnRlcmluZyBzcGVjaWFsIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGV4cG9ydCBhIHJlc291cmNlIGJ1bmRsZSB0byBqYXZhIGNsYXNzIGNvZGUKK2RpYWxvZ190aXRsZV9leHBvcnRfamF2YV9vcHRpb25zPUV4cG9ydFwgUGFyYW1ldGVyc1w6XCBKYXZhXCBjbGFzcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgYSBkaWFsb2cgd2l0aCBhIHByb2dyZXNzIGJhciBnb3Zlcm5pbmcgaW1wb3J0IHN0YXR1cworZGlhbG9nX3RpdGxlX2ltcG9ydF9wcm9ncmVzcz1JbXBvcnRcIFByb2dyZXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIG5ldyBidW5kbGUKK2RpYWxvZ190aXRsZV9uZXdfYnVuZGxlPUNyZWF0ZVwgYVwgTmV3XCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUKK2RpYWxvZ190aXRsZV9uZXdfZmlsZT1DcmVhdGVcIGFcIE5ld1wgUmVzb3VyY2VcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9uZXdfZ3JvdXA9Q3JlYXRlXCBhXCBOZXdcIFJlc291cmNlXCBHcm91cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyByZXNvdXJjZQorZGlhbG9nX3RpdGxlX25ld19pdGVtPUNyZWF0ZVwgYVwgTmV3XCBSZXNvdXJjZVwgSXRlbQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgZGlhbG9nIGJveCBzaG93aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorZGlhbG9nX3RpdGxlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3ByZWZlcmVuY2VzPVByZWZlcmVuY2VzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNvbmZpcm1pbmcgZXhpdCBmcm9tIGFwcGxpY2F0aW9uCitkaWFsb2dfdGl0bGVfcXVpdD1RdWl0XCBSQk1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9zZWFyY2g9U2VhcmNoCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfdXNlcl9uYW1lPUVudGVyXCBVc2VyXCBOYW1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdHJhbnNsYXRpb249VHJhbnNsYXRpb25cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3VzZXJfbmFtZT1QbGVhc2VcIGVudGVyXCB5b3VyXCBuYW1lLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3ZhcmlhbnQ9VmFyaWFudAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2dyb3VwPURlbGV0aW5nXCB0aGlzXCBncm91cFwgd2lsbFwgY2F1c2VcIGFsbFwgaXRlbXNcIGluXCB0aGVcIGdyb3VwXCB0b1wgYmVcIHBlcm1hbmVudGx5XCByZW1vdmVkLlwgRG9cIHlvdVwgd2lzaFwgdG9cIGNvbnRpbnVlPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2l0ZW09RGVsZXRpbmdcIHRoZVwgcnNvdXJjZVwgaXRlbVwgd2lsbFwgY2F1c2VcIGl0XCB0b1wgYmVcIHBlcm1hbmVudGx5XCByZW1vdmVkLlwgRG9cIHlvdVwgd2lzaFwgdG9cIGNvbnRpbnVlPworCisjCisjIEBncm91cCBFcnJvciBNZXNzYWdlcworIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcj1FcnJvcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gYWRkIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcHJvamVjdC4KK2Vycm9yX2FkZGluZ19wcm9qZWN0X2J1bmRsZT1BblwgZXJyb3JcIG9jY3VycmVkXCB0cnlpbmdcIHRvXCBhZGRcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgeW91XCBzZWxlY3RlZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yX2Jhc2VjbGFzc193aGl0ZXNwYWNlPVJlc291cmNlXCBuYW1lc1wgY2FuXCBub3RcIGhhdmVcIGFueVwgd2hpdGVcIHNwYWNlXCBjaGFyYWN0ZXJzXCBpblwgdGhlbS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yX2J1bmRsZV9ub3RfY3JlYXRlZD1Ob1wgUmVzb3VyY2VcIEJ1bmRsZVwgd2FzXCBjcmVhdGVkLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2ZpbGU9QVwgcHJvYmxlbVwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCB0aGVcIHJlc291cmNlXCBmaWxlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2dyb3VwPUFcIHByb2JsZW1cIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIGNyZWF0ZVwgdGhlXCBncm91cC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9pdGVtPUFcIHByb2JsZW1cIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIGNyZWF0ZVwgdGhlXCBlbnRyeS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gY3JlYXRpbmcgYSBwcm9qZWN0CitlcnJvcl9jcmVhdGluZ19wcm9qZWN0PUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCBhXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBtZXNzYWdlIGZyb20gYW4gSU9FeGNlcHRpb24gdGhhdCBpcyB0aHJvd24KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBmaWxlCitlcnJvcl9kZWxldGluZz1UaGVyZVwgd2FzXCBhblwgZXJyb3JcIHRyeWluZ1wgdG9cIGRlbGV0ZVwgdGhlXCBmaWxlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBBbiBlcnJvciB0aGF0IG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBkZWxldGUgYSBmaWxlLCBidXQgdGhlIHZpcnR1YWwgbWFjaGluZSBjYW4gbm90IGRvIHNvCitlcnJvcl9kZWxldGlvbl9ub3RfcG9zc2libGU9UkJNYW5hZ2VyXCB3YXNcIHVuYWJsZVwgdG9cIGRlbGV0ZVwgdGhlXCBmaWxlLlwgUGVybWlzc2lvblwgZGVuaWVkLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2UgZm9yIGV4cG9ydGluZyByZXNvdXJjZSBidW5kbGVzCitlcnJvcl9leHBvcnQ9VGhlcmVcIGhhc1wgYmVlblwgYW5cIGVycm9yXCBleHBvcnRpbmdcIHRoZVwgcmVzb3VyY2VcIGJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfaW50ZXJuYWw9SW50ZXJuYWxcIEVycm9yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfZmlsZT1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIG1vZGlmeVwgdGhlXCByZXNvdXJjZVwgZmlsZS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9ncm91cD1UaGVyZVwgd2FzXCBhXCBwcm9ibGVtXCB0cnlpbmdcIHRvXCBtb2RpZnlcIHRoaXNcIGdyb3VwLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2l0ZW09QW5cIHByb2JsZW1cIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIG1vZGlmeVwgdGhlXCBlbnRyeQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9maWxlPUluXCBvcmRlclwgdG9cIGNyZWF0ZVwgYVwgcmVzb3VyY2VcIGZpbGUsXCB5b3VcIG11c3RcIGZpcnN0XCBvcGVuXCBvclwgY3JlYXRlXCBhXCBSZXNvdXJjZVwgQnVuZGxlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9ncm91cD1Jblwgb3JkZXJcIHRvXCBjcmVhdGVcIGFcIGdyb3VwLFwgeW91XCBtdXN0XCBmaXJzdFwgb3Blblwgb3JcIGNyZWF0ZVwgYVwgUmVzb3VyY2VcIEJ1bmRsZS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBhIHJlc291cmNlLCB3aXRob3V0IGFuIG9wZW4gcmVzb3VyY2UgYnVuZGxlCitlcnJvcl9ub19idW5kbGVfZm9yX2l0ZW09UGxlYXNlXCBjcmVhdGVcIG9yXCBvcGVuXCBhXCByZXNvdXJjZVwgYnVuZGxlXCBiZWZvcmVcIGF0dGVtcHRpbmdcIHRvXCBjcmVhdGVcIGFcIHJlc291cmNlXCBpdGVtLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2Vycm9yX25vX2tleV9yZXBsYWNlPVJlcGxhY2VcIGRvZXNcIG5vdFwgZnVuY3Rpb25cIGZvclwgUmVzb3VyY2VcIEtleXMuXCBBbGxcIG90aGVyXCByZXBsYWNlc1wgd2lsbFwgYmVcIHBlcmZvcm1lZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDEtMjIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIHRoYXQgUkJNYW5hZ2VyIGNhbiBub3QgcmVhZCB0aGUgZmlsZSBhcyBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9VGhlXCBzZWxlY3RlZFwgcmVzb3VyY2VcIGJ1bmRsZVwgd2FzXCBub3RcIGNyZWF0ZWRcIGJ5XCBSQk1hbmFnZXJcIG9yXCBoYXNcIGJlZW5cIGRhbWFnZWQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3b3VsZCBub3Qgb3BlbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIG9jY3VyaW5nIG9uIGFuIEkvTyBlcnJvciB0cnlpbmcgdG8gb3BlbiBhIGZpbGUKK2Vycm9yX29wZW5pbmdfZmlsZT1Db3VsZFwgbm90XCBvcGVuXCB0aGVcIGZpbGVcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIFJCTWFuYWdlciBlbmNvdW50ZXJzIGFuIGVycm9yIHdyaXRpbmcgcHJlZmVyZW5jZXMgdG8gdGhlIGZpbGUgc3lzdGVtCitlcnJvcl9wcmVmZXJlbmNlc19zYXZlPVRoZXJlXCB3YXNcIGFuXCBlcnJvclwgYXR0ZW1wdGluZ1wgdG9cIHNhdmVcIHlvdXJcIHByZWZlcmVuY2VzLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZAorIyBAY29tbWVudCBBIG1lc3NhZ2UgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGluIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlCitlcnJvcl9zYXZpbmc9VGhlcmVcIHdhc1wgYW5cIGVycm9yXCBzYXZpbmdcIHRoZVwgcmVzb3VyY2VcIGJ1bmRsZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gc2F2aW5nIGEgcHJvamVjdAorZXJyb3Jfc2F2aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBzYXZlXCB0aGVcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1Z2dlc3QgdHJ5aW5nIHRvIGltcG9ydCB0aGUgcmVzb3VyY2UgYnVuZGxlIGluc3RlYWQgb2Ygb3BlbmluZyBpdC4KK2Vycm9yX3N1Z2dlc3RfaW1wb3J0X3Byb3BlcnRpZXM9VHJ5XCBpbXBvcnRpbmdcIHRoZVwgcmVzb3VyY2VcIGJ1bmRsZVwgaW5zdGVhZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2ZpbGU9UGxlYXNlXCB0cnlcIGFnYWluXCB3aXRoXCBkaWZmZXJlbnRcIGVuY29kaW5nXCB2YWx1ZXMuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9ncm91cD1QbGVhc2VcIHRyeVwgYWdhaW5cIHdpdGhcIGFcIGRpZmZlcmVudFwgZ3JvdXBcIG5hbWUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9pdGVtPVBsZWFzZVwgdHJ5XCBhZ2Fpblwgd2l0aFwgYVwgZGlmZmVyZW50XCBlbnRyeVwga2V5LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBWYWx1ZSBpbnNlcnRlZCBpbnRvIHRhYmxlIGNlbGxzIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VyZWQKK3RhYmxlX2NlbGxfZXJyb3I9KkVycm9yKgorCisjCisjIEBncm91cCBFeHBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGV4cG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGZvciBjcmVhdGVkIGEgcHJvdGVjdGVkIGNsYXNzCitleHBvcnRfamF2YV9jbGFzc19wcm90ZWN0ZWQ9Q3JlYXRlXCBhXCBwcm90ZWN0ZWRcIGNsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIHNldHRpbmcgdGhlIGNyZWF0ZWQgY2xhc3MgYXMgcHVibGljCitleHBvcnRfamF2YV9jbGFzc19wdWJsaWM9Q3JlYXRlXCBhXCBwdWJsaWNcIGNsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBwcm90ZWN0ZWQgbWV0aG9kcyBpbiB0aGUgamF2YSBjbGFzcworZXhwb3J0X2phdmFfbWV0aG9kc19wcm90ZWN0ZWQ9Q3JlYXRlXCBwcm90ZWN0ZWRcIG1ldGhvZHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHB1YmxpYyBtZXRob2RzCitleHBvcnRfamF2YV9tZXRob2RzX3B1YmxpYz1DcmVhdGVcIHB1YmxpY1wgbWV0aG9kcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaXRsZSBvZiBhIGNoZWNrIGJveCBmb2xsb3dlZCBieSBhIHRleHQgZmllbGQgZm9yIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdG8gdXNlIGEgcGFja2FnZSBpbiB0aGUgZ2VuZXJhdGVkIGphdmEgY2xhc3MgYW5kIHdoYXQgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGNhbGxlZAorZXhwb3J0X2phdmFfcGFja2FnZT1TcGVjaWZ5XCBhXCBwYWNrYWdlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGV4dCBwbGFjZWQgaW4gYSBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoZSBkaWFsb2cgYm94IGZvciBzcGVjaWZ5aW5nIHBhcmFtZXRlcnMgY29uY2VybmluZyB0aGUgZXhwb3J0IG9mIHJlc291cmNlIGJ1bmRsZXMgaW50byBhIGphdmEgY2xhc3MKK2V4cG9ydF9qYXZhX3RpdGxlPVBsZWFzZVwgc3BlY2lmeVwgdGhlXCBmb2xsb3dpbmdcIHBhcmFtZXRlcnNcIGZvclwgeW91clwgSmF2YVwgY2xhc3NcOgorCisjCisjIEBncm91cCBHZW5lcmFsCisjCisjIEBncm91cENvbW1lbnQgU29tZSBpdGVtcyB0aGF0IGFyZSBjb21tb24gYWNjcm9zcyBncm91cHMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBmaWxlIG9yIGNsYXNzIGNvbXBvc2VkIG9mIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9ucyBmb3IgdGhlIGJ1bmRsZQorYmFzZWNsYXNzPUJhc2VcIENsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwNC0wNi0yOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgR2VvcmdlCisjIEBjb21tZW50IFRoaXMgaXMgdGhlIGxlZ2FsIGNvcHlyaWdodCBub3RpY2UKK2NvcHlyaWdodD0oQylcIENvcHlyaWdodFwgSUJNXCBDb3JwLlwgMjAwMC0yMDA0XCAtXCBBbGxcIFJpZ2h0c1wgUmVzZXJ2ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VybmVyYWwgdXNlIGZvciBmaWxlIGRpcmVjdG9yaWVzCitkaXJlY3Rvcnk9RGlyZWN0b3J5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitncm91cHM9R3JvdXBzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZpbGUgaW4gdGhlICdJbWFnZXMnIGRpcmVjdG9yeSB0aGF0IHJlcHJlc2VudHMgdGhlIGxvZ28gc2VlbiBhdCB0aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbgorbG9nb19maWxlbmFtZT1UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSB3aGVuIHZpZXdpbmcgYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdmlldyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBwcm9qZWN0Citub19wcm9qZWN0PURlZmF1bHRcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVHJlZSBub2RlIHRpdGxlIGRlZmF1bHRlZCB0byB3aGVuIG5vIHJlc291cmNlIGJ1bmRsZSBvciBwcm9qZWN0IGhhcyBiZWVuIG9wZW5lZCBieSB0aGUgdXNlcgorbm9fcHJvamVjdF9idW5kbGU9Tm9cIFByb2plY3RcIG9yXCBSZXNvdXJjZVwgQnVuZGxlXCBPcGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIHRvcCB0cmVlIG5vZGUgdGl0bGUsIHdoZW4gbm8gcmVzb3VyY2UgYnVuZGxlIGhhcyBiZWVuIG9wZW5lZCBvciBjcmVhdGVkCitub19yZXNvdXJjZV9idW5kbGU9Tm9cIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK25vbmU9Tm9uZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQcm9qZWN0IHRhYmxlIGNvbHVtbiBuYW1lIC0gTG9jYXRpb24gb2YgYSByZXNvdXJjZSBidW5kbGUKK3Byb2plY3RfdGFibGVfZmlsZV9sb2NhdGlvbj1GaWxlXCBMb2NhdGlvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUYWJsZSBDb2x1bW4gTmFtZSBmb3IgcmVzb3VyY2UgYnVuZGxlIG5hbWUKK3Byb2plY3RfdGFibGVfcmVzb3VyY2VfYnVuZGxlPVJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoaXMgYXBwbGljYXRpb24KK3JibWFuYWdlcj1SQk1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgCityYm1hbmFnZXJfY29udGFjdD1BdXRob3JzXDpcIEphcmVkXCBKYWNrc29uXCAmXCBHZW9yZ2VcIFJob3RlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBmdWxsIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX21hbmFnZXI9UmVzb3VyY2VcIEJ1bmRsZVwgTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAordGFibGVfY29sdW1uX2Vycm9yPVRhYmxlXCBDb2x1bW5cIEVycm9yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IENvdW50cnkgSVNPIGNvZGUKKyMgQGNvbW1lbnQgTm9kZSB0aXRsZSwgdW5kZXIgd2hpY2ggYWxsIGZpbGVzIG9mIHRoZSBzYW1lIGNvdW50cnksIGxhbmd1YWdlIHJlc2lkZQordHJlZV9jb3VudHJ5X25vZGU9Q291bnRyeVwgQ29kZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAezB9IExhbmd1YWdlIEVuY29kaW5nCisjIEBjb21tZW50IFRoZSBub2RlIGJlbG93IHdoaWNoIGxhbmd1YWdlcyBvZiBvbmUgZW5jb2RpbmcgYXJlIGdyb3VwZWQKK3RyZWVfbGFuZ3VhZ2Vfbm9kZT1MYW5ndWFnZVwgQ29kZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK3RyZWVfdmFyaWFudF9ub2RlPVZhcmlhbnRzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgbmFtZSBhc3NpZ25lZCBhcyBhIHVzZXIgbmFtZSB3aGVuIHRoZSB1c2VyIG5hbWUgaXMgbm90IHNwZWNpZmllZAordW5rbm93bl91c2VyPVVua25vd24KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK3VudGl0bGVkPVVudGl0bGVkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCit1bnRyYW5zbGF0ZWRfaXRlbXM9VW50cmFuc2xhdGVkXCBJdGVtcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEB7MH0gVGhlIHZlcnNpb24gbnVtYmVyCisjIEBjb21tZW50IFRoZSB2ZXJzaW9uIG9mIHRoaXMgYXBwbGljYXRpb24KK3ZlcnNpb249VmVyc2lvblwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGdlbmVyYWwgdXNlIFdhcm5pbmcKK3dhcm5pbmc9V2FybmluZworCisjCisjIEBncm91cCBJbXBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGltcG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgVE1YIGZpbGVzCitpbXBvcnRfVE1YX2ZpbGVfZGVzY3JpcHRpb249VE1YXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFRNWCBYTUwgZmlsZXMKK2ltcG9ydF9UTVhfdGl0bGU9VE1YXCBGaWxlXCBJbXBvcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSBmaWxlIGNob29zZXIgZm9yIGNob29zaW5nIFhMSUZGICgueGxmKSBmaWxlcworaW1wb3J0X1hMRl9maWxlX2Rlc2NyaXB0aW9uPVhMSUZGXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFhMSUZGICgueGxmKSBmaWxlcworaW1wb3J0X1hMRl90aXRsZT1YTElGRlwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgY29uZmxjaXRzIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzCitpbXBvcnRfY29uZmxpY3RfcHJvbXB0PVByb21wdFwgZm9yXCBlYWNoXCBjb25mbGljdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gc3BlY2lmeWluZyB3aGV0aGVyIGEgZ3JvdXAgZm91bmQgaW4gdGhlIHRhcmdldCBidXQgbm90IGZvdW5kIGluIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgb3Igbm90CitpbXBvcnRfZGVmYXVsdF9ncm91cF9jcmVhdGlvbj1DcmVhdGVcIGdyb3Vwc1wgbm90XCBleGlzdGluZ1wgaW5cIHRoZVwgY3VycmVudFwgYnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdG9pbiBmb3IgbWFya2luZyB0aGUgaW5jb21pbmcgdmFsdWVzIGFzIHRyYW5zbGF0ZWQgb3Igbm90CitpbXBvcnRfZGVmYXVsdF90cmFuc2xhdGVkPU1hcmtcIGFzXCB0cmFuc2xhdGVkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBvcHRpb25zIHNwZWNpZnlpbmcgdGhlIG1ldGEgZGF0YSB0byBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgcmVzb3VyY2VzIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGltcG9ydCBzb3VyY2UKK2ltcG9ydF9kZWZhdWx0X3ZhbHVlcz1EZWZhdWx0XCBWYWx1ZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgbG9jYWxlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGluIHF1ZXN0aW9uCisjIEBjb21tZW50IEluc3RydWN0aW9ucyBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIHJlc29sdmUgYSBjb25mbGljdCB3aGVuIGltcG9ydGluZyByZXNvdXJjZXMgZnJvbSBhIGxvY2FsZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZQoraW1wb3J0X2ZpbGVfY29uZmxpY3RfY2hvb3NlPVRoZVwgZW5jb2RpbmdcIHswfVwgZG9lc1wgbm90XCBleGlzdC5cIFNlbGVjdFwgYW5cIG9wdGlvblwgdG9cIHJlc29sdmVcIG9yXCBjYW5jZWxcIHRvXCBpZ25vcmVcIHRoaXNcIGNvbmZsaWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkLCBidXQgbm90IHBvcHVsYXRlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHk9R2VuZXJhdGVcIGFcIG5ldyxcIGVtcHR5XCByZXNvdXJjZVwgZmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCBhIG5ldyBmaWxlIGlzIGdlbmVyYXRlZCBhbmQgcG9wdWxhdGVkIHdpdGggYWxsIHRoZSBleGlzdGluZyByZXNvdXJjZXMKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX3BvcHVsYXRlPUdlbmVyYXRlXCBhXCBuZXdcIHJlc291cmNlXCBmaWxlXCBhbmRcIHBvcHVsYXRlXCBpdFwgd2l0aFwgdGhlXCBiYXNlXCBjbGFzc1wgcmVzb3VyY2VzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggdGhlIGNvbmZsaWN0cyBhcmUgaWdub3JlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlPVNraXBcIGFuZFwgaWdub3JlXCBhbGxcIHJlc291cmNlc1wgZnJvbVwgbG9jYWxlc1wgbm90XCBleGlzdGFudFwgaW5cIHRoZVwgY3VycmVudFwgcmVzb3VyY2VcIGJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3Igc2VjdGlvbiBsaXN0aW5nIG9wdGlvbnMgZm9yIHdoYXQgdG8gZG8gd2hlbiBhbiBpbXBvcnRlZCB2YWx1ZSBleGlzdHMgaW4gYSBsb2NhbGUgbm90IGRlZmluZWQgaW4gdGhlIGV4aXN0aW5nIHJlc291cmNlIGJ1bmRsZQoraW1wb3J0X2ZpbGVfY29uZmxpY3RzPU1pc3NpbmdcIFJlc291cmNlXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTZWxlY3Rpb24gb2YgdGhlIGRlZmF1bHQgZ3JvdXAuIEEgbGlzdCBvZiBncm91cHMgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgcmVzb3VyY2UgaW4gYSBDb21ib0JveAoraW1wb3J0X2luc2VydF9ncm91cD1JbnNlcnRcIGludG9cIGdyb3VwXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB0eXBlcyBvZiBmaWxlcyBhY2NlcHRlZCBmb3IgdGhpcyBpbXBvcnQgdHlwZQoraW1wb3J0X2phdmFfZmlsZV9kZXNjcmlwdGlvbj1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEJhc2VcIENsYXNzZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGRpYWxvZyBwcm9tcHRpbmcgZm9yIGltcG9ydCBmcm9tIGphdmEgY2xhc3NlcworaW1wb3J0X2phdmFfdGl0bGU9SmF2YVwgTGlzdFJlc291cmNlQnVuZGxlXCBDbGFzc1wgSW1wb3J0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGluZGljYXRpbmcgc2VjdGlvbiBjb250YWluaW5nIHVzZXIgb3B0aW9ucworaW1wb3J0X29wdGlvbnM9SW1wb3J0XCBPcHRpb25zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBmaWxlIGNob29zZXIgZm9yIHNlbGVjdGlvbiBvZiByZXNvdXJjZSBidW5kbGVzIHN0b3JlZCBpbiAucHJvcGVydGllcyBmaWxlcworaW1wb3J0X3Byb3BlcnRpZXNfZmlsZV9kZXNjcmlwdGlvbj1SZXNvdXJjZVwgQnVuZGxlXCBCYXNlXCBDbGFzc2VzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gcHJvcGVydGllcyBmaWxlcyAoY3JlYXRlZCBvciBub3QgYnkgUkJNYW5hZ2VyKQoraW1wb3J0X3Byb3BlcnRpZXNfdGl0bGU9UmVzb3VyY2VcIEJ1bmRsZVwgUHJvcGVydGllc1wgRmlsZXNcIEltcG9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezF9IEVuY29kaW5nIG9mIHRoZSByZXNvdXJjZSB2YWx1ZSB3aXRoIGEgY29uZmxpY3QKKyMgQHswfSBUaGUga2V5IHZhbHVlIG9mIHRoZSByZXNvdXJjZSBpbiBjb25mbGljdAorIyBAY29tbWVudCBUaGlzIGlzIGEgd2FybmluZyBhbmQgaW5zdHJ1Y3Rpb24gZm9yIHdoZW4gYSByZXNvdXJjZSBjb25mbGljdCBvY2N1cnMgZHVyaW5nIGFuIGltcG9ydAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZT1UaGVcIGtleVwgezB9XCBhbGxcIHJlYWR5XCBleGlzdHNcIGluXCB0aGVcIHsxfVwgcmVzb3VyY2VcIGJ1bmRsZS5DaG9vc2VcIGFuXCBvcHRpb25cIHRvXCByZXNvbHZlXCB0aGlzXCBjb25mbGljdFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHRyYW5zbGF0aW9uIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UgaXRlbQorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgYWNjb3JkaW5nIHRvIHRoZSBpbXBvcnQgZmlsZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV9zb3VyY2U9SW1wb3J0XCBUcmFuc2xhdGlvblw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdHJhbnNsYXRpb24gdmFsdWUgaGVsZCBieSB0aGUgYWN0aXZlIHJlc291cmNlIGJ1bmRsZSBkdXJpbmcgYSB0cmFuc2xhdGlvbiByZXNvdXJjZSBjb25mbGljdAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV90YXJnZXQ9UmVzb3VyY2VcIEJ1bmRsZVwgdHJhbnNsYXRpb25cOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIHJlc291cmNlIGNvbmZsaWN0cyBieSBpZ25vcmluZyBpbXBvcnQgdmFsdWUKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9pZ25vcmU9SWdub3JlXCB0aGVcIGNvbmZsaWN0XCBhbmRcIGxlYXZlXCB0aGVcIG9yaWdpbmFsXCByZXNvdXJjZVwgdW5jaGFuZ2VkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBieSB1c2luZyB0aGUgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3Rfb3ZlcndyaXRlPU92ZXJ3cml0ZVwgcmVzb3VyY2VcIHdpdGhcIHRoZVwgdmFsdWVcIGZyb21cIHRoZVwgaW1wb3J0XCBmaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGxpc3Rpbmcgb3B0aW9ucyBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBiZXR3ZWVuIHJlc291cmNlcworaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0cz1SZXNvdXJjZVwgQ29uZmxpY3RzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHBhdGggYW5kIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIHNvdXJjZSBmaWxlIGZvciB0aGUgaW1wb3J0CitpbXBvcnRfc291cmNlX2ZpbGU9U291cmNlXCBGaWxlXDpcIHswfQorCisjCisjIEBncm91cCBNZW51IEl0ZW1zCisjCisjIEBncm91cENvbW1lbnQgVGhlc2UgcmVzb3VyY2VzIHJlcHJlc2VudCBhbGwgb2YgdGhlIG1lbnUgYW5kIG1lbnUgaXRlbSB0aXRsZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaGUgbWVudSB0aXRsZSBjb3ZlcmluZyBjb3B5aW5nLCBwYXN0aW5nLCBkZWxldGluZyBvZiBpdGVtcworbWVudV9lZGl0PUVkaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY29weT1Db3B5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHlfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2N1dD1DdXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY3V0X3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9kZWxldGU9RGVsZXRlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZV90cmlnZ2VyPWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGU9UGFzdGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGVfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2VkaXQnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZWRpdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgdGhlIG9wZW5pbmcsIHNhdmluZywgZXRjLiBkb2N1bWVudHMgYW5kIGV4aXRpbmcgdGhlIHByb2dyYW0KK21lbnVfZmlsZT1GaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IHJlc291cmNlIGJ1bmRsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMKK21lbnVfZmlsZV9leHBvcnQ9RXhwb3J0XCBSZXNvdXJjZVwgQnVuZGxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIElDVSBSZXNvdXJjZSBCdW5kbGUgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfSUNVPUlDVVwgRmlsZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAyLTA1LTE3IEBtb2RpZmllZCAyMDAyLTA1LTE3IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X0lDVV90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJsaXR5IHRvIGV4cG9ydCB0byBUTVggWE1MIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X1RNWD1UTVhcIEZpbGVzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IFhMSUZGIFhNTCBmaWxlcworbWVudV9maWxlX2V4cG9ydF9YTEY9WExJRkZcIEZpbGVzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9YTEZfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IHRvIGphdmEgZmlsZXMgdGhhdCBjb21waWxlIHRvIGJlIExpc3RSZXNvdXJjZUJ1bmRsZSBjbGFzcyBleHRlbnNpb25zCittZW51X2ZpbGVfZXhwb3J0X2phdmE9Q29tcGlsYWJsZVwgSmF2YVwgRmlsZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X2phdmFfdHJpZ2dlcj1qCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEV4cG9ydCBhYmlsaXR5IHRvIHByb3BlcnRpZXMgZmlsZXMgbWludXMgdGhlIG1ldGFkYXRhCittZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXM9TWluaW1hbFwgUHJvcGVydGllc1wgRmlsZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXNfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBpbXBvcnQgYW5kIG1lcmdpbmcgYW5vdGhlciByZXNvdXJjZSBmaWxlIHdpdGggdGhlIGJ1bmRsZSBiZWluZyB3b3JrZWQgd2l0aAorbWVudV9maWxlX2ltcG9ydD1NZXJnZVwgKEltcG9ydFwgaW50bylcIFRvXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmxpaXR5IGZyb20gWE1MIFRNWCBkb2N1bWVudHMKK21lbnVfZmlsZV9pbXBvcnRfVE1YPVRNWFwgRG9jdW1lbnRzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wNiBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gWE1MIFhMSUZGICgueGxmKSBmaWxlcworbWVudV9maWxlX2ltcG9ydF9YTEY9WExJRkZcIERvY3VtZW50cy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDYgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfWExGX3RyaWdnZXI9WAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIGphdmEgY2xhc3NlcyAoTGlzdFJlc291cmNlQnVuZGxlKQorbWVudV9maWxlX2ltcG9ydF9qYXZhPUxpc3RSZXNvdXJjZUJ1bmRsZVwgSmF2YVwgQ2xhc3Nlcy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIG5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCittZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXM9U2ltcGxlXCBSZXNvdXJjZVwgQnVuZGxlcy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllc190cmlnZ2VyPVMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZQorbWVudV9maWxlX25ldz1OZXdcIFJlc291cmNlXCBCdW5kbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfbmV3X3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9vcGVuPU9wZW5cIFJlc291cmNlXCBCdW5kbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfb3Blbl90cmlnZ2VyPW8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjbG9zaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9maWxlX3F1aXQ9UXVpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9xdWl0X3RyaWdnZXI9cQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfc2F2ZT1TYXZlXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBhCisjIEBjb21tZW50IAorbWVudV9maWxlX3NhdmVfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3Igc2F2aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcGFydGljdWxhciBsb2NhdGlvbiBhbmQgZmlsZSBuYW1lCittZW51X2ZpbGVfc2F2ZWFzPVNhdmVcIFJlc291cmNlXCBCdW5kbGVcIEFzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9maWxlX3NhdmVhc190cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZmlsZScgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9maWxlX3RyaWdnZXI9ZgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBoZWxwIGluZm9ybWF0aW9uIGFuZCBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtCittZW51X2hlbHA9SGVscAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gd2hpY2ggYnJpbmdzIHVwIGEgZGlhbG9nIGRlc2NyaWJpbmcgdGhlIGFwcGxpY2F0aW9uCittZW51X2hlbHBfYWJvdXQ9QWJvdXRcIFJlc291cmNlXCBCdW5kbGVcIE1hbmFnZXIuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X2hlbHBfYWJvdXRfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2hlbHAnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfaGVscF90cmlnZ2VyPWgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3Igb3B0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIG5ldyByZXNvdXJjZXMsIGdyb3VwcywgYW5kIHJlc291cmNlIGZpbGVzCittZW51X29wdGlvbnM9T3B0aW9ucworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGl0ZW0KK21lbnVfb3B0aW9uc19hZGRlbnRyeT1BZGRcIE5ld1wgRW50cnkuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZW50cnlfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlL2NvdW50cnkvdmFyaWFudAorbWVudV9vcHRpb25zX2FkZGZpbGU9QWRkXCBOZXdcIFJlc291cmNlXCBGaWxlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGZpbGVfdHJpZ2dlcj1mCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK21lbnVfb3B0aW9uc19hZGRncm91cD1BZGRcIE5ld1wgR3JvdXAuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBlZGl0aW5nIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorbWVudV9vcHRpb25zX3ByZWZlcmVuY2VzPVByZWZlcmVuY2VzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXNfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSB0aGF0IG1ha2VzIHZpc2libGUgdGhlIHByb2plY3Qgdmlld2VyCittZW51X29wdGlvbnNfcHJvamVjdF92aWV3ZXI9T3BlblwgUHJvamVjdFwgVmlld2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXI9dgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9vcHRpb25zJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X29wdGlvbnNfdHJpZ2dlcj1vCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgYWRkaW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSB0byB0aGUgcHJvamVjdAorbWVudV90cmVlX2FkZF9wcm9qZWN0X2J1bmRsZT1BZGRcIFJlc291cmNlXCBCdW5kbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBkZWxldGluZyBwZXJtYW5lbnRseSBhIHJlc291cmNlIGZpbGUKK21lbnVfdHJlZV9kZWxldGU9RGVsZXRlXCBSZXNvdXJjZVwgRmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHJlbW92aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSB0cmVlIHZpZXcgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorbWVudV90cmVlX2hpZGU9SGlkZVwgUmVzb3VyY2VcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CittZW51X3RyZWVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CittZW51X3RyZWVfb3Blbl9wcm9qZWN0PU9wZW5cIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdHJlZQorbWVudV90cmVlX3JlbW92ZV9wcm9qZWN0X2J1bmRsZT1SZW1vdmVcIGZyb21cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBzYXZpbmcgYSBzcGVjaWZpYyByZXNvdXJjZSBidW5kbGUgZmlsZQorbWVudV90cmVlX3NhdmU9U2F2ZVwgUmVzb3VyY2VcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBzYXZpbmcgY2hhbmdlcyB0byB0aGUgcmVzb3VyY2UgcHJvamVjdCBmaWxlLCBub3QgdGhlIHJlc291cmNlIGJ1bmRsZXMgdGhlbXNlbHZlcyB3aXRoaW4gdGhlIHByb2plY3QKK21lbnVfdHJlZV9zYXZlX3Byb2plY3Q9U2F2ZVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdFwgRmlsZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGZvciBzZWxlY3RpbmcgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdCB0cmVlIHRvIGJlIGVkaXRlZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWUKK21lbnVfdHJlZV9zZWxlY3RfcHJvamVjdF9idW5kbGU9V29ya1wgd2l0aFwgdGhpc1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBjaGFuZ2luZyB0aGUgZGlzcGxheSBiZWluZyBzZWVuIGJ5IHRoZSB1c2VyCittZW51X3ZpZXc9VmlldworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCB0YWtlcyB5b3UgZGlyZWN0bHkgdG8gdGhlIHN0YXRpc3RpY3MgcGFuZWwgZm9yIHRoZSBlbnRpcmUgYnVuZGxlCittZW51X3ZpZXdfc3RhdGlzdGljcz1WaWV3XCBSZXNvdXJjZVwgQnVuZGxlXCBTdGF0aXN0aWNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV92aWV3X3N0YXRpc3RpY3NfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X3ZpZXcnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfdmlld190cmlnZ2VyPXYKKworIworIyBAZ3JvdXAgUHJvamVjdCBQYW5lbAorIworIyBAZ3JvdXBDb21tZW50IFBhbmVsIGFzc29jaWF0ZWQgd2l0aCBQcm9qZWN0IGVkaXRpbmcKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgTGFiZWwgaW5kaWNhdG9yIGFzc29jaWF0aW5nIGEgdGV4dCBib3ggY29udGFpbmluZyBhIHRyYW5zbGF0aW9uIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSB0aGUgdHJhbnNsYXRpb24gY29tZXMgZnJvbQorcHJvamVjdF9wYW5lbF9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBOYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgU3BlY2lhbCBpbmRpY2F0b3Igb2YgdGhlIHJlc291cmNlIGl0ZW0gcmVzb3VyY2UgYnVuZGxlIHdoZW4gdGhlIGl0ZW0gaXMgdW50cmFuc2xhdGVkCitwcm9qZWN0X3BhbmVsX2J1bmRsZV91bnRyYW5zbGF0ZWQ9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH1cIChVbnRyYW5zbGF0ZWQpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IExhYmVsIHRleHQgbWFya2luZyB0aGUgbGluZSBhYm92ZSBvciB0byB0aGUgbGVmdCBvZiBhIHJlc291cmNlIGNvbW1lbnQKK3Byb2plY3RfcGFuZWxfY29tbWVudD1CYXNlXCBDbGFzc1wgUmVzb3VyY2VcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBMYWJlbCB0ZXh0IGZvciBhIGNvbW1lbnQgd2hlbiBub25lIGlzIGZvdW5kIGZvciBhIHJlc291cmNlCitwcm9qZWN0X3BhbmVsX2NvbW1lbnRfbm9uZT1Ob1wgY29tbWVudFwgc3VwcGxpZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBjb21taXR0aW5nIGNoYW5nZSB0byBvbmUgcmVzb3VyY2Ugb25seQorcHJvamVjdF9wYW5lbF9jb21taXRfYnV0dG9uPUNvbW1pdFwgQ2hhbmdlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3Igc2F2aW5nIGFsbCBvZiB0aGUgcmVzb3VyY2VzIGRpc3BsYXllZC4gVGhpcyBtZWFucyBtdWx0aXBsZSByZXNvdXJjZSBmaWxlcyBnZXQgc2F2ZWQuCitwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b25fYWxsPUNvbW1pdFwgQWxsXCBSZXNvdXJjZVwgQ2hhbmdlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZWZhdWx0IHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIHdoZW4gbm8gcGFydGljdWxhciByZXNvdXJjZSBoYXMgYmVlbiBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRleHQgZmllbGQgbWFya2VyIGZvciB0aGUgdHJhbnNsYXRpb24gb2YgYSByZXNvdXJjZSB3aGVuIHRoYXQgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBlbmNvZGluZyBmaWxlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aAorcHJvamVjdF9wYW5lbF9pdGVtX2luaGVyaXRzPTxOb1wgVHJhbnNsYXRpb25cOlwgUmVzb3VyY2VcIEluaGVyaXRzXCBmcm9tXCBwYXJlbnQ+CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UKKyMgQGNvbW1lbnQgVGl0bGUgb24gdGhlIHByb2plY3QgcGFuZWwgd2hpbGUgYSByZXNvdXJjZSBpcyBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF90aXRsZT1Qcm9qZWN0XCBSZXNvdXJjZVwgRWRpdGluZ1w6XCB7MH0KKworIworIyBAZ3JvdXAgUkJSZXBvcnRlcgorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3IgdGhlIFJCUmVwb3J0ZXIgYXBwbGljYXRpb24KKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3Igc2VsZWN0aW5nIGZpbGUgbG9jYXRpb25zIGZvciBpbnB1dC9vdXRwdXQKK3JlcG9ydGVyX2J1dHRvbl9jaG9vc2U9Q2hvb3NlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQnV0dG9uIGluZGljYXRpbmcgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIHNob3VsZCBvY2N1ciBpbW1lZGlhdGVseQorcmVwb3J0ZXJfYnV0dG9uX25vdz1VcGRhdGVcIE5vdworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMjkgQG1vZGlmaWVkIDIwMDAtMTEtMjkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNhdmluZyB0aGUgY3VycmVudCBzZXR0aW5ncyBhcyBkZWZhdWx0CityZXBvcnRlcl9idXR0b25fc2F2ZV9kZWZhdWx0cz1TYXZlXCB0aGVcIEN1cnJlbnRcIFNldHRpbmdzXCBhc1wgRGVmYXVsdHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gdG8gYWN0aXZhdGUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RhcnQ9U3RhcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gdG8gZGVhY3RpdmUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RvcD1TdG9wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBtb3N0IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorcmVwb3J0ZXJfZGV0YWlsX2hpZ2g9SGlnaAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgYSBzZWxlY3Rpb24gb3B0aW9uIG9mIHRoZSBsZXZlbCBvZiBkZXRhaWwgaW4gcmVwb3J0aW5nCityZXBvcnRlcl9kZXRhaWxfbGV2ZWw9RGV0YWlsXCBMZXZlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBzdGFuZGFyZAorcmVwb3J0ZXJfZGV0YWlsX25vcm1hbD1Ob3JtYWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0OiBIVE1MCityZXBvcnRlcl9mb3JtYXRfaHRtbD1IVE1MCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdCB0eXBlOiBwbGFpbiB0ZXh0CityZXBvcnRlcl9mb3JtYXRfdGV4dD1UZXh0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogWE1MCityZXBvcnRlcl9mb3JtYXRfeG1sPVhNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgZmlsZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRvIHJlcG9ydCBvbgorcmVwb3J0ZXJfaW5wdXRfYnVuZGxlPVJlc291cmNlXCBCdW5kbGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCByZXBvcnRpbmcgd2lsbCBoYXBwZW4gYXQgYSBzcGVjaWlmaWVkIHRpbWUgb2YgZGF5LiBGb2xsb3dlZCBieSBhIHRpbWUgYW5kIGRheSBvcHRpb24uCityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkPVJlcG9ydFwgYXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2Ygc2VxdWVudGlhbCByZXBvcnRpbmcgcGF1c2VkIGZvciBhIGRlZmluZWQgaW50ZXJ2YWwgYmV0d2VlbiByZXBvcnRpbmcuIEltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGFuZCBhIHVuaXQgb2YgbWVhc3VyZSBvZiB0aW1lCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsPVJlcG9ydFwgZXZlcnkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAezB9IERhdGUvVGltZSBvZiBsYXN0IHJlcG9ydCBnZW5lcmF0aW9uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIHRpbWUgb2YgdGhlIGxhc3QgcmVwb3J0CityZXBvcnRlcl9sYXN0X3JlcG9ydD1MYXN0XCBSZXBvcnRcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQHswfSBEYXRlL1RpbWUgb2YgbmV4dCByZXBvcnQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3aGVuIHRoZSBuZXh0IHJlcG9ydCB3aWxsIGJlIGdlbmVyYXRlZAorcmVwb3J0ZXJfbmV4dF9yZXBvcnQ9TmV4dFwgUmVwb3J0XDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIG91dHB1dCBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgcmVwb3J0cyBhcmUgcGxhY2VkCityZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5PU91dHB1dFwgRGlyZWN0b3J5XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIG91dHB1dCBmb3JtYXQKK3JlcG9ydGVyX291dHB1dF9maWxlPUZpbGVcIE5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBzZXR0aW5nIGludGVydmFsIG9mIHJlcG9ydGluZworcmVwb3J0ZXJfcGFuZWxfaW50ZXJ2YWw9UmVwb3J0XCBJbnRlcnZhbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBjb25maWd1cmFibGUgb3B0aW9ucyBvZiB0aGUgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9vcHRpb25zPVJlcG9ydFwgT3B0aW9ucworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFN1YnBhbmVsIHRpdGxlIGZvciBjaG9vc2luZyBvdXRwdXQgZm9ybWF0cyBmb3IgdGhlIHJlcG9ydHMKK3JlcG9ydGVyX3BhbmVsX291dHB1dF9mb3JtYXQ9T3V0cHV0XCBGb3JtYXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3IgaW5kaWNhdGlvbiBvZiBydW5uaW5nIHN0YXR1cyBvZiB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX3BhbmVsX3N0YXR1cz1TdGF0dXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU2hvcnQgdGl0bGUgZm9yIHNlbGVjdGluZyBhIGNvZGUgc2NhbiBjb25maWd1cmF0aW9uIGZpbGUKK3JlcG9ydGVyX3BlcmZvcm1fc2Nhbj1Db2RlXCBTY2FuXCBGaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgUXVpY2sgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBhY3RpdmUgKHBlcmhhcHMgd2FpdGluZykKK3JlcG9ydGVyX3N0YXR1c19ydW5uaW5nPVN0YXJ0ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBRdWljayBzdGF0dXMgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBub3QgYWN0aXZlCityZXBvcnRlcl9zdGF0dXNfc3RvcHBlZD1TdG9wcGVkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgZGF5cyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZGF5cz1EYXlzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgZXZlcnkgZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9ldmVyeWRheT1FdmVyeVwgZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgZnJpZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9mcmlkYXk9RnJpZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgaG91cnMgb3B0aW9uCityZXBvcnRlcl90aW1lX2hvdXJzPUhvdXJzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgbWludXRlcyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfbWludXRlcz1NaW51dGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgbW9uZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9tb25kYXk9TW9uZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgc2F0dXJkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3NhdHVyZGF5PVNhdHVyZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgc3VuZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zdW5kYXk9U3VuZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgdGh1cnNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3RodXJzZGF5PVRodXJzZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgdHVlc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdHVlc2RheT1UdWVzZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgd2VkbmVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV93ZWRuZXNkYXk9V2VkbmVzZGF5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfcmVwb3J0ZXI9UkJSZXBvcnRlcgorCisjCisjIEBncm91cCBTZWFyY2ggYW5kIFJlcGxhY2UKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZm91bmQgb24gdGhlIHNlYXJjaCB0YWIgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgc2VhcmNoIHRpdGxlCitzZWFyY2g9U2VhcmNoCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIG1ha2luZyB0aGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdAorc2VhcmNoX2Nhc2Vfc2Vuc2l0aXZlPUNhc2VcIFNlbnNpdGl2ZVwgU2VhcmNoCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIHNlYXJjaGluZyB0aHJvdWdoIHJlc291cmNlIGNvbW1lbnRzCitzZWFyY2hfY29tbWVudHM9Q29tbWVudHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCB0byBzZWFyY2ggb24KK3NlYXJjaF9maW5kPUZpbmRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggc2VsZWN0aW9uIGZvciBzZWFyY2hpbmcgb3B0aW9uIHRocm91Z2ggcmVzb3VyY2Uga2V5cworc2VhcmNoX2tleXM9UmVzb3VyY2VcIEtleXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCBmb3IgcmVwbGFjaW5nIHRoZSBmb3VuZCB2YWx1ZQorc2VhcmNoX3JlcGxhY2U9UmVwbGFjZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIHNlYXJjaGluZyB0aHJvdWdoIHRyYW5zbGF0aW9uIHZhbHVlcworc2VhcmNoX3ZhbHVlcz1UcmFuc2xhdGlvbnMKKworIworIyBAZ3JvdXAgVGFicworIworIyBAZ3JvdXBDb21tZW50IEdVSSBUYWJzIGluIHRoZSBtYWluIHBhbmVsCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgVGFiYmVkIFBhbmUgb3ZlciB0aGUgdHJlZSBzaG93aW5nIGEgc2luZ2xlIHJlc291cmNlIGJ1bmRsZSBhbmQgaXRzIHZhcmlvdXMgZmlsZXMKK3RhYl9idW5kbGU9QnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGFiIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgdmFyaW91cyBncm91cHMgaW4gdGhlIGJ1bmRsZQordGFiX2dyb3Vwcz1Hcm91cHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgdGFiIG92ZXIgdHJlZSBzaG93aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK3RhYl9wcm9qZWN0PVByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBhbmUgYWxsb3dpbmcgZm9yIHNlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbnMKK3RhYl9zZWFyY2g9U2VhcmNoCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGFiIGZvciBzdGF0aXN0aWNzIGRpc3BsYXkgZm9yIGVpdGhlciB0aGUgUmVzb3VyY2UgQnVuZGxlIGFzIGEgd2hvbGUgb3IgcGFydGljdWxhciBsYW5ndWFnZSBmaWxlcwordGFiX3N0YXRpc3RpY3M9U3RhdGlzdGljcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRhYiBmb3IgZGlzcGxheSBvZiB1bnRyYW5zbGF0ZWQgaXRlbXMgaW4gdGhlIGRpZmZlcmVudCBsYW5ndWFnZSBmaWxlcwordGFiX3VudHJhbnNsYXRlZD1VbnRyYW5zbGF0ZWQKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBHcm91cHMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtIGNvbW1lbnRzCitsYW5ndWFnZWdyb3VwX2NvbHVtbl9jb21tZW50PUNvbW1lbnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBDb2x1bW4gdGl0bGUgZm9yIGl0ZW0ncyByZXNvdXJjZSBrZXkKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX2tleT1SZXNvdXJjZVwgS2V5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitsYW5ndWFnZWdyb3VwX2NvbHVtbl90cmFuc2xhdGlvbj1UcmFuc2xhdGlvbgorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFN0YXRpc3RpY3MgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSBzdGF0aXN0aWNzIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEEgY29tbWVudCBnaXZlbiB0byB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb21tZW50PUNvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBjb3VudHJ5IGJlaW5nIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb3VudHJ5PUNvdW50cnlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2l0ZW1fY291bnQ9TnVtYmVyXCBvZlwgUmVzb3VyY2VzXCBpblwgdGhpc1wgTGFuZ3VhZ2VcIEZpbGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZSBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfbGFuZ3VhZ2U9TGFuZ3VhZ2VcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb25zIGluIHRoaXMgbGFuZ3VhZ2UgZmlsZQorbGFuZ3VhZ2VzdGF0c19tYW5hZ2VyPVJlc291cmNlXCBGaWxlXCBNYW5hZ2VyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgbmFtZSBnaXZlbiB0byB0aGUgbGFuZ3VhZ2UgZmlsZQorbGFuZ3VhZ2VzdGF0c190aXRsZT1SZXNvdXJjZVwgVGl0bGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IE51bWJlciBvZiByZXNvdXJjZXMgbmVlZGluZyB0cmFuc2xhdGlvbiBpbiB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c190cmFuc2xhdGlvbl9jb3VudD1OdW1iZXJcIG9mXCBVbnRyYW5zbGF0ZWRcIFJlc291cmNlXCBJdGVtc1wgaW5cIHRoaXNcIEZpbGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZS9yZWdpb24gdmFyaWFudCBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdmFyaWFudD1WYXJpYW50XDoKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGNvbHVtbiB0aXRsZSBmb3IgZ3JvdXAgbmFtZXMgb2YgaXRlbXMgaW4gdGhlIHJvd3MKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fZ3JvdXA9R3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUga2V5IG9mIHRoZSBpdGVtIGEgcm93CitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleT1SZXNvdXJjZVwgS2V5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgYW4gaXRlbSBpbiBhIHJvdworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbj1UcmFuc2xhdGlvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBjb3ZlcmluZyBidXR0b25zIHRoYXQgYXBwbHkgdG8gYSBzZWxlY3RlZCByZXNvdXJjZSBmcm9tIGEgdGFibGUgb2YgcmVzb3VyY2VzCitsYW5ndWFnZXVudHJhbnNfc2VsZWN0ZWRfcmVzb3VyY2VzX29wdGlvbnM9T3B0aW9uc1wgZm9yXCBTZWxlY3RlZFwgUmVzb3VyY2VzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9kZS5wcm9wZXJ0aWVzIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjBiOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEyMTMgQEAKKyMgQGZpbGUgICAgICAgICAgUkJNL0dlcm1hbgorIyBAZmlsZUVuY29kaW5nICBkZQorIyBAZmlsZUxhbmd1YWdlICBEZXV0c2NoCisjIEBmaWxlQ291bnRyeSAgIAorIyBAZmlsZVZhcmlhbnQgICAKKyMgQGZpbGVNYW5hZ2VyICAgTWFydGluIEdlcmxhY2gKKyMgQGZpbGVDb21tZW50ICAgCisKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBHcm91cHMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9uIEl0ZW1zIGZvciB0aGUgQmFzZSBDbGFzcyBHcm91cCB0YWJiZWQgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfY29tbWVudD1HcnVwcGVua29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9uYW1lPUdydXBwZW5uYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9vcHRpb25zPVJlc291cmNlbmdydXBwZW4tT3B0aW9uZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9pdGVtX29wdGlvbnM9UmVzb3VyY2VuLU9wdGlvbmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9ncm91cD1SZXNvdXJjZW5kYXRlaWVuCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgU3RhdGlzdGljcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgQWxsIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBhcHBlYXJpbmcgb24gdGhlIHN0YXRpc3RpY3MgcGFuZSBmb3IgdGhlIGJhc2UgY2xhc3MKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2R1cGxpY2F0ZXNfY291bnQ9QW56YWhsXCBtZWhyZmFjaGVyXCBSZXNvdXJjZW5zY2hsXHUwMEZDc3NlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9jb3VudD1BbnphaGxcIFJlc291cmNlbmRhdGVpZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2dyb3VwX2NvdW50PUFuemFobFwgUmVzb3VyY2VuZ3J1cHBlblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZ3JvdXBfZ3JvdXA9UmVzb3VyY2VuZ3J1cHBlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2l0ZW1fY291bnQ9QW56YWhsXCBSZXNvdXJjZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2l0ZW1fZ3JvdXA9UmVzb3VyY2VuCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXBwZWFyaW5nIG9uIHRoZSBCYXNlIENsYXNzIFVudHJhbnNsYXRlZCBJdGVtcyBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBmaWxlIGJlaW5nIHZpZXdlZAorYmFzZXVudHJhbnNfZmlsZT1EYXRlaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHJlc291cmNlIGl0ZW1zIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBmaWxlCitiYXNldW50cmFuc191bnRyYW5zX2NvdW50PUFuemFobFwgbmljaHRcIFx1MDBGQ2JlcnNldHp0ZXJcIFJlc291cmNlblw6CisKKyMKKyMgQGdyb3VwIEJ1dHRvbiBOYW1lcworIworIyBAZ3JvdXBDb21tZW50IFRoZSBuYW1lcyBkaXNwbGF5ZWQgb24gdGhlIHZhcmlvdXMgYnV0dG9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBsYW5ndWFnZSBmaWxlCitidXR0b25fYWRkX2ZpbGU9UmVzb3VyY2VuZGF0ZWlcIGhpbnp1Zlx1MDBGQ2dlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMTIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZmlsZV90cmlnZ2VyPWgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCitidXR0b25fYWRkX2dyb3VwPVJlc291cmNlbmdydXBwZVwgaGluenVmXHUwMEZDZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9ncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9hZGRfcmVzb3VyY2U9UmVzb3VyY2VcIGhpbnp1Zlx1MDBGQ2dlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfcmVzb3VyY2VfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgY2FuY2VsaW5nIGFjdGlvbnMKK2J1dHRvbl9jYW5jZWw9QWJicmVjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBhIGNob2ljZSBvciBzZWxlY3Rpb24gb3B0aW9uCitidXR0b25fY2hvb3NlPUF1c3dcdTAwRTRobGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2Nob29zZV90cmlnZ2VyPUEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGdlbmVyaWMgY3JlYXRpb24gb2YgZ3JvdXBzLCBpdGVtcywgZmlsZXMsIGV0Yy4KK2J1dHRvbl9jcmVhdGU9RXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEZvciBjcmVhdGlvbiBvZiBhIHJlc291cmNlIGdyb3VwCitidXR0b25fY3JlYXRlX2dyb3VwPUdydXBwZVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX2dyb3VwX3RyaWdnZXI9ZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIGNyZWF0aW5nIGFuIGl0ZW0gdGhlbiBjb250aW51aW5nIGNyZWF0aW5nIG1vcmUgaXRlbXMKK2J1dHRvbl9jcmVhdGVfbW9yZT1FcnpldWdlblwgJlwgV2VpdGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9tb3JlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9jcmVhdGVfcmVzb3VyY2U9UmVzb3VyY2VcIGVyemV1Z2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0xMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTEyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciByZW1vdmluZyBhIGdyb3VwIGFuZCBpdHMgY29udGVudHMKK2J1dHRvbl9kZWxldGVfZ3JvdXA9R3J1cHBlXCBsXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcGVybWFuZW50bHkgcmVtb3ZpbmcgYSByZXNvdXJjZSBmcm9tIHRoZSBidW5kbGUKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2U9UmVzb3VyY2VcIGxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMTIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgR2VuZXJpYyBlZGl0IGJ1dHRvbgorYnV0dG9uX2VkaXQ9QmVhcmJlaXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBlZGl0aW5nIGdyb3VwIG5hbWUgYW5kIGNvbW1lbnQKK2J1dHRvbl9lZGl0X2dyb3VwPUdydXBwZVwgYmVhcmJlaXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBlZGl0aW5nIHJlc291cmNlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcga2V5IGFuZCB0cmFuc2xhdGlvbgorYnV0dG9uX2VkaXRfcmVzb3VyY2U9UmVzb3VyY2VcIGJlYXJiZWl0ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTEyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fZWRpdF9yZXNvdXJjZV90cmlnZ2VyPWIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBpbml0aWF0aW5nIGFuIGltcG9ydCBvZiByZXNvdXJjZXMgZnJvbSBhbiBhbHRlcm5hdGUgc291cmNlCitidXR0b25faW1wb3J0PUltcG9ydGllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2ltcG9ydF90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGFsbG93cyBhIHNlbGVjdGVkIHJlc291cmNlIHRvIGJlIG1hcmtlZCBhcyB0cmFuc2xhdGVkIHdpdGhvdXQgZnVydGhlciBlZGl0aW5nCitidXR0b25fbWFya190cmFuc2xhdGVkPVJlc291cmNlXCBhbHNcIFx1MDBGQ2JlcnNldHp0XCBtYXJraWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fbWFya190cmFuc2xhdGVkX3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBhZGRpbmcgdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBtYWluIGFwcGxpY2F0aW9uIHRvIHRoZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9hZGQ9QWRkXCBDdXJyZW50XCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfYWRkX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjbG9zaW5nIHRoZSBwcm9qZWN0IHdpbmRvdworYnV0dG9uX3Byb2plY3RfY2xvc2U9Q2xvc2VcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfY2xvc2VfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9uZXc9TmV3XCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X25ld190cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3Igb3BlbmluZyBhIHByb2plY3QgZmlsZQorYnV0dG9uX3Byb2plY3Rfb3Blbj1PcGVuXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X29wZW5fdHJpZ2dlcj1vCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZT1SZW1vdmVcIFNlbGVjdGlvbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9yZW1vdmVfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNhdXNpbmcgdGhlIHNlbGVjdGVkIHJlc291cmNlIGJ1bmRsZSB0byBiZSB0aGUgb25lIGJlaW5nIGVkaXRlZCBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbgorYnV0dG9uX3Byb2plY3Rfc2VsZWN0PUVkaXRcIFNlbGVjdGVkCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3NlbGVjdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgYSBjb21wbGV0ZSBzZWFyY2gKK2J1dHRvbl9zZWFyY2hfZmluZF9hbGw9QWxsZVwgZmluZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgY29tcGxldGUgc2VhcmNoIGFuZCByZXBsYWNlCitidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsPUFsbGVcIGVyc2V0emVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbF90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgdXBkYXRpbmcgaW5mb3JtYXRpb24KK2J1dHRvbl91cGRhdGU9XHUwMEM0bmRlcm4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTEyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fdXBkYXRlX3RyaWdnZXI9bgorCisjCisjIEBncm91cCBEaWFsb2dzCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb25zIHZhcmlvdXMgZGlhbG9nIGJveGVzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdldGhlciBvciBub3QgYSBuZXcgZmlsZSB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGUgYmFzZSBjbGFzcworZGlhbG9nX2NoZWNrYm94X2NvcHlfZWxlbWVudHM9RWludHJcdTAwRTRnZVwgYXVzXCBkZXJcIEJhc2lza2xhc3NlXCBpblwgZGllXCBuZXVlXCBEYXRlaVwgXHUwMEZDYmVybmVobWVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgSW5kaWNhdG9yIG9mIHdldGhlciBhbiBpdGVtIGlzIHRyYW5zbGF0ZWQgb3Igbm90CitkaWFsb2dfY2hlY2tib3hfdHJhbnNsYXRlZD1cdTAwRENiZXJzZXR6dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2NvbW1lbnQ9S29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19jb3VudHJ5PUxhbmQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19jcmVhdGVkPUVyemV1Z3RcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0b3I9RXJ6ZXVndFwgZHVyY2hcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEB7MX0gVGhlIGRhdGUKKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIGludm9sdmVkCisjIEBjb21tZW50IFRoZSBkYXRlIGFuZCBwZXJzb24gYXNzb2NpYXRlZCB3aXRoIGEgY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGFuIGl0ZW0KK2RpYWxvZ19kYXRlX3BlcnNvbj17MH1cIGFtXCB7MX0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWZhdWx0X2NvbW1lbnQ9RGVmYXVsdC1Lb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfdHJhbnNsYXRpb249RGVmYXVsdC1cdTAwRENiZXJzZXR6dW5nXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZmlsZT1SZXNvdXJjZW5kYXRlaVwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2dyb3VwPVJlc291cmNlbmdydXBwZVwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2l0ZW09UmVzb3VyY2VcIGxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IFdhcm5pbmcgZGlzcGxheWVkIHdoZW4gYSB1c2VyIGFza3MgZm9yIGEgZGVsZXRpb24gb2YgYSBmaWxlLiBQcm9tcHRzIGZvciAnWWVzJyBvciAnTm8nCitkaWFsb2dfZGVsZXRlX3dhcm5pbmc9V2FybnVuZ1whXCBEaWVzZVwgT3BlcmF0aW9uXCBrYW5uXCBuaWNodFwgcnVlY2tnYWVuZ2lnXCBnZW1hY2h0XG53ZXJkZW4uXCBTaW5kXCBTaWVcIHNpY2hyZSxcIGRhc3NcIHNpZVwgZm9ydGZhaHJlblwgbW9lY2h0ZW4/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZW5jb2Rpbmc9RW5jb2RpbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfY29tbWVudD1SZXNvdXJjZW5kYXRlaWtvbW1lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb249QmFzaXNrbGFzc2VuLVJlc291cmNlbmRhdGVpZW5cICgucHJvcGVydGllcykKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGVzY3JpcHRpb24gb2YgRmlsZSBGaWx0ZXIgZm9yIFJCUmVwb3J0ZXIgWE1MIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlcworZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uX3NjYW49WE1MXCBSQlJlcG9ydGVyXCBTY2FuXCBEYXRlaWVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9pbmZvPURhdGVpaW5mb3JtYXRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfbWFuYWdlcj1OYW1lXCBkZXNcIFJlc291cmNlbm1hbmFnZXJzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX3RpdGxlPVRpdGVsXCBkZXJcIFJlc291cmNlbmRhdGVpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cD1HcnVwcGVubmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZ3JvdXBfY29tbWVudD1HcnVwcGVua29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19rZXk9RWludHJhZ3NzY2hsXHUwMEZDc3NlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfbGFuZ3VhZ2U9U3ByYWNoZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2xvb2t1cHM9UGFyYW1ldGVyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllZD1adWxldHp0XCBnZVx1MDBFNG5kZXJ0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllcj1adWxldHp0XCBnZVx1MDBFNG5kZXJ0XCBkdXJjaFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBsYW5ndWFnZSwgY291bnRyeSwgb3IgdmFyaWFudCBvZiBhIGxhbmd1YWdlIGZpbGUKK2RpYWxvZ19uYW1lPU5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBuYW1lIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlLCBiZWZvcmUgY3JlYXRpbmcgdGhhdCBidW5kbGUKK2RpYWxvZ19uZXdfYmFzZWNsYXNzPUJpdHRlXCBnZWJlblwgU2llXCBlaW5lblwgTmFtZW5cIGZcdTAwRkNyXCBkaWVcIEJhc2lza2xhc3NlXCBkZXNcIG5ldWVuXCBSZXNvdXJjZS1CdW5kbGVzXCBlaW4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEaWFsb2cgcG9wdXAgd2luZG93IHRleHQgcHJvbXB0aW5nIHRoZSB1c2VyIGZvciB0aGUgbmFtZSBvZiBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitkaWFsb2dfbmV3X3Byb2plY3Q9UGxlYXNlXCBlbnRlclwgYVwgdGl0bGVcIGZvclwgeW91clwgbmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEEgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIG1ha2luZyBpdCB0aHJvdWdoIHRoZSBmaWx0ZXIgdXBvbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCitkaWFsb2dfb3Blbl9maWxlX2ZpbHRlcj1CYXNpc2tsYXNzZW4tUmVzb3VyY2VuZGF0ZWllbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoaXMgaXMgYSBzZWN0aW9uIGhlYWRpbmcgZm9yIHNldHRpbmcgdGhlIGxvY2FsZQorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZT1Mb2NhbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBMb2NhbGVzIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIGZvciB0aGUgYXBwbGljYXRpb24KK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfZGVmaW5lZD1EZWZpbmllcnRcIGZcdTAwRkNyXCBSQk1hbmFnZXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX2lzbz1JU08tU3RhbmRhcmRzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBMb2NhbGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBKYXZhIFZpcnR1YWwgTWFjaGluZQorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9tYWNoaW5lPVZvblwgZGllc2VtXCBTeXN0ZW1cIHVudGVyc3RcdTAwRkN0enRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX3dhcm5pbmc9QU5NRVJLVU5HXDpcIFx1MDBDNG5kZXJ1bmdlblwgZGVyXCBMb2NhbGVcIHdpcmtlblwgc2ljaFwgZXJzdFwgYmVpbVwgblx1MDBFNGNoc3RlblwgU3RhcnRcIGRlclwgQW53ZW5kdW5nXCBhdXMuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9va2FuZGZlZWw9TG9va1wgQW5kXCBGZWVsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc191c2VybmFtZT1CZW51dHplcm5hbWVcOgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGVzY3JpcHRvciB0aGF0IGdvZXMgaW50byBHVUkgZmlsZSBjaG9vc2VyCitkaWFsb2dfcHJvamVjdF9maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbj1SQk1hbmFnZXJcIFByb2plY3RcIEZpbGVzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBGaWxlIEZpbHRlciBkZXNjcmlwdGlvbiBmb3IgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QgZmlsZXMKK2RpYWxvZ19wcm9qZWN0X2ZpbHRlcl9kZXNjcmlwdGlvbj1SZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0cworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiB0aGF0IG5vIHByb2plY3QgaXMgb3BlbiwgcGxhY2VkIGluIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nIHdoZXJlIHRoZSBwcm9qZWN0IG5hbWUgd291bGQgbm9ybWFsbHkgZ28KK2RpYWxvZ19wcm9qZWN0X25vbmVfc2VsZWN0ZWQ9Tm9cIEFjdGl2ZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdAorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIHdpbmRvdyBzaG93aW5nIGFsbCB0aGUgcmVzb3VyY2UgYnVuZGxlcyBpbiBhIHByb2plY3QKK2RpYWxvZ19wcm9qZWN0X3RpdGxlPVJlc291cmNlXCBCdW5kbGVcIFByb2plY3RcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciBpZiB0aGV5IHdvdWxkIGxpa2UgdG8gc2F2ZSBjaGFuZ2VzIGJlZm9yZSBleGl0aW5nCitkaWFsb2dfcXVpdF9zYXZlPU1cdTAwRjZjaHRlblwgU2llXCBJaHJlXCBcdTAwQzRuZGVydW5nZW5cIHZvclwgYmVlbmRlblwgdm9uXCBSQk1hbmFnZXJcIHNwZWljaGVybj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQSBnZW5lcmljIHByb3BtcHQgdG8gYXNrIHRoZSB1c2VyIGlmIHRoZXkgd2lzaCB0byBzYXZlIGNoYW5nZXMKK2RpYWxvZ19zYXZlPU1cdTAwRjZjaHRlblwgU2llXCBJaHJlXCBcdTAwQzRuZGVydW5nZW5cIHNwZWljaGVybj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfb3B0aW9ucz1TdWNob3B0aW9uZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfcGFyYW09U3VjaGVcIG5hY2hcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSB0aXRsZSBvZiB0aGUgYWJvdXQgZGlhbG9nIGJveAorZGlhbG9nX3RpdGxlX2Fib3V0X3JibWFuYWdlcj1cdTAwRENiZXJcIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgZGVsZXRpb24gb2YgYW4gZW50aXJlIHJlc291cmNlIGdyb3VwCitkaWFsb2dfdGl0bGVfZGVsZXRlX2dyb3VwPVJlc291cmNlbmdydXBwZW5cIGxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSB3aGVuIHByb21wdGluZyB0byBkZWxldGUgYSByZXNvdXJjZQorZGlhbG9nX3RpdGxlX2RlbGV0ZV9pdGVtPVJlc291cmNlXCBsXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lZGl0X2dyb3VwPVJlc291cmNlbmdydXBwZVwgYmVhcmJlaXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2VkaXRfaXRlbT1SZXNvdXJjZVwgYmVhcmJlaXRlbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3I9RXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcl9jcmVhdGluZ19idW5kbGU9RmVobGVyXCBiZWltXCBlcnpldWdlblwgZGVzXCBSZXNvdXJjZS1CdW5kbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSB3aGVuIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUgbm90IGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitkaWFsb2dfdGl0bGVfZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9RmVobGVyXDpcIFJlc291cmNlXCBCdW5kbGVcIGlzdFwgbmljaHRcIGxlc2JhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IFRpdGxlIG9uIGEgd2FybmluZyBkaWFsb2cgdGhhdCBJL08gbWFsZnVuY3Rpb25lZCBvcGVuaW5nIGEgZmlsZQorZGlhbG9nX3RpdGxlX2Vycm9yX29wZW5pbmdfZmlsZT1GZWhsZXJcIGJlaW1cIE9lZmZuZW5cIGRlclwgRGF0ZWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGEgZGlhbG9nIGJveCBmb3IgZW50ZXJpbmcgc3BlY2lhbCBwYXJhbWV0ZXJzIG5lZWRlZCB0byBleHBvcnQgYSByZXNvdXJjZSBidW5kbGUgdG8gamF2YSBjbGFzcyBjb2RlCitkaWFsb2dfdGl0bGVfZXhwb3J0X2phdmFfb3B0aW9ucz1FeHBvcnQtUGFyYW1ldGVyXDpcIEphdmEtS2xhc3NlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBhIGRpYWxvZyB3aXRoIGEgcHJvZ3Jlc3MgYmFyIGdvdmVybmluZyBpbXBvcnQgc3RhdHVzCitkaWFsb2dfdGl0bGVfaW1wb3J0X3Byb2dyZXNzPUltcG9ydHNmb3J0c2Nocml0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBuZXcgYnVuZGxlCitkaWFsb2dfdGl0bGVfbmV3X2J1bmRsZT1OZXVlc1wgUmVzb3VyY2UtQnVuZGxlXCBlcnpldWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBmaWxlCitkaWFsb2dfdGl0bGVfbmV3X2ZpbGU9TmV1ZVwgUmVzb3VyY2VuZGF0ZWlcIGVyemV1Z2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCitkaWFsb2dfdGl0bGVfbmV3X2dyb3VwPU5ldWVcIFJlc291cmNlbmdydXBwZVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2UKK2RpYWxvZ190aXRsZV9uZXdfaXRlbT1OZXVlXCBSZXNvdXJjZVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBkaWFsb2cgYm94IHNob3dpbmcgd2hlbiBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CitkaWFsb2dfdGl0bGVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfcHJlZmVyZW5jZXM9RWluc3RlbGx1bmdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRpdGxlIGZvciBjb25maXJtaW5nIGV4aXQgZnJvbSBhcHBsaWNhdGlvbgorZGlhbG9nX3RpdGxlX3F1aXQ9UkJNYW5hZ2VyXCBiZWVuZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfc2VhcmNoPVN1Y2hlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfdXNlcl9uYW1lPUJlbnV0emVybmFtZW5cIGVpbmdlYmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdHJhbnNsYXRpb249XHUwMERDYmVyc2V0enR1bmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3VzZXJfbmFtZT1CaXR0ZVwgZ2ViZW5cIFNpZVwgSWhyZW5cIE5hbWVuXCBlaW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdmFyaWFudD1WYXJpYW50ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2dyb3VwPURhc1wgTFx1MDBGNnNjaGVuXCBkaWVzZXJcIEdydXBwZVwgYmV3aXJrdFwgZGllXCBwZXJtYW5lbnRlXCBMXHUwMEY2c2NodW5nXCBhbGxlclwgUmVzb3VyY2VuXCBkaWVzZXJcIEdydXBwZS5cIE1cdTAwRjZjaHRlblwgU2llXCBkaWVcIEdydXBwZVwgZGVubm9jaFwgbFx1MDBGNnNjaGVuPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2l0ZW09TVx1MDBGNmNodGVuXCBTaWVcIGRpZXNlXCBSZXNvdXJjZVwgd2lya2xpY2hcIGxcdTAwRjZzY2hlbj8KKworIworIyBAZ3JvdXAgRXJyb3IgTWVzc2FnZXMKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3I9RmVobGVyCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gYWRkIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcHJvamVjdC4KK2Vycm9yX2FkZGluZ19wcm9qZWN0X2J1bmRsZT1BblwgZXJyb3JcIG9jY3VycmVkXCB0cnlpbmdcIHRvXCBhZGRcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgeW91XCBzZWxlY3RlZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX2Jhc2VjbGFzc193aGl0ZXNwYWNlPVJlc291cmNlbm5hbWVuXCBkXHUwMEZDcmZlblwga2VpbmVcIFdoaXRlLVNwYWNlc1wgZW50aGFsdGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfYnVuZGxlX25vdF9jcmVhdGVkPUVzXCB3dXJkZVwga2VpblwgUmVzb3VyY2UtQnVuZGxlXCBlcnpldWd0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2ZpbGU9QmVpbVwgRXJ6ZXVnZW5cIGRlclwgUmVzb3VyY2VuZGF0ZWlcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9ncm91cD1CZWltXCBFcnpldWdlblwgZGVyXCBSZXNvdXJjZW5ncnVwcGVcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9pdGVtPUJlaW1cIEVyemV1Z2VuXCBkZXNcIEVpbnRyYWdzXCBpc3RcIGVpblwgUHJvYmxlbVwgYXVmZ2V0cmV0ZW4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBjcmVhdGluZyBhIHByb2plY3QKK2Vycm9yX2NyZWF0aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBjcmVhdGVcIGFcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG1lc3NhZ2UgZnJvbSBhbiBJT0V4Y2VwdGlvbiB0aGF0IGlzIHRocm93bgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIGZpbGUKK2Vycm9yX2RlbGV0aW5nPUJlaW1cIGxcdTAwRjZzY2hlblwgZGVyXCBEYXRlaVwgezB9XCBpc3RcIGVpblwgRmVobGVyXCBhdWZnZXRyZXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IEFuIGVycm9yIHRoYXQgb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlbGV0ZSBhIGZpbGUsIGJ1dCB0aGUgdmlydHVhbCBtYWNoaW5lIGNhbiBub3QgZG8gc28KK2Vycm9yX2RlbGV0aW9uX25vdF9wb3NzaWJsZT1SQk1hbmFnZXJcIGtvbm50ZVwgZGllXCBEYXRlaVwgbmljaHRcIGxvZXNjaGVuLlwgWnVnYW5nXCB2ZXJ3ZWlnZXJ0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2UgZm9yIGV4cG9ydGluZyByZXNvdXJjZSBidW5kbGVzCitlcnJvcl9leHBvcnQ9RWluXCBGZWhsZXJcIGlzdFwgYmVpbVwgRXhwb3J0aWVyZW5cIGRlc1wgUmVzb3VyY2VuYlx1MDBGQ25kZWxzXCBhdWZnZXRyZXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfaW50ZXJuYWw9SW50ZXJuZXJcIEZlaGxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2ZpbGU9QmVpbVwgXHUwMEM0bmRlcm5cIGRlclwgUmVzb3VyY2VuZGF0ZWlcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9ncm91cD1CZWltXCBcdTAwQzRuZGVyblwgZGVyXCBSZXNvdXJjZW5ncnVwcGVcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9pdGVtPUJlaW1cIFx1MDBDNG5kZXJuXCBkZXNcIEVpbnRyYWdzXCBpc3RcIGVpblwgUHJvYmxlbVwgYXVmZ2V0cmV0ZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2ZpbGU9VW1cIGVpbmVcIFJlc291cmNlbmRhdGVpXCB6dVwgZXJ6ZXVnZW4sXCBtXHUwMEZDc3NlblwgU2llXCB6dW5cdTAwRTRjaHN0XCBlaW5cIFJlc291cmNlLUJ1bmRsZVwgZXJ6ZXVnZW5cIG9kZXJcIFx1MDBGNmZmbmVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9ncm91cD1VbVwgZWluZVwgUmVzb3VyY2VuZ3J1cHBlXCB6dVwgZXJ6ZXVnZW4sXCBtXHUwMEZDc3NlblwgU2llXCB6dW5cdTAwRTRjaHN0XCBlaW5cIFJlc291cmNlLUJ1bmRsZVwgZXJ6ZXVnZW5cIG9kZXJcIFx1MDBGNmZmbmVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgcmVzb3VyY2UsIHdpdGhvdXQgYW4gb3BlbiByZXNvdXJjZSBidW5kbGUKK2Vycm9yX25vX2J1bmRsZV9mb3JfaXRlbT1VbVwgZWluZVwgUmVzb3VyY2VcIHp1XCBlcnpldWdlbixcIG1cdTAwRkNzc2VuXCBTaWVcIHp1blx1MDBFNGNoc3RcIGVpblwgUmVzb3VyY2UtQnVuZGxlXCBlcnpldWdlblwgb2RlclwgXHUwMEY2ZmZuZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZXJyb3Jfbm9fa2V5X3JlcGxhY2U9RXJzZXR6ZW5cIGZcdTAwRkNyXCBSZXNvdXJjZW5zY2hsXHUwMEZDc3NlbFwgaXN0XCBuaWNodFwgZXJsYXVidC5cIEFsbGVcIGFuZGVyZW5cIEVyc2V0enVuZ2VuXCB3ZXJkZW5cIGR1cmNoZ2VmXHUwMEZDaHJ0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIHRoYXQgUkJNYW5hZ2VyIGNhbiBub3QgcmVhZCB0aGUgZmlsZSBhcyBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9RGllXCBhdXNnZXdcdTAwRTRobHRlXCBSZXNvdXJjZVwgd3VyZGVcIG5pY2h0XCB2b21cIFJCTWFuYWdlclwgZXJ6ZXVndFwgb2RlclwgaXN0XCBiZXNjaFx1MDBFNGRpZ3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3b3VsZCBub3Qgb3BlbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIG9jY3VyaW5nIG9uIGFuIEkvTyBlcnJvciB0cnlpbmcgdG8gb3BlbiBhIGZpbGUKK2Vycm9yX29wZW5pbmdfZmlsZT1Lb25udGVcIGRpZVwgRGF0ZWlcIHswfVwgbmljaHRcIFx1MDBGNmZmbmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gUkJNYW5hZ2VyIGVuY291bnRlcnMgYW4gZXJyb3Igd3JpdGluZyBwcmVmZXJlbmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0KK2Vycm9yX3ByZWZlcmVuY2VzX3NhdmU9RWluXCBGZWhsZXJcIGlzdFwgYmVpbVwgU3BlaWNoZXJuXCBkZXJcIEVpbnN0ZWxsdW5nZW5cIGF1ZmdldHJldGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZAorIyBAY29tbWVudCBBIG1lc3NhZ2UgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGluIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlCitlcnJvcl9zYXZpbmc9QmVpbVwgU3BlaWNoZXJuXCBkZXNcIFJlc291cmNlXCBCdW5kbGVzXCBpc3RcIGVpblwgRmVobGVyXCBhdWZnZXRyZXRlblw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIHNhdmluZyBhIHByb2plY3QKK2Vycm9yX3NhdmluZ19wcm9qZWN0PUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgc2F2ZVwgdGhlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTdWdnZXN0IHRyeWluZyB0byBpbXBvcnQgdGhlIHJlc291cmNlIGJ1bmRsZSBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQuCitlcnJvcl9zdWdnZXN0X2ltcG9ydF9wcm9wZXJ0aWVzPVZlcnN1Y2hlblwgU2llXCBhbHRlcm5hdGl2XCBkYXNcIFJlc291cmNlbmJcdTAwRkNuZGVsXCB6dVwgaW1wb3J0aWVyZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5fZmlsZT1CaXR0ZVwgd1x1MDBFNGhsZW5cIFNpZVwgYW5kZXJlXCBFbmNvZGluZy1XZXJ0ZS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9ncm91cD1CaXR0ZVwgd1x1MDBFNGhsZW5cIFNpZVwgZWluZW5cIGFuZGVyZW5cIEdydXBwZW5uYW1lbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9pdGVtPUJpdHRlXCB3XHUwMEU0aGxlblwgU2llXCBlaW5lblwgYW5kZXJlblwgRWludHJhZ3NzY2hsXHUwMEZDc3NlbC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVmFsdWUgaW5zZXJ0ZWQgaW50byB0YWJsZSBjZWxscyB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cmVkCit0YWJsZV9jZWxsX2Vycm9yPSpGZWhsZXIqCisKKyMKKyMgQGdyb3VwIEV4cG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggZXhwb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IE9wdGlvbiBmb3IgdGhlIHBhcmFtZXRlciBmb3IgY3JlYXRlZCBhIHByb3RlY3RlZCBjbGFzcworZXhwb3J0X2phdmFfY2xhc3NfcHJvdGVjdGVkPSdwcm90ZWN0ZWRcIGNsYXNzJ1wgZXJzdGVsbGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgc2V0dGluZyB0aGUgY3JlYXRlZCBjbGFzcyBhcyBwdWJsaWMKK2V4cG9ydF9qYXZhX2NsYXNzX3B1YmxpYz0ncHVibGljXCBjbGFzcydcIGVyc3RlbGxlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBwcm90ZWN0ZWQgbWV0aG9kcyBpbiB0aGUgamF2YSBjbGFzcworZXhwb3J0X2phdmFfbWV0aG9kc19wcm90ZWN0ZWQ9J3Byb3RlY3RlZFwgbWV0aG9kcydcIGVyc3RlbGxlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBwdWJsaWMgbWV0aG9kcworZXhwb3J0X2phdmFfbWV0aG9kc19wdWJsaWM9J3B1YmxpY1wgbWV0aG9kcydcIGVyc3RlbGxlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IFRpdGxlIG9mIGEgY2hlY2sgYm94IGZvbGxvd2VkIGJ5IGEgdGV4dCBmaWVsZCBmb3Igc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYSBwYWNrYWdlIGluIHRoZSBnZW5lcmF0ZWQgamF2YSBjbGFzcyBhbmQgd2hhdCB0aGUgcGFja2FnZSBzaG91bGQgYmUgY2FsbGVkCitleHBvcnRfamF2YV9wYWNrYWdlPUdlYmVuXCBzaWVcIGVpblwgJ3BhY2thZ2UnXCBhblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgVGV4dCBwbGFjZWQgaW4gYSBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoZSBkaWFsb2cgYm94IGZvciBzcGVjaWZ5aW5nIHBhcmFtZXRlcnMgY29uY2VybmluZyB0aGUgZXhwb3J0IG9mIHJlc291cmNlIGJ1bmRsZXMgaW50byBhIGphdmEgY2xhc3MKK2V4cG9ydF9qYXZhX3RpdGxlPUJpdHRlXCBnZWJlblwgU2llXCBkaWVcIGZvbGdlbmRlblwgUGFyYW1ldGVyXCBmdWVyXCBkaWVcIEphdmEtS2xhc3NlXCBhblw6CisKKyMKKyMgQGdyb3VwIEdlbmVyYWwKKyMKKyMgQGdyb3VwQ29tbWVudCBTb21lIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbiBhY2Nyb3NzIGdyb3VwcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIGZpbGUgb3IgY2xhc3MgY29tcG9zZWQgb2YgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb25zIGZvciB0aGUgYnVuZGxlCitiYXNlY2xhc3M9QmFzaXNrbGFzc2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgVGhpcyBpcyB0aGUgbGVnYWwgY29weXJpZ2h0IG5vdGljZQorY29weXJpZ2h0PShDKVwgQ29weXJpZ2h0XCBJQk1cIENvcnAuXCAyMDAwLTIwMDRcIC1cIEFsbGVcIFJlY2h0ZVwgdm9yYmVoYWx0ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VybmVyYWwgdXNlIGZvciBmaWxlIGRpcmVjdG9yaWVzCitkaXJlY3Rvcnk9VmVyemVpY2huaXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2dyb3Vwcz1HcnVwcGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZpbGUgaW4gdGhlICdJbWFnZXMnIGRpcmVjdG9yeSB0aGF0IHJlcHJlc2VudHMgdGhlIGxvZ28gc2VlbiBhdCB0aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbgorbG9nb19maWxlbmFtZT1UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUcmVlIG5vZGUgdGl0bGUgd2hlbiB2aWV3aW5nIGEgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBwcm9qZWN0IHZpZXcgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgcHJvamVjdAorbm9fcHJvamVjdD1EZWZhdWx0XCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUcmVlIG5vZGUgdGl0bGUgZGVmYXVsdGVkIHRvIHdoZW4gbm8gcmVzb3VyY2UgYnVuZGxlIG9yIHByb2plY3QgaGFzIGJlZW4gb3BlbmVkIGJ5IHRoZSB1c2VyCitub19wcm9qZWN0X2J1bmRsZT1Ob1wgUHJvamVjdFwgb3JcIFJlc291cmNlXCBCdW5kbGVcIE9wZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgdG9wIHRyZWUgbm9kZSB0aXRsZSwgd2hlbiBubyByZXNvdXJjZSBidW5kbGUgaGFzIGJlZW4gb3BlbmVkIG9yIGNyZWF0ZWQKK25vX3Jlc291cmNlX2J1bmRsZT1LZWluXCBSZXNvdXJjZS1CdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK25vbmU9S2VpbihlKQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUHJvamVjdCB0YWJsZSBjb2x1bW4gbmFtZSAtIExvY2F0aW9uIG9mIGEgcmVzb3VyY2UgYnVuZGxlCitwcm9qZWN0X3RhYmxlX2ZpbGVfbG9jYXRpb249RmlsZVwgTG9jYXRpb24KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRhYmxlIENvbHVtbiBOYW1lIGZvciByZXNvdXJjZSBidW5kbGUgbmFtZQorcHJvamVjdF90YWJsZV9yZXNvdXJjZV9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEFuIGFiYnJldmlhdGVkIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmJtYW5hZ2VyPVJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCAKK3JibWFuYWdlcl9jb250YWN0PUF1dG9yXDpcIEphcmVkXCBKYWNrc29uXCAmXCBHZW9yZ2VcIFJob3RlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBmdWxsIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX21hbmFnZXI9UmVzb3VyY2VcIEJ1bmRsZVwgTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAordGFibGVfY29sdW1uX2Vycm9yPVRhYmVsbGVuc3BhbHRlbmZlaGxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEB7MH0gQ291bnRyeSBJU08gY29kZQorIyBAY29tbWVudCBOb2RlIHRpdGxlLCB1bmRlciB3aGljaCBhbGwgZmlsZXMgb2YgdGhlIHNhbWUgY291bnRyeSwgbGFuZ3VhZ2UgcmVzaWRlCit0cmVlX2NvdW50cnlfbm9kZT1MXHUwMEU0bmRlci1Db2RlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEB7MH0gTGFuZ3VhZ2UgRW5jb2RpbmcKKyMgQGNvbW1lbnQgVGhlIG5vZGUgYmVsb3cgd2hpY2ggbGFuZ3VhZ2VzIG9mIG9uZSBlbmNvZGluZyBhcmUgZ3JvdXBlZAordHJlZV9sYW5ndWFnZV9ub2RlPVNwcmFjaGVuLUNvZGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCit0cmVlX3ZhcmlhbnRfbm9kZT1WYXJpYW50ZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBuYW1lIGFzc2lnbmVkIGFzIGEgdXNlciBuYW1lIHdoZW4gdGhlIHVzZXIgbmFtZSBpcyBub3Qgc3BlY2lmaWVkCit1bmtub3duX3VzZXI9VW5iZWthbm50CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCit1bnRpdGxlZD1VbmJlbmFubnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK3VudHJhbnNsYXRlZF9pdGVtcz1OaWNodFwgXHUwMEZDYmVyc2V0enRlXCBSZXNvdXJjZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAezB9IFRoZSB2ZXJzaW9uIG51bWJlcgorIyBAY29tbWVudCBUaGUgdmVyc2lvbiBvZiB0aGlzIGFwcGxpY2F0aW9uCit2ZXJzaW9uPVZlcnNpb25cIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBnZW5lcmFsIHVzZSBXYXJuaW5nCit3YXJuaW5nPVdhcm51bmcKKworIworIyBAZ3JvdXAgSW1wb3J0CisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGRlYWxpbmcgd2l0aCBpbXBvcnQgb3B0aW9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBmaWxlIGNob29zZXIgZm9yIGNob29zaW5nIFRNWCBmaWxlcworaW1wb3J0X1RNWF9maWxlX2Rlc2NyaXB0aW9uPVRNWFwgRGF0ZWllbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFRNWCBYTUwgZmlsZXMKK2ltcG9ydF9UTVhfdGl0bGU9VE1YXCBEYXRlaVwgaW1cIHBvcnRpZXJlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgWExJRkYgKC54bGYpIGZpbGVzCitpbXBvcnRfWExGX2ZpbGVfZGVzY3JpcHRpb249WExJRkZcIERhdGVpZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfdGl0bGU9WExJRkZcIERhdGVpXCBpbVwgcG9ydGllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsY2l0cyBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcworaW1wb3J0X2NvbmZsaWN0X3Byb21wdD1CZWlcIGplZGVtXCBLb25maWxrdFwgbmFjaGZyYWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gc3BlY2lmeWluZyB3aGV0aGVyIGEgZ3JvdXAgZm91bmQgaW4gdGhlIHRhcmdldCBidXQgbm90IGZvdW5kIGluIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgb3Igbm90CitpbXBvcnRfZGVmYXVsdF9ncm91cF9jcmVhdGlvbj1HcnVwcGVuXCBlcnpldWdlbixcIGRpZVwgbmljaHRcIGltXCBha3R1ZWxsZW5cIEJcdTAwRkNuZGVsXCBlbnRoYWx0ZW5cIHNpbmQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0b2luIGZvciBtYXJraW5nIHRoZSBpbmNvbWluZyB2YWx1ZXMgYXMgdHJhbnNsYXRlZCBvciBub3QKK2ltcG9ydF9kZWZhdWx0X3RyYW5zbGF0ZWQ9QWxzXCBcdTAwRkNiZXJzZXR6dFwgbWFya2llcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBvcHRpb25zIHNwZWNpZnlpbmcgdGhlIG1ldGEgZGF0YSB0byBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgcmVzb3VyY2VzIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGltcG9ydCBzb3VyY2UKK2ltcG9ydF9kZWZhdWx0X3ZhbHVlcz1Wb3JlaW5zdGVsbHVuZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIGxvY2FsZSBlbmNvZGluZyBvZiB0aGUgZmlsZSBpbiBxdWVzdGlvbgorIyBAY29tbWVudCBJbnN0cnVjdGlvbnMgZm9yIHByb21wdGluZyB0aGUgdXNlciB0byByZXNvbHZlIGEgY29uZmxpY3Qgd2hlbiBpbXBvcnRpbmcgcmVzb3VyY2VzIGZyb20gYSBsb2NhbGUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2Nob29zZT1EaWVcIENvZGllcnVuZ1wgezB9XCBleGlzdGllcnRcIG5pY2h0LlwgV1x1MDBFNGhsZW5cIFNpZVwgZWluZVwgT3B0aW9uLFwgdW1cIGRhc1wgUHJvYmxlbVwgenVcIGxcdTAwRjZzZW4sXCBvZGVyXCBDYW5jZWxcIHVtXCBkZW5cIEtvbmZsaWt0XCB6dVwgaWdub3JpZXJlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCBhIG5ldyBmaWxlIGlzIGdlbmVyYXRlZCwgYnV0IG5vdCBwb3B1bGF0ZWQKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX2VtcHR5PUVpbmVcIG5ldWUsXCBsZWVyZVwgUmVzb3VyY2VuZGF0ZWlcIGVyemV1Z2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aCBhbGwgdGhlIGV4aXN0aW5nIHJlc291cmNlcworaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGU9RWluZVwgbmV1ZVwgUmVzb3VyY2VuZGF0ZWlcIGVyemV1Z2VuXCB1bmRcIG1pdFwgZGVuXCBSZXNvdXJjZW5cIGRlclwgQmFzaXNrbGFzc2VcIGZcdTAwRkNsbGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggdGhlIGNvbmZsaWN0cyBhcmUgaWdub3JlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlPUFsbGVcIFJlc291cmNlblwgYXVzXCBMb2thbGdydXBwZW4sXCBkaWVcIG5pY2h0XCBpblwgaW1cIGFrdHVlbGxlblwgUmVzb3VyY2VuYlx1MDBGQ25kZWxcIGV4aXN0aWVyZW4sXCBcdTAwRkNiZXJzcHJpbmdlblwgdW5kXCBpZ25vcmllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBzZWN0aW9uIGxpc3Rpbmcgb3B0aW9ucyBmb3Igd2hhdCB0byBkbyB3aGVuIGFuIGltcG9ydGVkIHZhbHVlIGV4aXN0cyBpbiBhIGxvY2FsZSBub3QgZGVmaW5lZCBpbiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdHM9UmVzb3VyY2VuZGF0ZWlcIG5pY2h0XCBnZWZ1bmRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTZWxlY3Rpb24gb2YgdGhlIGRlZmF1bHQgZ3JvdXAuIEEgbGlzdCBvZiBncm91cHMgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgcmVzb3VyY2UgaW4gYSBDb21ib0JveAoraW1wb3J0X2luc2VydF9ncm91cD1FaW5mXHUwMEZDZ2VuXCBpblwgR3J1cHBlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB0eXBlcyBvZiBmaWxlcyBhY2NlcHRlZCBmb3IgdGhpcyBpbXBvcnQgdHlwZQoraW1wb3J0X2phdmFfZmlsZV9kZXNjcmlwdGlvbj1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEJhc2lza2xhc3NlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgaW1wb3J0IGZyb20gamF2YSBjbGFzc2VzCitpbXBvcnRfamF2YV90aXRsZT1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEtsYXNzZW5pbXBvcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgaW5kaWNhdGluZyBzZWN0aW9uIGNvbnRhaW5pbmcgdXNlciBvcHRpb25zCitpbXBvcnRfb3B0aW9ucz1JbXBvcnRvcHRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZmlsZSBjaG9vc2VyIGZvciBzZWxlY3Rpb24gb2YgcmVzb3VyY2UgYnVuZGxlcyBzdG9yZWQgaW4gLnByb3BlcnRpZXMgZmlsZXMKK2ltcG9ydF9wcm9wZXJ0aWVzX2ZpbGVfZGVzY3JpcHRpb249QmFzaXNrbGFzc2VuXCBkZXNcIFJlc291cmNlbmJcdTAwRkNuZGVscworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIHByb3BlcnRpZXMgZmlsZXMgKGNyZWF0ZWQgb3Igbm90IGJ5IFJCTWFuYWdlcikKK2ltcG9ydF9wcm9wZXJ0aWVzX3RpdGxlPVByb3BlcnR5LURhdGVpZW5cIGltcG9ydGllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MX0gRW5jb2Rpbmcgb2YgdGhlIHJlc291cmNlIHZhbHVlIHdpdGggYSBjb25mbGljdAorIyBAezB9IFRoZSBrZXkgdmFsdWUgb2YgdGhlIHJlc291cmNlIGluIGNvbmZsaWN0CisjIEBjb21tZW50IFRoaXMgaXMgYSB3YXJuaW5nIGFuZCBpbnN0cnVjdGlvbiBmb3Igd2hlbiBhIHJlc291cmNlIGNvbmZsaWN0IG9jY3VycyBkdXJpbmcgYW4gaW1wb3J0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlPURlclwgU2NobFx1MDBGQ3NzZWxcIHswfVwgZXhpc3RpZXJ0XCBiZXJlaXRzXCBpbVwgUmVzb3VyY2VuYlx1MDBGQ25kZWxcIHsxfS5cIFdcdTAwRTRobGVuXCBTaWVcIGVpbmVcIE9wdGlvblwgYXVzLFwgdW1cIGRpZXNlblwgS29uZmxpa3RcIHp1XCBsXHUwMEY2c2VuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSBpdGVtCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGltcG9ydCBmaWxlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3NvdXJjZT1cdTAwRENiZXJzZXR6dW5nXCBpbXBvcnRpZXJlblw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdHJhbnNsYXRpb24gdmFsdWUgaGVsZCBieSB0aGUgYWN0aXZlIHJlc291cmNlIGJ1bmRsZSBkdXJpbmcgYSB0cmFuc2xhdGlvbiByZXNvdXJjZSBjb25mbGljdAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV90YXJnZXQ9XHUwMERDYmVyc3R6dW5nXCBkZXNcIFJlc291cmNlbmJcdTAwRkNuZGVsc1w6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgcmVzb3VyY2UgY29uZmxpY3RzIGJ5IGlnbm9yaW5nIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZT1Lb25mbGlrdFwgaWdub3JpZXJlblwgdW5kXCBPcmlnaW5hbHJlc291cmNlXCBiZWliZWhhbHRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGljdHMgYnkgdXNpbmcgdGhlIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZT1SZXNvdXJjZVwgbWl0XCBkZW1cIFdlcnRcIGF1c1wgZGVyXCBJbXBvcnRkYXRlaVwgXHUwMEZDYmVyc2NocmVpYmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGxpc3Rpbmcgb3B0aW9ucyBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBiZXR3ZWVuIHJlc291cmNlcworaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0cz1SZXNvdXJjZW5rb25mbGlrdGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgZm9yIHRoZSBpbXBvcnQKK2ltcG9ydF9zb3VyY2VfZmlsZT1RdWVsbGRhdGVpXDpcIHswfQorCisjCisjIEBncm91cCBNZW51IEl0ZW1zCisjCisjIEBncm91cENvbW1lbnQgVGhlc2UgcmVzb3VyY2VzIHJlcHJlc2VudCBhbGwgb2YgdGhlIG1lbnUgYW5kIG1lbnUgaXRlbSB0aXRsZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG1lbnUgdGl0bGUgY292ZXJpbmcgY29weWluZywgcGFzdGluZywgZGVsZXRpbmcgb2YgaXRlbXMKK21lbnVfZWRpdD1CZWFyYmVpdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHk9S29waWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY29weV90cmlnZ2VyPWsKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY3V0PUF1c3NjaG5laWRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXRfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZT1MXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlX3RyaWdnZXI9bAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZT1FaW5mXHUwMEZDZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X3Bhc3RlX3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZWRpdCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9lZGl0X3RyaWdnZXI9YgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgdGhlIG9wZW5pbmcsIHNhdmluZywgZXRjLiBkb2N1bWVudHMgYW5kIGV4aXRpbmcgdGhlIHByb2dyYW0KK21lbnVfZmlsZT1EYXRlaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmlsaXR5IHRvIGV4cG9ydCByZXNvdXJjZSBidW5kbGVzIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzCittZW51X2ZpbGVfZXhwb3J0PVJlc291cmNlbmJcdTAwRkNuZGVsXCBleHBvcnRpZXJlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIElDVSBSZXNvdXJjZSBCdW5kbGUgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfSUNVPUlDVVwgRG9rdW1lbnRlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMi0wNS0xNyBAbW9kaWZpZWQgMjAwMi0wNS0xNyBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9JQ1VfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFibGl0eSB0byBleHBvcnQgdG8gVE1YIFhNTCBmaWxlcworbWVudV9maWxlX2V4cG9ydF9UTVg9VE1YXCBEYXRlaWVuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IHgKK21lbnVfZmlsZV9leHBvcnRfWExGPVhMSUZGXCBEYXRlaWVuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9YTEZfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IHRvIGphdmEgZmlsZXMgdGhhdCBjb21waWxlIHRvIGJlIExpc3RSZXNvdXJjZUJ1bmRsZSBjbGFzcyBleHRlbnNpb25zCittZW51X2ZpbGVfZXhwb3J0X2phdmE9S29tcGlsaWVyYmFyZVwgSmF2YVwgRGF0ZWllbi4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRXhwb3J0IGFiaWxpdHkgdG8gcHJvcGVydGllcyBmaWxlcyBtaW51cyB0aGUgbWV0YWRhdGEKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllcz1NaW5pbWFsZVwgRWlnZW5zY2hhZnRzZGF0ZWllbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllc190cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBpbXBvcnQgYW5kIG1lcmdpbmcgYW5vdGhlciByZXNvdXJjZSBmaWxlIHdpdGggdGhlIGJ1bmRsZSBiZWluZyB3b3JrZWQgd2l0aAorbWVudV9maWxlX2ltcG9ydD1SZXNvdXJjZS1CdW5kbGVcIGF1c1wgRGF0ZWlcIGltcG9ydGllcmVuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmxpaXR5IGZyb20gWE1MIFRNWCBkb2N1bWVudHMKK21lbnVfZmlsZV9pbXBvcnRfVE1YPVRNWFwgRG9rdW1lbnRlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gWE1MIFhMSUZGICgueGxmKSBmaWxlcworbWVudV9maWxlX2ltcG9ydF9YTEY9WExJRkZcIERva3VtZW50ZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBYCittZW51X2ZpbGVfaW1wb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBqYXZhIGNsYXNzZXMgKExpc3RSZXNvdXJjZUJ1bmRsZSkKK21lbnVfZmlsZV9pbXBvcnRfamF2YT1MaXN0UmVzb3VyY2VCdW5kbGVcIEphdmFcIEtsYXNzZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X2phdmFfdHJpZ2dlcj1qCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gcHJvcGVydGllcyBmaWxlcyBub3QgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlcgorbWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzPUVpbmZhY2hlXCBSZXNvdXJjZW5iXHUwMEZDbmRlbC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllc190cmlnZ2VyPVMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF90cmlnZ2VyPW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlCittZW51X2ZpbGVfbmV3PU5ldQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfbmV3X3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCittZW51X2ZpbGVfb3Blbj1cdTAwRDZmZm5lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfb3Blbl90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY2xvc2luZyB0aGUgYXBwbGljYXRpb24KK21lbnVfZmlsZV9xdWl0PUJlZW5kZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9maWxlX3F1aXRfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfc2F2ZT1TcGVpY2hlcm4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9maWxlX3NhdmVfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIHNhdmluZyBhIHJlc291cmNlIGJ1bmRsZSB0byBhIHBhcnRpY3VsYXIgbG9jYXRpb24gYW5kIGZpbGUgbmFtZQorbWVudV9maWxlX3NhdmVhcz1TcGVpY2hlcm5cIHVudGVyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfZmlsZV9zYXZlYXNfdHJpZ2dlcj11CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9maWxlJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2ZpbGVfdHJpZ2dlcj1kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBoZWxwIGluZm9ybWF0aW9uIGFuZCBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtCittZW51X2hlbHA9SGlsZmUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSB3aGljaCBicmluZ3MgdXAgYSBkaWFsb2cgZGVzY3JpYmluZyB0aGUgYXBwbGljYXRpb24KK21lbnVfaGVscF9hYm91dD1cdTAwRENiZXJcIFJlc291cmNlXCBCdW5kbGVcIE1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9oZWxwX2Fib3V0X3RyaWdnZXI9YgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfaGVscCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9oZWxwX3RyaWdnZXI9aAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3Igb3B0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIG5ldyByZXNvdXJjZXMsIGdyb3VwcywgYW5kIHJlc291cmNlIGZpbGVzCittZW51X29wdGlvbnM9T3B0aW9uZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgaXRlbQorbWVudV9vcHRpb25zX2FkZGVudHJ5PU5ldWVuXCBFaW50cmFnXCBoaW56dWZcdTAwRkNnZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGVudHJ5X3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBmaWxlIGZvciBhIHBhcnRpY3VsYXIgbGFuZ3VhZ2UvY291bnRyeS92YXJpYW50CittZW51X29wdGlvbnNfYWRkZmlsZT1OZXVlXCBSZXNvdXJjZW5kYXRlaVwgaGluenVmXHUwMEZDZ2VuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRmaWxlX3RyaWdnZXI9ZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorbWVudV9vcHRpb25zX2FkZGdyb3VwPU5ldWVcIFJlc291cmNlbmdydXBwZVwgaGluenVmXHUwMEZDZ2VuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGVkaXRpbmcgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXM9RWluc3RlbGx1bmdlbi4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3ByZWZlcmVuY2VzX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgbWFrZXMgdmlzaWJsZSB0aGUgcHJvamVjdCB2aWV3ZXIKK21lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcj1PcGVuXCBQcm9qZWN0XCBWaWV3ZXIKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXI9dgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfb3B0aW9ucycgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9vcHRpb25zX3RyaWdnZXI9bworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBhZGRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlIHRvIHRoZSBwcm9qZWN0CittZW51X3RyZWVfYWRkX3Byb2plY3RfYnVuZGxlPUFkZFwgUmVzb3VyY2VcIEJ1bmRsZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGRlbGV0aW5nIHBlcm1hbmVudGx5IGEgcmVzb3VyY2UgZmlsZQorbWVudV90cmVlX2RlbGV0ZT1SZXNvdXJjZW5kYXRlaVwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciByZW1vdmluZyBhIHNwZWNpZmljIHJlc291cmNlIGZpbGUgZnJvbSB0aGUgdHJlZSB2aWV3IG9mIHRoZSByZXNvdXJjZSBidW5kbGUKK21lbnVfdHJlZV9oaWRlPVJlc291cmNlbmRhdGVpXCBuaWNodFwgbWVoclwgYW56ZWlnZW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorbWVudV90cmVlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK21lbnVfdHJlZV9vcGVuX3Byb2plY3Q9T3BlblwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdHJlZQorbWVudV90cmVlX3JlbW92ZV9wcm9qZWN0X2J1bmRsZT1SZW1vdmVcIGZyb21cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBhIHNwZWNpZmljIHJlc291cmNlIGJ1bmRsZSBmaWxlCittZW51X3RyZWVfc2F2ZT1SZXNvdXJjZW5kYXRlaVwgc3BlaWNoZXJuCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSBwcm9qZWN0IGZpbGUsIG5vdCB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0aGVtc2VsdmVzIHdpdGhpbiB0aGUgcHJvamVjdAorbWVudV90cmVlX3NhdmVfcHJvamVjdD1TYXZlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XCBGaWxlLi4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGZvciBzZWxlY3RpbmcgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdCB0cmVlIHRvIGJlIGVkaXRlZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWUKK21lbnVfdHJlZV9zZWxlY3RfcHJvamVjdF9idW5kbGU9V29ya1wgd2l0aFwgdGhpc1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgY2hhbmdpbmcgdGhlIGRpc3BsYXkgYmVpbmcgc2VlbiBieSB0aGUgdXNlcgorbWVudV92aWV3PUFuc2ljaHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSB0aGF0IHRha2VzIHlvdSBkaXJlY3RseSB0byB0aGUgc3RhdGlzdGljcyBwYW5lbCBmb3IgdGhlIGVudGlyZSBidW5kbGUKK21lbnVfdmlld19zdGF0aXN0aWNzPVJlc291cmNlXCBCdW5kbGVcIFN0YXRpc3RpaworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X3ZpZXdfc3RhdGlzdGljc190cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X3ZpZXcnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfdmlld190cmlnZ2VyPWEKKworIworIyBAZ3JvdXAgUHJvamVjdCBQYW5lbAorIworIyBAZ3JvdXBDb21tZW50IFBhbmVsIGFzc29jaWF0ZWQgd2l0aCBQcm9qZWN0IGVkaXRpbmcKKworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCisjIEBjb21tZW50IExhYmVsIGluZGljYXRvciBhc3NvY2lhdGluZyBhIHRleHQgYm94IGNvbnRhaW5pbmcgYSB0cmFuc2xhdGlvbiB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgdGhlIHRyYW5zbGF0aW9uIGNvbWVzIGZyb20KK3Byb2plY3RfcGFuZWxfYnVuZGxlPVJlc291cmNlXCBCdW5kbGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IE5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorIyBAY29tbWVudCBTcGVjaWFsIGluZGljYXRvciBvZiB0aGUgcmVzb3VyY2UgaXRlbSByZXNvdXJjZSBidW5kbGUgd2hlbiB0aGUgaXRlbSBpcyB1bnRyYW5zbGF0ZWQKK3Byb2plY3RfcGFuZWxfYnVuZGxlX3VudHJhbnNsYXRlZD1SZXNvdXJjZVwgQnVuZGxlXDpcIHswfVwgKFVudHJhbnNsYXRlZCkKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IExhYmVsIHRleHQgbWFya2luZyB0aGUgbGluZSBhYm92ZSBvciB0byB0aGUgbGVmdCBvZiBhIHJlc291cmNlIGNvbW1lbnQKK3Byb2plY3RfcGFuZWxfY29tbWVudD1CYXNlXCBDbGFzc1wgUmVzb3VyY2VcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBmb3IgYSBjb21tZW50IHdoZW4gbm9uZSBpcyBmb3VuZCBmb3IgYSByZXNvdXJjZQorcHJvamVjdF9wYW5lbF9jb21tZW50X25vbmU9Tm9cIGNvbW1lbnRcIHN1cHBsaWVkCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgc2hvd24gb24gdGhlIHByb2plY3QgcGFuZWwgZm9yIGNvbW1pdHRpbmcgY2hhbmdlIHRvIG9uZSByZXNvdXJjZSBvbmx5Citwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b249Q29tbWl0XCBDaGFuZ2UKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3Igc2F2aW5nIGFsbCBvZiB0aGUgcmVzb3VyY2VzIGRpc3BsYXllZC4gVGhpcyBtZWFucyBtdWx0aXBsZSByZXNvdXJjZSBmaWxlcyBnZXQgc2F2ZWQuCitwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b25fYWxsPUNvbW1pdFwgQWxsXCBSZXNvdXJjZVwgQ2hhbmdlcworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGVmYXVsdCB0aXRsZSBzaG93biBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGVuIG5vIHBhcnRpY3VsYXIgcmVzb3VyY2UgaGFzIGJlZW4gc2VsZWN0ZWQKK3Byb2plY3RfcGFuZWxfZGVmYXVsdF90aXRsZT1Qcm9qZWN0XCBSZXNvdXJjZVwgRWRpdGluZworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGV4dCBmaWVsZCBtYXJrZXIgZm9yIHRoZSB0cmFuc2xhdGlvbiBvZiBhIHJlc291cmNlIHdoZW4gdGhhdCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIGVuY29kaW5nIGZpbGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoCitwcm9qZWN0X3BhbmVsX2l0ZW1faW5oZXJpdHM9PE5vXCBUcmFuc2xhdGlvblw6XCBSZXNvdXJjZVwgSW5oZXJpdHNcIGZyb21cIHBhcmVudD4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UKKyMgQGNvbW1lbnQgVGl0bGUgb24gdGhlIHByb2plY3QgcGFuZWwgd2hpbGUgYSByZXNvdXJjZSBpcyBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF90aXRsZT1Qcm9qZWN0XCBSZXNvdXJjZVwgRWRpdGluZ1w6XCB7MH0KKworIworIyBAZ3JvdXAgUkJSZXBvcnRlcgorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3IgdGhlIFJCUmVwb3J0ZXIgYXBwbGljYXRpb24KKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBzZWxlY3RpbmcgZmlsZSBsb2NhdGlvbnMgZm9yIGlucHV0L291dHB1dAorcmVwb3J0ZXJfYnV0dG9uX2Nob29zZT1BdXN3XHUwMEU0aGxlbi4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGluZGljYXRpbmcgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIHNob3VsZCBvY2N1ciBpbW1lZGlhdGVseQorcmVwb3J0ZXJfYnV0dG9uX25vdz1FcnpldWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMjkgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNhdmluZyB0aGUgY3VycmVudCBzZXR0aW5ncyBhcyBkZWZhdWx0CityZXBvcnRlcl9idXR0b25fc2F2ZV9kZWZhdWx0cz1Nb21lbnRhbmVcIEVpbnN0ZWxsdW5nZW5cIGFsc1wgVm9yZWluc3RlbGx1bmdlblwgc3BlaWNoZXJuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdG8gYWN0aXZhdGUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RhcnQ9U3RhcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0byBkZWFjdGl2ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdG9wPVN0b3AKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IExldmVsIG9mIGRldGFpbDogbW9zdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUKK3JlcG9ydGVyX2RldGFpbF9oaWdoPUhvY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgYSBzZWxlY3Rpb24gb3B0aW9uIG9mIHRoZSBsZXZlbCBvZiBkZXRhaWwgaW4gcmVwb3J0aW5nCityZXBvcnRlcl9kZXRhaWxfbGV2ZWw9RGV0YWlsc3R1ZmVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBzdGFuZGFyZAorcmVwb3J0ZXJfZGV0YWlsX25vcm1hbD1Ob3JtYWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQ6IEhUTUwKK3JlcG9ydGVyX2Zvcm1hdF9odG1sPUhUTUwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQgdHlwZTogcGxhaW4gdGV4dAorcmVwb3J0ZXJfZm9ybWF0X3RleHQ9VGV4dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogWE1MCityZXBvcnRlcl9mb3JtYXRfeG1sPVhNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBmaWxlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSBidW5kbGUgdG8gcmVwb3J0IG9uCityZXBvcnRlcl9pbnB1dF9idW5kbGU9UmVzb3VyY2VuYlx1MDBGQ25kZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiB0aGF0IHJlcG9ydGluZyB3aWxsIGhhcHBlbiBhdCBhIHNwZWNpaWZpZWQgdGltZSBvZiBkYXkuIEZvbGxvd2VkIGJ5IGEgdGltZSBhbmQgZGF5IG9wdGlvbi4KK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWQ9QmVyaWNodGVuXCB1bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHNlcXVlbnRpYWwgcmVwb3J0aW5nIHBhdXNlZCBmb3IgYSBkZWZpbmVkIGludGVydmFsIGJldHdlZW4gcmVwb3J0aW5nLiBJbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIG51bWJlciBhbmQgYSB1bml0IG9mIG1lYXN1cmUgb2YgdGltZQorcmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbD1CZXJpY2h0ZW5cIGFsbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gRGF0ZS9UaW1lIG9mIGxhc3QgcmVwb3J0IGdlbmVyYXRpb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgdGltZSBvZiB0aGUgbGFzdCByZXBvcnQKK3JlcG9ydGVyX2xhc3RfcmVwb3J0PUxldHp0ZXJcIEJlcmljaHRcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IERhdGUvVGltZSBvZiBuZXh0IHJlcG9ydAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdoZW4gdGhlIG5leHQgcmVwb3J0IHdpbGwgYmUgZ2VuZXJhdGVkCityZXBvcnRlcl9uZXh0X3JlcG9ydD1OXHUwMEU0Y2hzdGVyXCBCZXJpY2h0XDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSByZXBvcnRzIGFyZSBwbGFjZWQKK3JlcG9ydGVyX291dHB1dF9kaXJlY3Rvcnk9QXVzZ2FiZXZlcnplaWNobmlzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlIGZvciBhIHBhcnRpY3VsYXIgb3V0cHV0IGZvcm1hdAorcmVwb3J0ZXJfb3V0cHV0X2ZpbGU9RGF0ZWluYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBzZXR0aW5nIGludGVydmFsIG9mIHJlcG9ydGluZworcmVwb3J0ZXJfcGFuZWxfaW50ZXJ2YWw9QmVyaWNodHNpbnRlcnZhbGwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBjb25maWd1cmFibGUgb3B0aW9ucyBvZiB0aGUgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9vcHRpb25zPUJlcmljaHRzb3B0aW9uZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1YnBhbmVsIHRpdGxlIGZvciBjaG9vc2luZyBvdXRwdXQgZm9ybWF0cyBmb3IgdGhlIHJlcG9ydHMKK3JlcG9ydGVyX3BhbmVsX291dHB1dF9mb3JtYXQ9QXVzZ2FiZWZvcm1hdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGluZGljYXRpb24gb2YgcnVubmluZyBzdGF0dXMgb2YgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9wYW5lbF9zdGF0dXM9U3RhdHVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFNob3J0IHRpdGxlIGZvciBzZWxlY3RpbmcgYSBjb2RlIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlCityZXBvcnRlcl9wZXJmb3JtX3NjYW49Q29kZVwgU2NhblwgRGF0ZWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFF1aWNrIGluZGljYXRpb24gdGhhdCB0aGUgcmVwb3J0ZXIgaXMgYWN0aXZlIChwZXJoYXBzIHdhaXRpbmcpCityZXBvcnRlcl9zdGF0dXNfcnVubmluZz1HZXN0YXJ0ZXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFF1aWNrIHN0YXR1cyBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlcG9ydGVyIGlzIG5vdCBhY3RpdmUKK3JlcG9ydGVyX3N0YXR1c19zdG9wcGVkPUdlc3RvcHB0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBkYXlzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9kYXlzPVRhZ2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGV2ZXJ5IGRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZXZlcnlkYXk9SmVkZW5cIFRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZnJpZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9mcmlkYXk9RnJlaXRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgaG91cnMgb3B0aW9uCityZXBvcnRlcl90aW1lX2hvdXJzPVN0dW5kZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IG1pbnV0ZXMgb3B0aW9uCityZXBvcnRlcl90aW1lX21pbnV0ZXM9TWludXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgbW9uZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9tb25kYXk9TW9udGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBzYXR1cmRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfc2F0dXJkYXk9U29ubmFiZW5kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBzdW5kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3N1bmRheT1Tb25udGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB0aHVyc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdGh1cnNkYXk9RG9ubmVyc3RhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgdHVlc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdHVlc2RheT1EaWVuc3RhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgd2VkbmVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV93ZWRuZXNkYXk9TWl0dHdvY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgYXBwbGljYXRpb24KK3Jlc291cmNlX2J1bmRsZV9yZXBvcnRlcj1SQlJlcG9ydGVyCisKKyMKKyMgQGdyb3VwIFNlYXJjaCBhbmQgUmVwbGFjZQorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBmb3VuZCBvbiB0aGUgc2VhcmNoIHRhYiBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJhbCBzZWFyY2ggdGl0bGUKK3NlYXJjaD1TdWNoZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBtYWtpbmcgdGhlIHNlYXJjaCBjYXNlIHNlbnNpdGl2ZSBvciBub3QKK3NlYXJjaF9jYXNlX3NlbnNpdGl2ZT1Hcm9cdTAwREYtL0tsZWluc2NocmVpYnVuZ1wgYmVhY2h0ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggcmVzb3VyY2UgY29tbWVudHMKK3NlYXJjaF9jb21tZW50cz1Lb21tZW50YXJlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiB0aGUgZmllbGQgZm9yIGVudGVyaW5nIHRleHQgdG8gc2VhcmNoIG9uCitzZWFyY2hfZmluZD1TdWNoZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggc2VsZWN0aW9uIGZvciBzZWFyY2hpbmcgb3B0aW9uIHRocm91Z2ggcmVzb3VyY2Uga2V5cworc2VhcmNoX2tleXM9U2NobFx1MDBGQ3NzZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCBmb3IgcmVwbGFjaW5nIHRoZSBmb3VuZCB2YWx1ZQorc2VhcmNoX3JlcGxhY2U9RXJzZXR6ZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0cmFuc2xhdGlvbiB2YWx1ZXMKK3NlYXJjaF92YWx1ZXM9XHUwMERDYmVyc2V0enVuZ2VuCisKKyMKKyMgQGdyb3VwIFRhYnMKKyMKKyMgQGdyb3VwQ29tbWVudCBHVUkgVGFicyBpbiB0aGUgbWFpbiBwYW5lbAorCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciBUYWJiZWQgUGFuZSBvdmVyIHRoZSB0cmVlIHNob3dpbmcgYSBzaW5nbGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBpdHMgdmFyaW91cyBmaWxlcwordGFiX2J1bmRsZT1CdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUYWIgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2YXJpb3VzIGdyb3VwcyBpbiB0aGUgYnVuZGxlCit0YWJfZ3JvdXBzPUdydXBwZW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdVSSBUYWIgZm9yIHRhYiBvdmVyIHRyZWUgc2hvd2luZyBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0Cit0YWJfcHJvamVjdD1Qcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBwYW5lIGFsbG93aW5nIGZvciBzZWFyY2ggYW5kIHJlcGxhY2UgZnVuY3Rpb25zCit0YWJfc2VhcmNoPVN1Y2hlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGFiIGZvciBzdGF0aXN0aWNzIGRpc3BsYXkgZm9yIGVpdGhlciB0aGUgUmVzb3VyY2UgQnVuZGxlIGFzIGEgd2hvbGUgb3IgcGFydGljdWxhciBsYW5ndWFnZSBmaWxlcwordGFiX3N0YXRpc3RpY3M9U3RhdGlzdGlrCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGFiIGZvciBkaXNwbGF5IG9mIHVudHJhbnNsYXRlZCBpdGVtcyBpbiB0aGUgZGlmZmVyZW50IGxhbmd1YWdlIGZpbGVzCit0YWJfdW50cmFuc2xhdGVkPU5pY2h0XCBcdTAwRkNiZXJzZXR6dAorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBDb2x1bW4gdGl0bGUgZm9yIGl0ZW0gY29tbWVudHMKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX2NvbW1lbnQ9S29tbWVudGFyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtJ3MgcmVzb3VyY2Uga2V5CitsYW5ndWFnZWdyb3VwX2NvbHVtbl9rZXk9UmVzb3VyY2UtU2NobFx1MDBGQ3NzZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX3RyYW5zbGF0aW9uPVx1MDBEQ2JlcnNldHp1bmcKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gdGhlIGxhbmd1YWdlIGZpbGUgc3RhdGlzdGljcyBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBBIGNvbW1lbnQgZ2l2ZW4gdG8gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfY29tbWVudD1Lb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBjb3VudHJ5IGJlaW5nIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb3VudHJ5PUxhbmRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2l0ZW1fY291bnQ9QW56YWhsXCBSZXNvdXJjZW5cIGluXCBkZXJcIFJlc291cmNlbmRhdGVpXCBmXHUwMEZDclwgZGllc2VcIFNwcmFjaGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZSBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfbGFuZ3VhZ2U9U3ByYWNoZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSB0cmFuc2xhdGlvbnMgaW4gdGhpcyBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX21hbmFnZXI9UmVzb3VyY2VubWFuYWdlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIGxhbmd1YWdlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdGl0bGU9VGl0ZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE51bWJlciBvZiByZXNvdXJjZXMgbmVlZGluZyB0cmFuc2xhdGlvbiBpbiB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c190cmFuc2xhdGlvbl9jb3VudD1BbnphaGxcIG5pY2h0XCBcdTAwRkNiZXJzZXR6dGVyXCBSZXNvdXJjZW5cIGluXCBkaWVzZXJcIERhdGVpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbGFuZ3VhZ2UvcmVnaW9uIHZhcmlhbnQgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3ZhcmlhbnQ9VmFyaWFudGVcOgorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgY29sdW1uIHRpdGxlIGZvciBncm91cCBuYW1lcyBvZiBpdGVtcyBpbiB0aGUgcm93cworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9ncm91cD1HcnVwcGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUga2V5IG9mIHRoZSBpdGVtIGEgcm93CitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleT1SZXNvdXJjZS1TY2hsXHUwMEZDc3NlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSB0cmFuc2xhdGVkIHZhbHVlIG9mIGFuIGl0ZW0gaW4gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fdHJhbnNsYXRpb249XHUwMERDYmVyc2V0enVuZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBjb3ZlcmluZyBidXR0b25zIHRoYXQgYXBwbHkgdG8gYSBzZWxlY3RlZCByZXNvdXJjZSBmcm9tIGEgdGFibGUgb2YgcmVzb3VyY2VzCitsYW5ndWFnZXVudHJhbnNfc2VsZWN0ZWRfcmVzb3VyY2VzX29wdGlvbnM9T3B0aW9uZW5cIGZcdTAwRkNyXCBkaWVcIGF1c2dld1x1MDBFNGhsdGVuXCBSZXNvdXJjZW4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX2ZpLnByb3BlcnRpZXMgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9maS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZjM0NDUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9maS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIxNiBAQAorIyBAZmlsZSAgICAgICAgICBSQk1hbmFnZXIKKyMgQGZpbGVFbmNvZGluZyAgZmkKKyMgQGZpbGVMYW5ndWFnZSAgRmlubmlzaAorIyBAZmlsZUNvdW50cnkgICAKKyMgQGZpbGVWYXJpYW50ICAgCisjIEBmaWxlTWFuYWdlciAgIEp1c3NpIE15bGx5beRraQorIyBAZmlsZUNvbW1lbnQgICBUaGlzIGlzIHRoZSBGaW5uaXNoIHRyYW5zbGF0aW9uIG9mIHRoZSBSQk1hbmFnZXIgR1VJLgorCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgR3JvdXBzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbiBJdGVtcyBmb3IgdGhlIEJhc2UgQ2xhc3MgR3JvdXAgdGFiYmVkIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfY29tbWVudD1SZXN1cnNzaXJ5aG1cdTAwRTRuXCBrb21tZW50dGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfbmFtZT1SZXN1cnNzaXJ5aG1cdTAwRTRuXCBuaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfb3B0aW9ucz1SZXN1cnNzaXJ5aG1cdTAwRTRuXCB0b2ltaW5ub3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfaXRlbV9vcHRpb25zPVJlc3Vyc3NpblwgdG9pbWlubm90CisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgU3RhdGlzdGljcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgQWxsIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBhcHBlYXJpbmcgb24gdGhlIHN0YXRpc3RpY3MgcGFuZSBmb3IgdGhlIGJhc2UgY2xhc3MKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19kdXBsaWNhdGVzX2NvdW50PVJlc3Vyc3Npblwga29waW9pZGVuXCBtXHUwMEU0XHUwMEU0clx1MDBFNFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfY291bnQ9UmVzdXJzc2l0aWVkb3N0b2plblwgbVx1MDBFNFx1MDBFNHJcdTAwRTRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9jb3VudD1SZXN1cnNzaXJ5aG1pZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZ3JvdXBfZ3JvdXA9UmVzdXJzc2lyeWhtXHUwMEU0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19pdGVtX2NvdW50PVJlc3Vyc3NpZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9ncm91cD1SZXN1cnNzaXQKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhcHBlYXJpbmcgb24gdGhlIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBmaWxlIGJlaW5nIHZpZXdlZAorYmFzZXVudHJhbnNfZmlsZT1UaWVkb3N0b1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiByZXNvdXJjZSBpdGVtcyBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZmlsZQorYmFzZXVudHJhbnNfdW50cmFuc19jb3VudD1LXHUwMEU0XHUwMEU0bnRcdTAwRTRtXHUwMEU0dHRcdTAwRjZtaWVuXCByZXN1cnNzaWVuXCBtXHUwMEU0XHUwMEU0clx1MDBFNFw6CisKKyMKKyMgQGdyb3VwIEJ1dHRvbiBOYW1lcworIworIyBAZ3JvdXBDb21tZW50IFRoZSBuYW1lcyBkaXNwbGF5ZWQgb24gdGhlIHZhcmlvdXMgYnV0dG9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfZ3JvdXA9UmVzdXJzc2l0aWVkb3N0b3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgbGFuZ3VhZ2UgZmlsZQorYnV0dG9uX2FkZF9maWxlPUxpc1x1MDBFNFx1MDBFNFwgdXVzaVwgcmVzdXJzc2l0aWVkb3N0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZmlsZV90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorYnV0dG9uX2FkZF9ncm91cD1MaXNcdTAwRTRcdTAwRTRcIHV1c2lcIHJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZ3JvdXBfdHJpZ2dlcj15CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2FkZF9yZXNvdXJjZT1MaXNcdTAwRTRcdTAwRTRcIHV1c2lcIHJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgY2FuY2VsaW5nIGFjdGlvbnMKK2J1dHRvbl9jYW5jZWw9UGVydXV0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgYSBjaG9pY2Ugb3Igc2VsZWN0aW9uIG9wdGlvbgorYnV0dG9uX2Nob29zZT1WYWxpdHNlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2Nob29zZV90cmlnZ2VyPXYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBnZW5lcmljIGNyZWF0aW9uIG9mIGdyb3VwcywgaXRlbXMsIGZpbGVzLCBldGMuCitidXR0b25fY3JlYXRlPUxpc1x1MDBFNFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEZvciBjcmVhdGlvbiBvZiBhIHJlc291cmNlIGdyb3VwCitidXR0b25fY3JlYXRlX2dyb3VwPUx1b1wgdXVzaVwgcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfZ3JvdXBfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgY3JlYXRpbmcgYW4gaXRlbSB0aGVuIGNvbnRpbnVpbmcgY3JlYXRpbmcgbW9yZSBpdGVtcworYnV0dG9uX2NyZWF0ZV9tb3JlPUx1b1wgJlwgSmF0a2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX21vcmVfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9jcmVhdGVfcmVzb3VyY2U9THVvXCB1dXNpXCByZXN1cnNzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfcmVzb3VyY2VfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIGEgZ3JvdXAgYW5kIGl0cyBjb250ZW50cworYnV0dG9uX2RlbGV0ZV9ncm91cD1Qb2lzdGFcIHJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcGVybWFuZW50bHkgcmVtb3ZpbmcgYSByZXNvdXJjZSBmcm9tIHRoZSBidW5kbGUKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2U9UG9pc3RhXCByZXN1cnNzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEdlbmVyaWMgZWRpdCBidXR0b24KK2J1dHRvbl9lZGl0PU11dXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBlZGl0aW5nIGdyb3VwIG5hbWUgYW5kIGNvbW1lbnQKK2J1dHRvbl9lZGl0X2dyb3VwPU11dXRhXCByZXN1cnNzaXJ5aG1cdTAwRTRcdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBrZXkgYW5kIHRyYW5zbGF0aW9uCitidXR0b25fZWRpdF9yZXNvdXJjZT1NdXV0YVwgcmVzdXJzc2lhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2VkaXRfcmVzb3VyY2VfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgaW5pdGlhdGluZyBhbiBpbXBvcnQgb2YgcmVzb3VyY2VzIGZyb20gYW4gYWx0ZXJuYXRlIHNvdXJjZQorYnV0dG9uX2ltcG9ydD1IYWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25faW1wb3J0X3RyaWdnZXI9aAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gYWxsb3dzIGEgc2VsZWN0ZWQgcmVzb3VyY2UgdG8gYmUgbWFya2VkIGFzIHRyYW5zbGF0ZWQgd2l0aG91dCBmdXJ0aGVyIGVkaXRpbmcKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWQ9TWVya2l0c2VcIFJlc3Vyc3NpXCBLXHUwMEU0XHUwMEU0bm5ldHlrc2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fbWFya190cmFuc2xhdGVkX3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgYWRkaW5nIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbiB0byB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfYWRkPUxpc1x1MDBFNFx1MDBFNFwgVFx1MDBFNG1cdTAwRTRcIFJlc3Vyc3Npa29rb2VsbWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2FkZF90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGNsb3NpbmcgdGhlIHByb2plY3Qgd2luZG93CitidXR0b25fcHJvamVjdF9jbG9zZT1TdWxqZVwgUHJvamVrdGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2Nsb3NlX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X25ldz1VdXNpXCBQcm9qZWt0aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfbmV3X3RyaWdnZXI9dQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3Igb3BlbmluZyBhIHByb2plY3QgZmlsZQorYnV0dG9uX3Byb2plY3Rfb3Blbj1BdmFhXCBQcm9qZWt0aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3Rfb3Blbl90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZT1Qb2lzdGFcIFZhbGl0dHUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZV90cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGNhdXNpbmcgdGhlIHNlbGVjdGVkIHJlc291cmNlIGJ1bmRsZSB0byBiZSB0aGUgb25lIGJlaW5nIGVkaXRlZCBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbgorYnV0dG9uX3Byb2plY3Rfc2VsZWN0PU11dXRhXCBWYWxpdHR1YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3Rfc2VsZWN0X3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBhIGNvbXBsZXRlIHNlYXJjaAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbD1FdHNpXCBLYWlra2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsX3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBjb21wbGV0ZSBzZWFyY2ggYW5kIHJlcGxhY2UKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGw9TXV1dGFcIEthaWtraQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGxfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciB1cGRhdGluZyBpbmZvcm1hdGlvbgorYnV0dG9uX3VwZGF0ZT1QXHUwMEU0aXZpdFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl91cGRhdGVfdHJpZ2dlcj1wCisKKyMKKyMgQGdyb3VwIERpYWxvZ3MKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbnMgdmFyaW91cyBkaWFsb2cgYm94ZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RhaWxvZ190aXRsZV9wcmVmZXJlbmNlcz1Bc2V0dWtzZXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3ZXRoZXIgb3Igbm90IGEgbmV3IGZpbGUgd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhlIGJhc2UgY2xhc3MKK2RpYWxvZ19jaGVja2JveF9jb3B5X2VsZW1lbnRzPUtvcGlvaVwgcmVzdXJzc2l0XCBwZXJ1c3RpZWRvc3Rvc3RhXCB0XHUwMEU0aFx1MDBFNG5cIHRpZWRvc3Rvb24KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgSW5kaWNhdG9yIG9mIHdldGhlciBhbiBpdGVtIGlzIHRyYW5zbGF0ZWQgb3Igbm90CitkaWFsb2dfY2hlY2tib3hfdHJhbnNsYXRlZD1LXHUwMEU0XHUwMEU0bm5ldHR5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2NvbW1lbnQ9S29tbWVudHRpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfY291bnRyeT1NYWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRlZD1MdW90dVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0b3I9THVvbnV0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQHsxfSBUaGUgZGF0ZQorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gaW52b2x2ZWQKKyMgQGNvbW1lbnQgVGhlIGRhdGUgYW5kIHBlcnNvbiBhc3NvY2lhdGVkIHdpdGggYSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYW4gaXRlbQorZGlhbG9nX2RhdGVfcGVyc29uPXsxfVwgKHswfSkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVmYXVsdF9jb21tZW50PUtvbW1lbnRpblwgb2xldHVzYXJ2b1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfdHJhbnNsYXRpb249S1x1MDBFNFx1MDBFNG5uXHUwMEY2a3Nlblwgb2xldHVzYXJ2b1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2RlbGV0ZV9maWxlPVBvaXN0YVwgcmVzdXJzc2l0aWVkb3N0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZ3JvdXA9UG9pc3RhXCByZXN1cnNzaXJ5aG1cdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2l0ZW09UG9pc3RhXCByZXN1cnNzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFdhcm5pbmcgZGlzcGxheWVkIHdoZW4gYSB1c2VyIGFza3MgZm9yIGEgZGVsZXRpb24gb2YgYSBmaWxlLiBQcm9tcHRzIGZvciAnWWVzJyBvciAnTm8nCitkaWFsb2dfZGVsZXRlX3dhcm5pbmc9VmFyb2l0dXNcIVwgUG9pc3RvLW9wZXJhYXRpb3RhXCBlaVwgdm9pXCBwZXJ1dXR0YWEuXG5IYWx1YXRrb1wgdmFybWFzdGlcIGphdGthYT8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZW5jb2Rpbmc9RW5jb2RpbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2NvbW1lbnQ9UmVzdXJzc2l0aWVkb3N0b25cIGtvbW1lbnR0aVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPUJhc2VcIENsYXNzaW5cIHJlc3Vyc3NpdGllZG9zdG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERlc2NyaXB0aW9uIG9mIEZpbGUgRmlsdGVyIGZvciBSQlJlcG9ydGVyIFhNTCBzY2FuIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2RpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbl9zY2FuPVhNTFwgUkJSZXBvcnRlclwgU2NhblwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9pbmZvPVRpZWRvc3RvblwgdGllZG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfbWFuYWdlcj1SZXN1cnNzaW1hbmFnZXJpblwgbmltaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfdGl0bGU9UmVzdXJzc2l0aWVkb3N0b25cIG90c2lra29cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cD1SeWhtXHUwMEU0blwgbmltaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2dyb3VwX2NvbW1lbnQ9UnlobVx1MDBFNG5cIGtvbW1lbnR0aVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2tleT1SZXN1cnNzaW5cIHR1bm5pc3RlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfbGFuZ3VhZ2U9S2llbGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfbG9va3Vwcz1IYWt1XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfbW9kaWZpZWQ9TXV1dGV0dHVcIHZpaW1la3NpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfbW9kaWZpZXI9VmlpbWVpc2luXCBtdXV0dGFqYVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgbGFuZ3VhZ2UsIGNvdW50cnksIG9yIHZhcmlhbnQgb2YgYSBsYW5ndWFnZSBmaWxlCitkaWFsb2dfbmFtZT1OaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciBhIG5hbWUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUsIGJlZm9yZSBjcmVhdGluZyB0aGF0IGJ1bmRsZQorZGlhbG9nX25ld19iYXNlY2xhc3M9T2xlXCBoeXZcdTAwRTRcIGphXCBzeVx1MDBGNnRcdTAwRTRcIEJhc2VcIENsYXNzaW5cIG5pbWlcIHV1ZGVsbGVcIHJlc3Vyc3Npa29rb2VsbWFsbGUuCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEaWFsb2cgcG9wdXAgd2luZG93IHRleHQgcHJvbXB0aW5nIHRoZSB1c2VyIGZvciB0aGUgbmFtZSBvZiBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitkaWFsb2dfbmV3X3Byb2plY3Q9UGxlYXNlXCBlbnRlclwgYVwgdGl0bGVcIGZvclwgeW91clwgbmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlcyBtYWtpbmcgaXQgdGhyb3VnaCB0aGUgZmlsdGVyIHVwb24gb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZQorZGlhbG9nX29wZW5fZmlsZV9maWx0ZXI9QmFzZVwgQ2xhc3NpblwgcmVzdXJzc2l0aWVkb3N0b3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHNlY3Rpb24gaGVhZGluZyBmb3Igc2V0dGluZyB0aGUgQWx1ZQorZGlhbG9nX3ByZWZlcmVuY2VzX0FsdWU9QWx1ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBBbHVlcyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGUgcHJvcGVydGllcyBmaWxlcyBmb3IgdGhlIGFwcGxpY2F0aW9uCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX2RlZmluZWQ9TVx1MDBFNFx1MDBFNHJpdGVsdHlcIHJlc3Vyc3NpdGllZG9zdG9pc3NhXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfaXNvPUlTT1wgc3RhbmRhcmRpdFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IExvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IEphdmEgVmlydHVhbCBNYWNoaW5lCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX21hY2hpbmU9VHVldHR1XCBrb25ldHl5cHBpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfd2FybmluZz1IVU9NXDpcIEFsdWVlblwgdmFpaHRvXCBhc3R1dVwgdm9pbWFhblwgdmFzdGFcIGt1blwgc292ZWxsdXNcIGtcdTAwRTR5bm5pc3RldFx1MDBFNFx1MDBFNG5cIHV1ZGVzdGFhbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb29rYW5kZmVlbD1Mb29rXCBBbmRcIEZlZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc191c2VybmFtZT1LXHUwMEU0eXR0XHUwMEU0alx1MDBFNHR1bm51c1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgRGVzY3JpcHRvciB0aGF0IGdvZXMgaW50byBHVUkgZmlsZSBjaG9vc2VyCitkaWFsb2dfcHJvamVjdF9maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbj1SQk1hbmFnZXJcIFByb2pla3RpdGllZG9zdG90CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBGaWxlIEZpbHRlciBkZXNjcmlwdGlvbiBmb3IgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QgZmlsZXMKK2RpYWxvZ19wcm9qZWN0X2ZpbHRlcl9kZXNjcmlwdGlvbj1SZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gdGhhdCBubyBwcm9qZWN0IGlzIG9wZW4sIHBsYWNlZCBpbiB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZyB3aGVyZSB0aGUgcHJvamVjdCBuYW1lIHdvdWxkIG5vcm1hbGx5IGdvCitkaWFsb2dfcHJvamVjdF9ub25lX3NlbGVjdGVkPVByb2pla3RpYVwgRWlcIFZhbGl0dHUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgd2luZG93IHNob3dpbmcgYWxsIHRoZSByZXNvdXJjZSBidW5kbGVzIGluIGEgcHJvamVjdAorZGlhbG9nX3Byb2plY3RfdGl0bGU9UHJvamVrdGluXCBSZXN1cnNzaWtva29lbG1hdFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciBpZiB0aGV5IHdvdWxkIGxpa2UgdG8gc2F2ZSBjaGFuZ2VzIGJlZm9yZSBleGl0aW5nCitkaWFsb2dfcXVpdF9zYXZlPUhhbHVhdGtvXCB0YWxsZW50YWFcIG11dXRva3NldFwgZW5uZW5cIHBvaXN0dW1pc3RhPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBIGdlbmVyaWMgcHJvcG1wdCB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3aXNoIHRvIHNhdmUgY2hhbmdlcworZGlhbG9nX3NhdmU9SGFsdWF0a29cIHRhbGxldHRhYVwgbXV1dG9rc2V0XCByZXN1cnNzaWtva29lbG1hYW4/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3NlYXJjaF9vcHRpb25zPUV0c2ludFx1MDBFNHBhcmFtZXRyaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfc2VhcmNoX3BhcmFtPUV0c2lcIHRla3N0aVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0aXRsZSBvZiB0aGUgYWJvdXQgZGlhbG9nIGJveAorZGlhbG9nX3RpdGxlX2Fib3V0X3JibWFuYWdlcj1UaWV0b2phXCBSZXN1cnNzaW1hbmFnZXJpc3RhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBkaWFsb2cgcHJvbXB0aW5nIGZvciBkZWxldGlvbiBvZiBhbiBlbnRpcmUgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9kZWxldGVfZ3JvdXA9UG9pc3RhXCBSZXN1cnNzaXJ5aG1cdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgd2hlbiBwcm9tcHRpbmcgdG8gZGVsZXRlIGEgcmVzb3VyY2UKK2RpYWxvZ190aXRsZV9kZWxldGVfaXRlbT1Qb2lzdGFcIFJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2VkaXRfZ3JvdXA9TXV1dGFcIHJlc3Vyc3NpcnlobVx1MDBFNFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lZGl0X2l0ZW09TXV1dGFcIHJlc3Vyc3NpYQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3I9RXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3JfY3JlYXRpbmdfYnVuZGxlPVZpcmhlXCB1dXR0YVwgcmVzdXJzc2lrb2tvZWxtYWFcIGx1b3RhZXNzYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgd2hlbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIG5vdCBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZGlhbG9nX3RpdGxlX2Vycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0PVZpcmhlXDpcIFJlc3Vyc3NpdGllZG9zdG9hXCBlaVwgdm9pZGFcIGx1a2VhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgVGl0bGUgb24gYSB3YXJuaW5nIGRpYWxvZyB0aGF0IEkvTyBtYWxmdW5jdGlvbmVkIG9wZW5pbmcgYSBmaWxlCitkaWFsb2dfdGl0bGVfZXJyb3Jfb3BlbmluZ19maWxlPVRpZWRvc3RvYVwgRWlcIFZvaWRhXCBBdmF0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgYSBkaWFsb2cgYm94IGZvciBlbnRlcmluZyBzcGVjaWFsIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGV4cG9ydCBhIHJlc291cmNlIGJ1bmRsZSB0byBqYXZhIGNsYXNzIGNvZGUKK2RpYWxvZ190aXRsZV9leHBvcnRfamF2YV9vcHRpb25zPVRhbGxldHVzcGFyYW1ldHJpdFw6XCBKYXZhXCBsdW9ra2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGEgZGlhbG9nIHdpdGggYSBwcm9ncmVzcyBiYXIgZ292ZXJuaW5nIGltcG9ydCBzdGF0dXMKK2RpYWxvZ190aXRsZV9pbXBvcnRfcHJvZ3Jlc3M9SGF1blwgRWRpc3R5bWluZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIG5ldyBidW5kbGUKK2RpYWxvZ190aXRsZV9uZXdfYnVuZGxlPUx1b1wgdXVzaVwgcmVzdXJzc2lrb2tvZWxtYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZQorZGlhbG9nX3RpdGxlX25ld19maWxlPUx1b1wgdXVzaVwgcmVzdXJzc2l0aWVkb3N0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9uZXdfZ3JvdXA9THVvXCB1dXNpXCByZXN1cnNzaXJ5aG1cdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIHJlc291cmNlCitkaWFsb2dfdGl0bGVfbmV3X2l0ZW09THVvXCB1dXNpXCByZXN1cnNzaQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGl0bGUgb2YgdGhlIGRpYWxvZyBib3ggc2hvd2luZyB3aGVuIGNyZWF0aW5nIGEgbmV3IHByb2plY3QKK2RpYWxvZ190aXRsZV9uZXdfcHJvamVjdD1OZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfcHJlZmVyZW5jZXM9QXNldHVrc2V0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRpdGxlIGZvciBjb25maXJtaW5nIGV4aXQgZnJvbSBhcHBsaWNhdGlvbgorZGlhbG9nX3RpdGxlX3F1aXQ9UG9pc3R1XCBSZXN1cnNzaW1hbmFnZXJpc3RhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3NlYXJjaD1FdHNpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3VzZXJfbmFtZT1TeVx1MDBGNnRcdTAwRTRcIGtcdTAwRTR5dHRcdTAwRTRqXHUwMEU0dHVubnVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3RyYW5zbGF0aW9uPUtcdTAwRTRcdTAwRTRublx1MDBGNnNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ191c2VyX25hbWU9U3lcdTAwRjZ0XHUwMEU0XCBuaW1lc2kuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3ZhcmlhbnQ9TXV1bm5lbG1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2dyb3VwPVJlc3Vyc3NpcnlobVx1MDBFNG5cIHBvaXN0YW1pbmVuXCBwb2lzdGFhXCBteVx1MDBGNnNcIGthaWtraVwgcnlobVx1MDBFNHNzXHUwMEU0XCBvbGV2YXRcIHJlc3Vyc3NpdFwgcHlzeXZcdTAwRTRzdGkuXCBIYWx1YXRrb1wgamF0a2FhPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ193YXJuaW5nX2RlbGV0ZV9pdGVtPVJlc3Vyc3NpXCBwb2lzdGV0YWFuXCBweXN5dlx1MDBFNHN0aS5cIEhhbHVhdGtvXCBqYXRrYWE/CisKKyMKKyMgQGdyb3VwIEVycm9yIE1lc3NhZ2VzCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcj1WaXJoZQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGFkZCBhIHJlc291cmNlIGJ1bmRsZSB0byBhIHByb2plY3QuCitlcnJvcl9hZGRpbmdfcHJvamVjdF9idW5kbGU9QW5cIGVycm9yXCBvY2N1cnJlZFwgdHJ5aW5nXCB0b1wgYWRkXCB0aGVcIFJlc291cmNlXCBCdW5kbGVcIHlvdVwgc2VsZWN0ZWQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfYmFzZWNsYXNzX3doaXRlc3BhY2U9UmVzdXJzc2luXCBuaW1lc3NcdTAwRTRcIGVpXCB2b2lcIG9sbGFcIHZcdTAwRTRsaWx5XHUwMEY2bnRpXHUwMEU0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX2J1bmRsZV9ub3RfY3JlYXRlZD1SZXN1cnNzaWtva29lbG1hYVwgZWlcIGx1b3R1LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9maWxlPVJlc3Vyc3NpdGllZG9zdG9uXCBsdW9udGlcIGVwXHUwMEU0b25uaXN0dWkuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2dyb3VwPVJlc3Vyc3NpcnlobVx1MDBFNG5cIGx1b250aVwgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfaXRlbT1SZXN1cnNzaW5cIGx1b250aVwgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIGNyZWF0aW5nIGEgcHJvamVjdAorZXJyb3JfY3JlYXRpbmdfcHJvamVjdD1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIGNyZWF0ZVwgYVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAezB9IFRoZSBtZXNzYWdlIGZyb20gYW4gSU9FeGNlcHRpb24gdGhhdCBpcyB0aHJvd24KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBmaWxlCitlcnJvcl9kZWxldGluZz1UaWVkb3N0b2FcIHswfVwgZWlcIHZvaXR1XCBwb2lzdGFhLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEFuIGVycm9yIHRoYXQgb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlbGV0ZSBhIGZpbGUsIGJ1dCB0aGUgdmlydHVhbCBtYWNoaW5lIGNhbiBub3QgZG8gc28KK2Vycm9yX2RlbGV0aW9uX25vdF9wb3NzaWJsZT1UaWVkb3N0b2FcIGVpXCB2b2l0dVwgcG9pc3RhYS5cIFRpZWRvc3RvXCBvblwgc3VvamF0dHUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSBmb3IgZXhwb3J0aW5nIHJlc291cmNlIGJ1bmRsZXMKK2Vycm9yX2V4cG9ydD1SZXN1cnNzaXRpZWRvc3RvblwgdGFsbGV0dXNcIGVwXHUwMEU0b25uaXN0dWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9pbnRlcm5hbD1TaXNcdTAwRTRpbmVuXCB2aXJoZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9maWxlPVJlc3Vyc3NpdGllZG9zdG9uXCBtdXV0b3NcIGVwXHUwMEU0b25uaXN0dWkuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2dyb3VwPVJlc3Vyc3NpcnlobVx1MDBFNG5cIG11dXRvc1wgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfaXRlbT1SZXN1cnNzaW5cIG11dXRvc1wgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2ZpbGU9QXZhYVwgdGFpXCBsdW9cIHV1c2lcIHJlc3Vyc3Npa29rb2VsbWFcIGVuc2luLFwgc2l0dGVuXCB2b2l0XCBsdW9kYVwgdXVkZW5cIHJlc3Vyc3NpdGllZG9zdG9uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX25vX2J1bmRsZV9mb3JfZ3JvdXA9QXZhYVwgdGFpXCBsdW9cIHV1c2lcIHJlc3Vyc3Npa29rb2VsbWFcIGVuc2luLFwgc2l0dGVuXCB2b2l0XCBsdW9kYVwgdXVkZW5cIHJlc3Vyc3NpcnlobVx1MDBFNG4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgcmVzb3VyY2UsIHdpdGhvdXQgYW4gb3BlbiByZXNvdXJjZSBidW5kbGUKK2Vycm9yX25vX2J1bmRsZV9mb3JfaXRlbT1BdmFhXCB0YWlcIGx1b1wgdXVzaVwgcmVzdXJzc2lrb2tvZWxtYVwgZW5zaW4sXCBzaXR0ZW5cIHZvaXRcIGx1b2RhXCB1dWRlblwgcmVzdXJzc2luLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2Vycm9yX25vX2tleV9yZXBsYWNlPUtvcnZhYS10b2ltaXRvXCBlaVwgdmFpa3V0YVwgcmVzdXJzc2lhdmFpbWlpbi5cIE11dXRcIGtvcnZhdWtzZXRcIHRlaGRcdTAwRTRcdTAwRTRuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCBSQk1hbmFnZXIgY2FuIG5vdCByZWFkIHRoZSBmaWxlIGFzIGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitlcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1WYWxpdHR1XCByZXN1cnNzaXRpZWRvc3RvXCBlaVwgb2xlXCBSQk1hbmFnZXJpblwgbHVvbWFcIHRhaVwgdGllZG9zdG9cIG9uXCB2aW9pdHR1bnV0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3b3VsZCBub3Qgb3BlbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIG9jY3VyaW5nIG9uIGFuIEkvTyBlcnJvciB0cnlpbmcgdG8gb3BlbiBhIGZpbGUKK2Vycm9yX29wZW5pbmdfZmlsZT1UaWVkb3N0b2FcIHswfVwgZWlcIHZvaXR1XCBhdmF0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIFJCTWFuYWdlciBlbmNvdW50ZXJzIGFuIGVycm9yIHdyaXRpbmcgcHJlZmVyZW5jZXMgdG8gdGhlIGZpbGUgc3lzdGVtCitlcnJvcl9wcmVmZXJlbmNlc19zYXZlPUFzZXR1c3RlblwgdGFsbHR1c1wgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQKKyMgQGNvbW1lbnQgQSBtZXNzYWdlIHByZXNlbnRlZCB0byB0aGUgdXNlciB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBzYXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZQorZXJyb3Jfc2F2aW5nPVJlc3Vyc3Npa29rb2VsbWFuXCB0YWxsZXR1a3Nlc3NhXCB0YXBhaHR1aVwgdmlyaGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBzYXZpbmcgYSBwcm9qZWN0CitlcnJvcl9zYXZpbmdfcHJvamVjdD1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIHNhdmVcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU3VnZ2VzdCB0cnlpbmcgdG8gaW1wb3J0IHRoZSByZXNvdXJjZSBidW5kbGUgaW5zdGVhZCBvZiBvcGVuaW5nIGl0LgorZXJyb3Jfc3VnZ2VzdF9pbXBvcnRfcHJvcGVydGllcz1Zcml0XHUwMEU0XCByZXN1cnNzaXRpZWRvc3RvblwgaGFrdWFcIGF2YXVrc2VuXCBzaWphc3RhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2ZpbGU9U3lcdTAwRjZ0XHUwMEU0XCB1dWRldFwgZW5jb2RpbmctYXJ2b3RcIGphXCB5cml0XHUwMEU0XCBzaXR0ZW5cIHV1ZGVzdGFhbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5fZ3JvdXA9WXJpdFx1MDBFNFwgdXVkZXN0YWFuXCB0b2lzZWxsYVwgcmVzdXJzc2lyeWhtXHUwMEU0blwgbmltZWxsXHUwMEU0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9pdGVtPVlyaXRcdTAwRTRcIHV1ZGVzdGFhblwgdG9pc2VsbGFcIHJlc3Vyc3NpblwgbmltZWxsXHUwMEU0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBWYWx1ZSBpbnNlcnRlZCBpbnRvIHRhYmxlIGNlbGxzIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VyZWQKK3RhYmxlX2NlbGxfZXJyb3I9KlZpcmhlKgorCisjCisjIEBncm91cCBFeHBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGV4cG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBPcHRpb24gZm9yIHRoZSBwYXJhbWV0ZXIgZm9yIGNyZWF0ZWQgYSBwcm90ZWN0ZWQgY2xhc3MKK2V4cG9ydF9qYXZhX2NsYXNzX3Byb3RlY3RlZD1MdW9cIHN1b2phdHR1XCBsdW9ra2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBzZXR0aW5nIHRoZSBjcmVhdGVkIGNsYXNzIGFzIHB1YmxpYworZXhwb3J0X2phdmFfY2xhc3NfcHVibGljPUx1b1wganVsa2luZW5cIGx1b2trYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBwcm90ZWN0ZWQgbWV0aG9kcyBpbiB0aGUgamF2YSBjbGFzcworZXhwb3J0X2phdmFfbWV0aG9kc19wcm90ZWN0ZWQ9THVvXCBzdW9qYXR0dVwgbWV0b2RpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHB1YmxpYyBtZXRob2RzCitleHBvcnRfamF2YV9tZXRob2RzX3B1YmxpYz1MdW9cIGp1bGtpbmVuXCBtZXRvZGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBUaXRsZSBvZiBhIGNoZWNrIGJveCBmb2xsb3dlZCBieSBhIHRleHQgZmllbGQgZm9yIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdG8gdXNlIGEgcGFja2FnZSBpbiB0aGUgZ2VuZXJhdGVkIGphdmEgY2xhc3MgYW5kIHdoYXQgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGNhbGxlZAorZXhwb3J0X2phdmFfcGFja2FnZT1Bbm5hXCBwYWtldGluXCBuaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBUZXh0IHBsYWNlZCBpbiBhIGxhYmVsIGF0IHRoZSB0b3Agb2YgdGhlIGRpYWxvZyBib3ggZm9yIHNwZWNpZnlpbmcgcGFyYW1ldGVycyBjb25jZXJuaW5nIHRoZSBleHBvcnQgb2YgcmVzb3VyY2UgYnVuZGxlcyBpbnRvIGEgamF2YSBjbGFzcworZXhwb3J0X2phdmFfdGl0bGU9QW5uYVwgc2V1cmFhdmF0XCBwYXJhbWV0cml0XCBKYXZhLWx1b2thbGxlXDoKKworIworIyBAZ3JvdXAgR2VuZXJhbAorIworIyBAZ3JvdXBDb21tZW50IFNvbWUgaXRlbXMgdGhhdCBhcmUgY29tbW9uIGFjY3Jvc3MgZ3JvdXBzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIGZpbGUgb3IgY2xhc3MgY29tcG9zZWQgb2YgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb25zIGZvciB0aGUgYnVuZGxlCitiYXNlY2xhc3M9QmFzZVwgQ2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgVGhpcyBpcyB0aGUgbGVnYWwgY29weXJpZ2h0IG5vdGljZQorY29weXJpZ2h0PShDKVwgQ29weXJpZ2h0XCBJQk1cIENvcnAuXCAyMDAwLTIwMDRcIC1cIEthaWtraVwgb2lrZXVkZXRcIHBpZFx1MDBFNHRldHR5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlcm5lcmFsIHVzZSBmb3IgZmlsZSBkaXJlY3RvcmllcworZGlyZWN0b3J5PUhha2VtaXN0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2dyb3Vwcz1SeWhtXHUwMEU0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZmlsZSBpbiB0aGUgJ0ltYWdlcycgZGlyZWN0b3J5IHRoYXQgcmVwcmVzZW50cyB0aGUgbG9nbyBzZWVuIGF0IHRoZSB0b3Agb2YgdGhlIGFwcGxpY2F0aW9uCitsb2dvX2ZpbGVuYW1lPVRpdGxlTG9nb190cmFuc3BhcmVudC5naWYKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSB3aGVuIHZpZXdpbmcgYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdmlldyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBwcm9qZWN0Citub19wcm9qZWN0PURlZmF1bHRcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSBkZWZhdWx0ZWQgdG8gd2hlbiBubyByZXNvdXJjZSBidW5kbGUgb3IgcHJvamVjdCBoYXMgYmVlbiBvcGVuZWQgYnkgdGhlIHVzZXIKK25vX3Byb2plY3RfYnVuZGxlPU5vXCBQcm9qZWN0XCBvclwgUmVzb3VyY2VcIEJ1bmRsZVwgT3BlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgdG9wIHRyZWUgbm9kZSB0aXRsZSwgd2hlbiBubyByZXNvdXJjZSBidW5kbGUgaGFzIGJlZW4gb3BlbmVkIG9yIGNyZWF0ZWQKK25vX3Jlc291cmNlX2J1bmRsZT1SZXN1cnNzaWtva29lbG1hYVwgZWlcIG9sZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK25vbmU9RWlcIG9sZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFByb2plY3QgdGFibGUgY29sdW1uIG5hbWUgLSBMb2NhdGlvbiBvZiBhIHJlc291cmNlIGJ1bmRsZQorcHJvamVjdF90YWJsZV9maWxlX2xvY2F0aW9uPVRpZWRvc3RvblwgU2lqYWludGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBUYWJsZSBDb2x1bW4gTmFtZSBmb3IgcmVzb3VyY2UgYnVuZGxlIG5hbWUKK3Byb2plY3RfdGFibGVfcmVzb3VyY2VfYnVuZGxlPVJlc3Vyc3Npa29rb2VsbWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQW4gYWJicmV2aWF0ZWQgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityYm1hbmFnZXI9UkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwNC0wNi0yOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgR2VvcmdlCisjIEBjb21tZW50IAorcmJtYW5hZ2VyX2NvbnRhY3Q9VGVraWpcdTAwRTRcOlwgSmFyZWRcIEphY2tzb25cICZcIEdlb3JnZVwgUmhvdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBmdWxsIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX21hbmFnZXI9UmVzdXJzc2ltYW5hZ2VyaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK3RhYmxlX2NvbHVtbl9lcnJvcj1WaXJoZVwgdGF1bHVrb25cIHNhcmFra2Vlc3NhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEB7MH0gCisjIEBjb21tZW50IE5vZGUgdGl0bGUsIHVuZGVyIHdoaWNoIGFsbCBmaWxlcyBvZiB0aGUgc2FtZSBjb3VudHJ5LCBsYW5ndWFnZSByZXNpZGUKK3RyZWVfY291bnRyeV9ub2RlPU1hYWtvb2RpXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAezB9IExhbmd1YWdlIEVuY29kaW5nCisjIEBjb21tZW50IFRoZSBub2RlIGJlbG93IHdoaWNoIGxhbmd1YWdlcyBvZiBvbmUgZW5jb2RpbmcgYXJlIGdyb3VwZWQKK3RyZWVfbGFuZ3VhZ2Vfbm9kZT1LaWVsaWtvb2RpXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK3RyZWVfdmFyaWFudF9ub2RlPU11dW5uZWxtaWFcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbmFtZSBhc3NpZ25lZCBhcyBhIHVzZXIgbmFtZSB3aGVuIHRoZSB1c2VyIG5hbWUgaXMgbm90IHNwZWNpZmllZAordW5rbm93bl91c2VyPVR1bm5pc3RhbWF0b24KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCit1bnRpdGxlZD1FaVwgbmltZVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK3VudHJhbnNsYXRlZF9pdGVtcz1LXHUwMEU0XHUwMEU0bnRcdTAwRTRtXHUwMEU0dHRcdTAwRjZtXHUwMEU0dFwgcmVzdXJzc2l0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEB7MH0gVGhlIHZlcnNpb24gbnVtYmVyCisjIEBjb21tZW50IFRoZSB2ZXJzaW9uIG9mIHRoaXMgYXBwbGljYXRpb24KK3ZlcnNpb249VmVyc2lvXCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZ2VuZXJhbCB1c2UgV2FybmluZword2FybmluZz1WYXJvaXR1cworCisjCisjIEBncm91cCBJbXBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGltcG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgVE1YIGZpbGVzCitpbXBvcnRfVE1YX2ZpbGVfZGVzY3JpcHRpb249VE1YLXRpZWRvc3RvdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFRNWCBYTUwgZmlsZXMKK2ltcG9ydF9UTVhfdGl0bGU9VE1YLXRpZWRvc3RvblwgaGFrdQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgWExJRkYgKC54bGYpIGZpbGVzCitpbXBvcnRfWExGX2ZpbGVfZGVzY3JpcHRpb249WExJRkYtdGllZG9zdG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IERpYWxvdCB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gWExJRkYgKC54bGYpIGZpbGVzCitpbXBvcnRfWExGX3RpdGxlPVhMSUZGLXRpZWRvc3RvblwgaGFrdQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGNpdHMgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMKK2ltcG9ydF9jb25mbGljdF9wcm9tcHQ9S3lzeVwgam9rYWlzZW5cIG9uZ2VsbWFuXCBrb2hkYWxsYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gc3BlY2lmeWluZyB3aGV0aGVyIGEgZ3JvdXAgZm91bmQgaW4gdGhlIHRhcmdldCBidXQgbm90IGZvdW5kIGluIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgb3Igbm90CitpbXBvcnRfZGVmYXVsdF9ncm91cF9jcmVhdGlvbj1MdW9cIHJlc3Vyc3NpcnlobVx1MDBFNHRcIGpvaXRhXCBlaVwgb2xlXCBueWt5aXNlc3NcdTAwRTRcIHRpZWRvc3Rvc3NhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdG9pbiBmb3IgbWFya2luZyB0aGUgaW5jb21pbmcgdmFsdWVzIGFzIHRyYW5zbGF0ZWQgb3Igbm90CitpbXBvcnRfZGVmYXVsdF90cmFuc2xhdGVkPU1lcmtpdHNlXCBrXHUwMEU0XHUwMEU0bm5ldHlrc2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIG9wdGlvbnMgc3BlY2lmeWluZyB0aGUgbWV0YSBkYXRhIHRvIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCByZXNvdXJjZXMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgaW1wb3J0IHNvdXJjZQoraW1wb3J0X2RlZmF1bHRfdmFsdWVzPU9sZXR1c2Fydm90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIGxvY2FsZSBlbmNvZGluZyBvZiB0aGUgZmlsZSBpbiBxdWVzdGlvbgorIyBAY29tbWVudCBJbnN0cnVjdGlvbnMgZm9yIHByb21wdGluZyB0aGUgdXNlciB0byByZXNvbHZlIGEgY29uZmxpY3Qgd2hlbiBpbXBvcnRpbmcgcmVzb3VyY2VzIGZyb20gYSBsb2NhbGUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2Nob29zZT1FbmNvZGluZ1wgezB9XCBlaVwgb2xlXCBvbGVtYXNzYS5cIFZhbGl0c2VcIGt1aW5rYVwgaGFsdWF0XCByYXRrYWlzdGFcIG9uZ2VsbWFuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkLCBidXQgbm90IHBvcHVsYXRlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHk9THVvXCB1dXNpXCB0eWhqXHUwMEU0XCByZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aCBhbGwgdGhlIGV4aXN0aW5nIHJlc291cmNlcworaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGU9THVvXCB1dXNpXCByZXN1cnNzaXRpZWRvc3RvXCBqYVwga29waW9pXCBCYXNlXCBDbGFzc2luXCByZXN1cnNzaXRcIHNpaWhlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIHRoZSBjb25mbGljdHMgYXJlIGlnbm9yZWQKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2lnbm9yZT1IeXBwXHUwMEU0XHUwMEU0XCBuaWlkZW5cIHJlc3Vyc3NpZW5cIHlsaVwgam9pZGVuXCBBbHVlLWFzZXR1c1wgZWlcIG9sZVwgbnlreWlzZXNzXHUwMEU0XCByZXN1cnNzaXRpZWRvc3Rvc3NhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBzZWN0aW9uIGxpc3Rpbmcgb3B0aW9ucyBmb3Igd2hhdCB0byBkbyB3aGVuIGFuIGltcG9ydGVkIHZhbHVlIGV4aXN0cyBpbiBhIGxvY2FsZSBub3QgZGVmaW5lZCBpbiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdHM9UHV1dHR1dmF0XCByZXN1cnNzaXRpZWRvc3RvdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTZWxlY3Rpb24gb2YgdGhlIGRlZmF1bHQgZ3JvdXAuIEEgbGlzdCBvZiBncm91cHMgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgcmVzb3VyY2UgaW4gYSBDb21ib0JveAoraW1wb3J0X2luc2VydF9ncm91cD1TaWpvaXRhXCByZXN1cnNzaXJ5aG1cdTAwRTRcdTAwRTRuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB0eXBlcyBvZiBmaWxlcyBhY2NlcHRlZCBmb3IgdGhpcyBpbXBvcnQgdHlwZQoraW1wb3J0X2phdmFfZmlsZV9kZXNjcmlwdGlvbj1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEJhc2VcIENsYXNzaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGRpYWxvZyBwcm9tcHRpbmcgZm9yIGltcG9ydCBmcm9tIGphdmEgY2xhc3NlcworaW1wb3J0X2phdmFfdGl0bGU9SmF2YVwgTGlzdFJlc291cmNlQnVuZGxlXCBDbGFzc2llblwgSGFrdQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBpbmRpY2F0aW5nIHNlY3Rpb24gY29udGFpbmluZyB1c2VyIG9wdGlvbnMKK2ltcG9ydF9vcHRpb25zPUhha3VwYXJhbWV0cml0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBmaWxlIGNob29zZXIgZm9yIHNlbGVjdGlvbiBvZiByZXNvdXJjZSBidW5kbGVzIHN0b3JlZCBpbiAucHJvcGVydGllcyBmaWxlcworaW1wb3J0X3Byb3BlcnRpZXNfZmlsZV9kZXNjcmlwdGlvbj1SZXN1cnNzaXRpZWRvc3RvblwgQmFzZVwgQ2xhc3NpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIHByb3BlcnRpZXMgZmlsZXMgKGNyZWF0ZWQgb3Igbm90IGJ5IFJCTWFuYWdlcikKK2ltcG9ydF9wcm9wZXJ0aWVzX3RpdGxlPVJlc3Vyc3NpdGllZG9zdG9qZW5cIGhha3UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHsxfSBFbmNvZGluZyBvZiB0aGUgcmVzb3VyY2UgdmFsdWUgd2l0aCBhIGNvbmZsaWN0CisjIEB7MH0gVGhlIGtleSB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaW4gY29uZmxpY3QKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHdhcm5pbmcgYW5kIGluc3RydWN0aW9uIGZvciB3aGVuIGEgcmVzb3VyY2UgY29uZmxpY3Qgb2NjdXJzIGR1cmluZyBhbiBpbXBvcnQKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2U9QXZhaW50YVwgezB9XCBlaVwgb2xlXCBvbGVtYXNzYVwgcmVzdXJzc2lrb2tvZWxtYXNzYVwgezF9LlZhbGl0c2VcIGt1aW5rYVwgaGFsdWF0XCByYXRrYWlzdGFcIG9uZ2VsbWFuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSBpdGVtCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGltcG9ydCBmaWxlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3NvdXJjZT1IYWVcIGtcdTAwRTRcdTAwRTRublx1MDBGNnNcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHRyYW5zbGF0aW9uIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBpdGVtCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIHRyYW5zbGF0aW9uIHZhbHVlIGhlbGQgYnkgdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUgZHVyaW5nIGEgdHJhbnNsYXRpb24gcmVzb3VyY2UgY29uZmxpY3QKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2VfdGFyZ2V0PVJlc3Vyc3NpdGllZG9zdG9uXCBrXHUwMEU0XHUwMEU0bm5cdTAwRjZzXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyByZXNvdXJjZSBjb25mbGljdHMgYnkgaWdub3JpbmcgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfaWdub3JlPU9oaXRhXCBvbmdlbG1hXCBqYVwgXHUwMEU0bFx1MDBFNFwgbXV1dGFcIHJlc3Vyc3NpYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGljdHMgYnkgdXNpbmcgdGhlIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZT1Lb3J2YWFcIHJlc3Vyc3NpXCB0aWVkb3N0b3N0YVwgaGFldHVsbGFcIGFydm9sbGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgbGlzdGluZyBvcHRpb25zIGZvciByZXNvbHZpbmcgY29uZmxpY3RzIGJldHdlZW4gcmVzb3VyY2VzCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RzPVJlc3Vyc3NpZW5cIG9uZ2VsbWF0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHBhdGggYW5kIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIHNvdXJjZSBmaWxlIGZvciB0aGUgaW1wb3J0CitpbXBvcnRfc291cmNlX2ZpbGU9VGllZG9zdG9cOlwgezB9CisKKyMKKyMgQGdyb3VwIE1lbnUgSXRlbXMKKyMKKyMgQGdyb3VwQ29tbWVudCBUaGVzZSByZXNvdXJjZXMgcmVwcmVzZW50IGFsbCBvZiB0aGUgbWVudSBhbmQgbWVudSBpdGVtIHRpdGxlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIG1lbnUgdGl0bGUgY292ZXJpbmcgY29weWluZywgcGFzdGluZywgZGVsZXRpbmcgb2YgaXRlbXMKK21lbnVfZWRpdD1NdXV0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jb3B5PUtvcGlvaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jb3B5X3RyaWdnZXI9aworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXQ9TGVpa2thYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXRfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZT1Qb2lzdGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlX3RyaWdnZXI9cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZT1TaWpvaXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X3Bhc3RlX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2VkaXQnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZWRpdF90cmlnZ2VyPW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciB0aGUgb3BlbmluZywgc2F2aW5nLCBldGMuIGRvY3VtZW50cyBhbmQgZXhpdGluZyB0aGUgcHJvZ3JhbQorbWVudV9maWxlPVRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IHJlc291cmNlIGJ1bmRsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMKK21lbnVfZmlsZV9leHBvcnQ9UmVzdXJzc2lrb2tvZWxtYW5cIHNpaXJ0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIElDVSBSZXNvdXJjZSBCdW5kbGUgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfSUNVPUlDVS10aWVkb3N0b3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAyLTA1LTE3IEBtb2RpZmllZCAyMDAyLTA1LTE3IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X0lDVV90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJsaXR5IHRvIGV4cG9ydCB0byBUTVggWE1MIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X1RNWD1UTVgtdGllZG9zdG90Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9UTVhfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCB4CittZW51X2ZpbGVfZXhwb3J0X1hMRj1YTElGRi10aWVkb3N0b3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgdG8gamF2YSBmaWxlcyB0aGF0IGNvbXBpbGUgdG8gYmUgTGlzdFJlc291cmNlQnVuZGxlIGNsYXNzIGV4dGVuc2lvbnMKK21lbnVfZmlsZV9leHBvcnRfamF2YT1KYXZhLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRXhwb3J0IGFiaWxpdHkgdG8gcHJvcGVydGllcyBmaWxlcyBtaW51cyB0aGUgbWV0YWRhdGEKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllcz1QZWxra1x1MDBFNFwgUHJvcGVydHktdGllZG9zdG8uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXNfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF90cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGltcG9ydCBhbmQgbWVyZ2luZyBhbm90aGVyIHJlc291cmNlIGZpbGUgd2l0aCB0aGUgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfaW1wb3J0PUx1ZVwgcmVzdXJzc2lrb2tvZWxtYVwgdGllZG9zdG9zdGEuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFibGlpdHkgZnJvbSBYTUwgVE1YIGRvY3VtZW50cworbWVudV9maWxlX2ltcG9ydF9UTVg9VE1YLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfVE1YX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBYTUwgWExJRkYgKC54bGYpIGZpbGVzCittZW51X2ZpbGVfaW1wb3J0X1hMRj1YTElGRi10aWVkb3N0b3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgWAorbWVudV9maWxlX2ltcG9ydF9YTEZfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gamF2YSBjbGFzc2VzIChMaXN0UmVzb3VyY2VCdW5kbGUpCittZW51X2ZpbGVfaW1wb3J0X2phdmE9SmF2YS10aWVkb3N0b3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X2phdmFfdHJpZ2dlcj1qCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gcHJvcGVydGllcyBmaWxlcyBub3QgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlcgorbWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzPVlrc2lua2VydGFpc2V0XCByZXN1cnNzaWtva29lbG1hdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllc190cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9uZXc9VXVzaVwgcmVzdXJzc2lrb2tvZWxtYS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9maWxlX25ld190cmlnZ2VyPXUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9vcGVuPUF2YWFcIHJlc3Vyc3Npa29rb2VsbWEuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfZmlsZV9vcGVuX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY2xvc2luZyB0aGUgYXBwbGljYXRpb24KK21lbnVfZmlsZV9xdWl0PVBvaXN0dQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9maWxlX3F1aXRfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBzYXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZSBiZWluZyB3b3JrZWQgd2l0aAorbWVudV9maWxlX3NhdmU9VGFsbGV0YVwgcmVzdXJzc2lrb2tvZWxtYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9maWxlX3NhdmVfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBzYXZpbmcgYSByZXNvdXJjZSBidW5kbGUgdG8gYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUKK21lbnVfZmlsZV9zYXZlYXM9VGFsbGV0YVwgcmVzdXJzc2lrb2tvZWxtYVwgbmltZWxsXHUwMEU0Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZWFzX3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2ZpbGUnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZmlsZV90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBoZWxwIGluZm9ybWF0aW9uIGFuZCBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtCittZW51X2hlbHA9QXB1YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgaXRlbSB3aGljaCBicmluZ3MgdXAgYSBkaWFsb2cgZGVzY3JpYmluZyB0aGUgYXBwbGljYXRpb24KK21lbnVfaGVscF9hYm91dD1MaXNcdTAwRTR0aWV0b2phXCBSZXN1cnNzaW1hbmFnZXJpc3RhLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X2hlbHBfYWJvdXRfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfaGVscCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9oZWxwX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIG9wdGlvbnMgc3VjaCBhcyBjcmVhdGluZyBuZXcgcmVzb3VyY2VzLCBncm91cHMsIGFuZCByZXNvdXJjZSBmaWxlcworbWVudV9vcHRpb25zPUFzZXR1a3NldAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgaXRlbQorbWVudV9vcHRpb25zX2FkZGVudHJ5PUxpc1x1MDBFNFx1MDBFNFwgcmVzdXJzc2kuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRlbnRyeV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZS9jb3VudHJ5L3ZhcmlhbnQKK21lbnVfb3B0aW9uc19hZGRmaWxlPUxpc1x1MDBFNFx1MDBFNFwgcmVzdXJzc2l0aWVkb3N0by4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGZpbGVfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorbWVudV9vcHRpb25zX2FkZGdyb3VwPUxpc1x1MDBFNFx1MDBFNFwgcmVzdXJzc2lyeWhtXHUwMEU0Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZ3JvdXBfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgZWRpdGluZyB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGZvciB0aGUgYXBwbGljYXRpb24KK21lbnVfb3B0aW9uc19wcmVmZXJlbmNlcz1Bc2V0dWtzZXQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXNfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgbWFrZXMgdmlzaWJsZSB0aGUgcHJvamVjdCB2aWV3ZXIKK21lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcj1BdmFhXCBQcm9qZWt0aW5cdTAwRTR5dHRcdTAwRjYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcl90cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9vcHRpb25zJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X29wdGlvbnNfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGFkZGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgdG8gdGhlIHByb2plY3QKK21lbnVfdHJlZV9hZGRfcHJvamVjdF9idW5kbGU9QWRkXCBSZXNvdXJjZVwgQnVuZGxlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBkZWxldGluZyBwZXJtYW5lbnRseSBhIHJlc291cmNlIGZpbGUKK21lbnVfdHJlZV9kZWxldGU9UG9pc3RhXCBSZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciByZW1vdmluZyBhIHNwZWNpZmljIHJlc291cmNlIGZpbGUgZnJvbSB0aGUgdHJlZSB2aWV3IG9mIHRoZSByZXNvdXJjZSBidW5kbGUKK21lbnVfdHJlZV9oaWRlPVBpaWxvdGFcIFJlc3Vyc3NpdGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorbWVudV90cmVlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK21lbnVfdHJlZV9vcGVuX3Byb2plY3Q9T3BlblwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdHJlZQorbWVudV90cmVlX3JlbW92ZV9wcm9qZWN0X2J1bmRsZT1SZW1vdmVcIGZyb21cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBhIHNwZWNpZmljIHJlc291cmNlIGJ1bmRsZSBmaWxlCittZW51X3RyZWVfc2F2ZT1UYWxsZXRhXCBSZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSBwcm9qZWN0IGZpbGUsIG5vdCB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0aGVtc2VsdmVzIHdpdGhpbiB0aGUgcHJvamVjdAorbWVudV90cmVlX3NhdmVfcHJvamVjdD1TYXZlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XCBGaWxlLi4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGZvciBzZWxlY3RpbmcgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdCB0cmVlIHRvIGJlIGVkaXRlZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWUKK21lbnVfdHJlZV9zZWxlY3RfcHJvamVjdF9idW5kbGU9V29ya1wgd2l0aFwgdGhpc1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGNoYW5naW5nIHRoZSBkaXNwbGF5IGJlaW5nIHNlZW4gYnkgdGhlIHVzZXIKK21lbnVfdmlldz1OXHUwMEU0eXR0XHUwMEY2CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgdGFrZXMgeW91IGRpcmVjdGx5IHRvIHRoZSBzdGF0aXN0aWNzIHBhbmVsIGZvciB0aGUgZW50aXJlIGJ1bmRsZQorbWVudV92aWV3X3N0YXRpc3RpY3M9Tlx1MDBFNHl0XHUwMEU0XCByZXN1cnNzaWtva29lbG1hblwgdGlsYXN0b3RpZWRvdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV92aWV3X3N0YXRpc3RpY3NfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfdmlldycgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV92aWV3X3RyaWdnZXI9bgorCisjCisjIEBncm91cCBQcm9qZWN0IFBhbmVsCisjCisjIEBncm91cENvbW1lbnQgUGFuZWwgYXNzb2NpYXRlZCB3aXRoIFByb2plY3QgZWRpdGluZworCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgTGFiZWwgaW5kaWNhdG9yIGFzc29jaWF0aW5nIGEgdGV4dCBib3ggY29udGFpbmluZyBhIHRyYW5zbGF0aW9uIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSB0aGUgdHJhbnNsYXRpb24gY29tZXMgZnJvbQorcHJvamVjdF9wYW5lbF9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gTmFtZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCisjIEBjb21tZW50IFNwZWNpYWwgaW5kaWNhdG9yIG9mIHRoZSByZXNvdXJjZSBpdGVtIHJlc291cmNlIGJ1bmRsZSB3aGVuIHRoZSBpdGVtIGlzIHVudHJhbnNsYXRlZAorcHJvamVjdF9wYW5lbF9idW5kbGVfdW50cmFuc2xhdGVkPVJlc291cmNlXCBCdW5kbGVcOlwgezB9XCAoVW50cmFuc2xhdGVkKQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBtYXJraW5nIHRoZSBsaW5lIGFib3ZlIG9yIHRvIHRoZSBsZWZ0IG9mIGEgcmVzb3VyY2UgY29tbWVudAorcHJvamVjdF9wYW5lbF9jb21tZW50PUJhc2VcIENsYXNzXCBSZXNvdXJjZVwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBMYWJlbCB0ZXh0IGZvciBhIGNvbW1lbnQgd2hlbiBub25lIGlzIGZvdW5kIGZvciBhIHJlc291cmNlCitwcm9qZWN0X3BhbmVsX2NvbW1lbnRfbm9uZT1Ob1wgY29tbWVudFwgc3VwcGxpZWQKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBzaG93biBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3IgY29tbWl0dGluZyBjaGFuZ2UgdG8gb25lIHJlc291cmNlIG9ubHkKK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbj1Db21taXRcIENoYW5nZQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBzYXZpbmcgYWxsIG9mIHRoZSByZXNvdXJjZXMgZGlzcGxheWVkLiBUaGlzIG1lYW5zIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIGdldCBzYXZlZC4KK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbl9hbGw9Q29tbWl0XCBBbGxcIFJlc291cmNlXCBDaGFuZ2VzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZWZhdWx0IHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIHdoZW4gbm8gcGFydGljdWxhciByZXNvdXJjZSBoYXMgYmVlbiBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUZXh0IGZpZWxkIG1hcmtlciBmb3IgdGhlIHRyYW5zbGF0aW9uIG9mIGEgcmVzb3VyY2Ugd2hlbiB0aGF0IHJlc291cmNlIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZW5jb2RpbmcgZmlsZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGgKK3Byb2plY3RfcGFuZWxfaXRlbV9pbmhlcml0cz08Tm9cIFRyYW5zbGF0aW9uXDpcIFJlc291cmNlXCBJbmhlcml0c1wgZnJvbVwgcGFyZW50PgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCByZXNvdXJjZQorIyBAY29tbWVudCBUaXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGlsZSBhIHJlc291cmNlIGlzIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nXDpcIHswfQorCisjCisjIEBncm91cCBSQlJlcG9ydGVyCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGZvciB0aGUgUkJSZXBvcnRlciBhcHBsaWNhdGlvbgorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNlbGVjdGluZyBmaWxlIGxvY2F0aW9ucyBmb3IgaW5wdXQvb3V0cHV0CityZXBvcnRlcl9idXR0b25fY2hvb3NlPVZhbGl0c2UuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBpbmRpY2F0aW5nIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBzaG91bGQgb2NjdXIgaW1tZWRpYXRlbHkKK3JlcG9ydGVyX2J1dHRvbl9ub3c9UFx1MDBFNGl2aXRcdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBzYXZpbmcgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYXMgZGVmYXVsdAorcmVwb3J0ZXJfYnV0dG9uX3NhdmVfZGVmYXVsdHM9VGFsbGV0YVwgbnlreWlzZXRcIGFzZXR1a3NldAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRvIGFjdGl2YXRlIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfYnV0dG9uX3N0YXJ0PUFsb2l0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRvIGRlYWN0aXZlIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfYnV0dG9uX3N0b3A9UHlzXHUwMEU0eXRcdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IExldmVsIG9mIGRldGFpbDogbW9zdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUKK3JlcG9ydGVyX2RldGFpbF9oaWdoPVBhbGpvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBhIHNlbGVjdGlvbiBvcHRpb24gb2YgdGhlIGxldmVsIG9mIGRldGFpbCBpbiByZXBvcnRpbmcKK3JlcG9ydGVyX2RldGFpbF9sZXZlbD1UaWVkb25cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IExldmVsIG9mIGRldGFpbDogc3RhbmRhcmQKK3JlcG9ydGVyX2RldGFpbF9ub3JtYWw9Tm9ybWFhbGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQ6IEhUTUwKK3JlcG9ydGVyX2Zvcm1hdF9odG1sPUhUTUwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQgdHlwZTogcGxhaW4gdGV4dAorcmVwb3J0ZXJfZm9ybWF0X3RleHQ9VGVrc3RpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0OiBYTUwKK3JlcG9ydGVyX2Zvcm1hdF94bWw9WE1MCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIGZpbGUgbG9jYXRpb24gb2YgdGhlIHJlc291cmNlIGJ1bmRsZSB0byByZXBvcnQgb24KK3JlcG9ydGVyX2lucHV0X2J1bmRsZT1SZXN1cnNzaWtva29lbG1hXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCByZXBvcnRpbmcgd2lsbCBoYXBwZW4gYXQgYSBzcGVjaWlmaWVkIHRpbWUgb2YgZGF5LiBGb2xsb3dlZCBieSBhIHRpbWUgYW5kIGRheSBvcHRpb24uCityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkPVJhcG9ydG9pbnRpYWphbmtvaHRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2Ygc2VxdWVudGlhbCByZXBvcnRpbmcgcGF1c2VkIGZvciBhIGRlZmluZWQgaW50ZXJ2YWwgYmV0d2VlbiByZXBvcnRpbmcuIEltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGFuZCBhIHVuaXQgb2YgbWVhc3VyZSBvZiB0aW1lCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsPVJhcG9ydG9pbnRpdlx1MDBFNGxpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IERhdGUvVGltZSBvZiBsYXN0IHJlcG9ydCBnZW5lcmF0aW9uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIHRpbWUgb2YgdGhlIGxhc3QgcmVwb3J0CityZXBvcnRlcl9sYXN0X3JlcG9ydD1WaWltZWlzaW5cIHJhcG9ydHRpXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBEYXRlL1RpbWUgb2YgbmV4dCByZXBvcnQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3aGVuIHRoZSBuZXh0IHJlcG9ydCB3aWxsIGJlIGdlbmVyYXRlZAorcmVwb3J0ZXJfbmV4dF9yZXBvcnQ9U2V1cmFhdmFcIHJhcG9ydHRpXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSByZXBvcnRzIGFyZSBwbGFjZWQKK3JlcG9ydGVyX291dHB1dF9kaXJlY3Rvcnk9VGFsbGV0dXNoYWtlbWlzdG9cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUgZm9yIGEgcGFydGljdWxhciBvdXRwdXQgZm9ybWF0CityZXBvcnRlcl9vdXRwdXRfZmlsZT1UaWVkb3N0b25cIG5pbWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIHNldHRpbmcgaW50ZXJ2YWwgb2YgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9pbnRlcnZhbD1SYXBvcnRvaW50aXZcdTAwRTRsaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGNvbmZpZ3VyYWJsZSBvcHRpb25zIG9mIHRoZSByZXBvcnRpbmcKK3JlcG9ydGVyX3BhbmVsX29wdGlvbnM9UmFwb3J0b2ludGlwYXJhbWV0cml0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTdWJwYW5lbCB0aXRsZSBmb3IgY2hvb3Npbmcgb3V0cHV0IGZvcm1hdHMgZm9yIHRoZSByZXBvcnRzCityZXBvcnRlcl9wYW5lbF9vdXRwdXRfZm9ybWF0PVR1bG9zdHVzbXVvdG8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBpbmRpY2F0aW9uIG9mIHJ1bm5pbmcgc3RhdHVzIG9mIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfcGFuZWxfc3RhdHVzPVRpbGFubmUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU2hvcnQgdGl0bGUgZm9yIHNlbGVjdGluZyBhIGNvZGUgc2NhbiBjb25maWd1cmF0aW9uIGZpbGUKK3JlcG9ydGVyX3BlcmZvcm1fc2Nhbj1Db2RlXCBTY2FuXCAtdGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFF1aWNrIGluZGljYXRpb24gdGhhdCB0aGUgcmVwb3J0ZXIgaXMgYWN0aXZlIChwZXJoYXBzIHdhaXRpbmcpCityZXBvcnRlcl9zdGF0dXNfcnVubmluZz1LXHUwMEU0eW5uaXNzXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBRdWljayBzdGF0dXMgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBub3QgYWN0aXZlCityZXBvcnRlcl9zdGF0dXNfc3RvcHBlZD1QeXNcdTAwRTR5dGV0dHkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGRheXMgb3B0aW9uCityZXBvcnRlcl90aW1lX2RheXM9UFx1MDBFNGl2XHUwMEU0XHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBldmVyeSBkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2V2ZXJ5ZGF5PUpva2FcIHBcdTAwRTRpdlx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZnJpZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9mcmlkYXk9UGVyamFudGFpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBob3VycyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfaG91cnM9VHVudGlhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBtaW51dGVzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9taW51dGVzPU1pbnV1dHRpYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgbW9uZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9tb25kYXk9TWFhbmFudGFpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBzYXR1cmRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfc2F0dXJkYXk9TGF1YW50YWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHN1bmRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfc3VuZGF5PVN1bm51bnRhaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgdGh1cnNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3RodXJzZGF5PVRvcnN0YWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHR1ZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3R1ZXNkYXk9VGlpc3RhaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgd2VkbmVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV93ZWRuZXNkYXk9S2Vza2l2aWlra28KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX3JlcG9ydGVyPVJCUmVwb3J0ZXIKKworIworIyBAZ3JvdXAgU2VhcmNoIGFuZCBSZXBsYWNlCisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGZvdW5kIG9uIHRoZSBzZWFyY2ggdGFiIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmFsIHNlYXJjaCB0aXRsZQorc2VhcmNoPUV0c2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3IgbWFraW5nIHRoZSBzZWFyY2ggY2FzZSBzZW5zaXRpdmUgb3Igbm90CitzZWFyY2hfY2FzZV9zZW5zaXRpdmU9SXNvdFwgamFcIHBpZW5ldFwga2lyamFpbWV0XCBvdmF0XCBzYW1vamEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggcmVzb3VyY2UgY29tbWVudHMKK3NlYXJjaF9jb21tZW50cz1Lb21tZW50aXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCB0byBzZWFyY2ggb24KK3NlYXJjaF9maW5kPUV0c2lcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggc2VsZWN0aW9uIGZvciBzZWFyY2hpbmcgb3B0aW9uIHRocm91Z2ggcmVzb3VyY2Uga2V5cworc2VhcmNoX2tleXM9UmVzdXJzc2lhdmFpbWV0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiB0aGUgZmllbGQgZm9yIGVudGVyaW5nIHRleHQgZm9yIHJlcGxhY2luZyB0aGUgZm91bmQgdmFsdWUKK3NlYXJjaF9yZXBsYWNlPUtvcnZhYVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIHNlYXJjaGluZyB0aHJvdWdoIHRyYW5zbGF0aW9uIHZhbHVlcworc2VhcmNoX3ZhbHVlcz1LXHUwMEU0XHUwMEU0bm5cdTAwRjZrc2V0CisKKyMKKyMgQGdyb3VwIFRhYnMKKyMKKyMgQGdyb3VwQ29tbWVudCBHVUkgVGFicyBpbiB0aGUgbWFpbiBwYW5lbAorCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciBUYWJiZWQgUGFuZSBvdmVyIHRoZSB0cmVlIHNob3dpbmcgYSBzaW5nbGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBpdHMgdmFyaW91cyBmaWxlcwordGFiX2J1bmRsZT1CdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGFiIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgdmFyaW91cyBncm91cHMgaW4gdGhlIGJ1bmRsZQordGFiX2dyb3Vwcz1SeWhtXHUwMEU0dAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgdGFiIG92ZXIgdHJlZSBzaG93aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK3RhYl9wcm9qZWN0PVByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBhbmUgYWxsb3dpbmcgZm9yIHNlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbnMKK3RhYl9zZWFyY2g9RXRzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUYWIgZm9yIHN0YXRpc3RpY3MgZGlzcGxheSBmb3IgZWl0aGVyIHRoZSBSZXNvdXJjZSBCdW5kbGUgYXMgYSB3aG9sZSBvciBwYXJ0aWN1bGFyIGxhbmd1YWdlIGZpbGVzCit0YWJfc3RhdGlzdGljcz1UaWxhc3RvdGllZG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUYWIgZm9yIGRpc3BsYXkgb2YgdW50cmFuc2xhdGVkIGl0ZW1zIGluIHRoZSBkaWZmZXJlbnQgbGFuZ3VhZ2UgZmlsZXMKK3RhYl91bnRyYW5zbGF0ZWQ9S1x1MDBFNFx1MDBFNG50XHUwMEU0bVx1MDBFNHR0XHUwMEY2bVx1MDBFNHQKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBHcm91cHMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IENvbHVtbiB0aXRsZSBmb3IgaXRlbSBjb21tZW50cworbGFuZ3VhZ2Vncm91cF9jb2x1bW5fY29tbWVudD1Lb21tZW50dGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtJ3MgcmVzb3VyY2Uga2V5CitsYW5ndWFnZWdyb3VwX2NvbHVtbl9rZXk9UmVzdXJzc2luXCBhdmFpbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX3RyYW5zbGF0aW9uPUtcdTAwRTRcdTAwRTRublx1MDBGNnMKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gdGhlIGxhbmd1YWdlIGZpbGUgc3RhdGlzdGljcyBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQSBjb21tZW50IGdpdmVuIHRvIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvbW1lbnQ9S29tbWVudHRpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIGNvdW50cnkgYmVpbmcgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvdW50cnk9TWFhXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfaXRlbV9jb3VudD1SZXN1cnNzaWVuXCBtXHUwMEU0XHUwMEU0clx1MDBFNFwgdFx1MDBFNHNzXHUwMEU0XCByZXN1cnNzaXRpZWRvc3Rvc3NhXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19sYW5ndWFnZT1LaWVsaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb25zIGluIHRoaXMgbGFuZ3VhZ2UgZmlsZQorbGFuZ3VhZ2VzdGF0c19tYW5hZ2VyPVJlc3Vyc3NpdGllZG9zdG9uXCBvbWlzdGFqYVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBuYW1lIGdpdmVuIHRvIHRoZSBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RpdGxlPVJlc3Vyc3NpdGllZG9zdG9uXCBuaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTnVtYmVyIG9mIHJlc291cmNlcyBuZWVkaW5nIHRyYW5zbGF0aW9uIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RyYW5zbGF0aW9uX2NvdW50PUtcdTAwRTRcdTAwRTRudFx1MDBFNG1cdTAwRTR0dFx1MDBGNm1pZW5cIHJlc3Vyc3NpZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XCB0XHUwMEU0c3NcdTAwRTRcIHJlc3Vyc3NpdGllZG9zdG9zc2FcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbGFuZ3VhZ2UvcmVnaW9uIHZhcmlhbnQgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3ZhcmlhbnQ9TXV1bm5lbG1hXDoKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBjb2x1bW4gdGl0bGUgZm9yIGdyb3VwIG5hbWVzIG9mIGl0ZW1zIGluIHRoZSByb3dzCitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2dyb3VwPVJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUga2V5IG9mIHRoZSBpdGVtIGEgcm93CitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleT1SZXN1cnNzaW5cIGF2YWluCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0cmFuc2xhdGVkIHZhbHVlIG9mIGFuIGl0ZW0gaW4gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fdHJhbnNsYXRpb249S1x1MDBFNFx1MDBFNG5uXHUwMEY2cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBjb3ZlcmluZyBidXR0b25zIHRoYXQgYXBwbHkgdG8gYSBzZWxlY3RlZCByZXNvdXJjZSBmcm9tIGEgdGFibGUgb2YgcmVzb3VyY2VzCitsYW5ndWFnZXVudHJhbnNfc2VsZWN0ZWRfcmVzb3VyY2VzX29wdGlvbnM9VmFsaXR0dWplblwgcmVzdXJzc2llblwgcGFyYW1ldHJpdApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfc3YucHJvcGVydGllcyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX3N2LnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3NmU5MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX3N2LnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMjE2IEBACisjIEBmaWxlICAgICAgICAgIFJCTWFuYWdlcgorIyBAZmlsZUVuY29kaW5nICBzdgorIyBAZmlsZUxhbmd1YWdlICBTd2VkaXNoCisjIEBmaWxlQ291bnRyeSAgIAorIyBAZmlsZVZhcmlhbnQgICAKKyMgQGZpbGVNYW5hZ2VyICAgU3RlZmFuIEVkbHVuZAorIyBAZmlsZUNvbW1lbnQgICAKKworCisjCisjIEBncm91cCBCYXNlIENsYXNzIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb24gSXRlbXMgZm9yIHRoZSBCYXNlIENsYXNzIEdyb3VwIHRhYmJlZCBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorYmFzZWdyb3VwX2dyb3VwX2NvbW1lbnQ9R3J1cHBcIGtvbW1lbnRhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfbmFtZT1HcnVwcFwgbmFtbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfb3B0aW9ucz1SZXN1cnNncnVwcFwgYWx0ZXJuYXRpdgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfaXRlbV9vcHRpb25zPVJlc3Vyc1wgc2FrXCBhbHRlcm5hdGl2CisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgU3RhdGlzdGljcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgQWxsIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBhcHBlYXJpbmcgb24gdGhlIHN0YXRpc3RpY3MgcGFuZSBmb3IgdGhlIGJhc2UgY2xhc3MKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZHVwbGljYXRlc19jb3VudD1BbnRhbFwga29waWVyYWRlXCByZXN1cnNueWNrbGFyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19maWxlX2NvdW50PUFudGFsXCByZXN1cnNmaWxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZ3JvdXBfY291bnQ9QW50YWxcIHJlc3Vyc2dydXBwZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2dyb3VwX2dyb3VwPVJlc3Vyc1wgZ3J1cHBlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9jb3VudD1BbnRhbFwgcmVzdXJzXCBzYWtlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9ncm91cD1SZXN1cnNzYWsKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhcHBlYXJpbmcgb24gdGhlIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgZmlsZSBiZWluZyB2aWV3ZWQKK2Jhc2V1bnRyYW5zX2ZpbGU9RmlsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiByZXNvdXJjZSBpdGVtcyBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZmlsZQorYmFzZXVudHJhbnNfdW50cmFuc19jb3VudD1BbnRhbFwgb292ZXJzYXR0YVwgc2FrZXIKKworIworIyBAZ3JvdXAgQnV0dG9uIE5hbWVzCisjCisjIEBncm91cENvbW1lbnQgVGhlIG5hbWVzIGRpc3BsYXllZCBvbiB0aGUgdmFyaW91cyBidXR0b25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfZ3JvdXA9UmVzdXJzXCBmaWxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBsYW5ndWFnZSBmaWxlCitidXR0b25fYWRkX2ZpbGU9TGFnZ1wgdGlsbFwgbnlcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZmlsZV90cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9hZGRfZ3JvdXA9TGFnZ1wgdGlsbFwgcmVzdXJzXCBncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9hZGRfZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9hZGRfcmVzb3VyY2U9TGFnZ1wgdGlsbFwgcmVzdXJzc2FrCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIGNhbmNlbGluZyBhY3Rpb25zCitidXR0b25fY2FuY2VsPUF2YnJ5dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgYSBjaG9pY2Ugb3Igc2VsZWN0aW9uIG9wdGlvbgorYnV0dG9uX2Nob29zZT1WXHUwMEU0bGoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY2hvb3NlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBnZW5lcmljIGNyZWF0aW9uIG9mIGdyb3VwcywgaXRlbXMsIGZpbGVzLCBldGMuCitidXR0b25fY3JlYXRlPVNrYXBhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEZvciBjcmVhdGlvbiBvZiBhIHJlc291cmNlIGdyb3VwCitidXR0b25fY3JlYXRlX2dyb3VwPVNrYXBhXCBncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgY3JlYXRpbmcgYW4gaXRlbSB0aGVuIGNvbnRpbnVpbmcgY3JlYXRpbmcgbW9yZSBpdGVtcworYnV0dG9uX2NyZWF0ZV9tb3JlPVNrYXBhXCBvY2hcIEZvcnRzXHUwMEU0dHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX21vcmVfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSByZXNvdXJjZSB0cmFuc2xhdGlvbiBpdGVtCitidXR0b25fY3JlYXRlX3Jlc291cmNlPVNrYXBhXCByZXN1cnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3Jlc291cmNlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgYSBncm91cCBhbmQgaXRzIGNvbnRlbnRzCitidXR0b25fZGVsZXRlX2dyb3VwPVRhXCBib3J0XCBncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIHBlcm1hbmVudGx5IHJlbW92aW5nIGEgcmVzb3VyY2UgZnJvbSB0aGUgYnVuZGxlCitidXR0b25fZGVsZXRlX3Jlc291cmNlPVRhXCBib3J0XCByZXN1cnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fZGVsZXRlX3Jlc291cmNlX3RyaWdnZXI9ZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgR2VuZXJpYyBlZGl0IGJ1dHRvbgorYnV0dG9uX2VkaXQ9RWRpdGVyYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgZ3JvdXAgbmFtZSBhbmQgY29tbWVudAorYnV0dG9uX2VkaXRfZ3JvdXA9RWRpdGVyYVwgZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBlZGl0aW5nIHJlc291cmNlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcga2V5IGFuZCB0cmFuc2xhdGlvbgorYnV0dG9uX2VkaXRfcmVzb3VyY2U9RWRpdGVyYVwgcmVzdXJzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2VkaXRfcmVzb3VyY2VfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgaW5pdGlhdGluZyBhbiBpbXBvcnQgb2YgcmVzb3VyY2VzIGZyb20gYW4gYWx0ZXJuYXRlIHNvdXJjZQorYnV0dG9uX2ltcG9ydD1JbXBvcnRlcmEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25faW1wb3J0X3RyaWdnZXI9aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gYWxsb3dzIGEgc2VsZWN0ZWQgcmVzb3VyY2UgdG8gYmUgbWFya2VkIGFzIHRyYW5zbGF0ZWQgd2l0aG91dCBmdXJ0aGVyIGVkaXRpbmcKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWQ9TWFya2VyYVwgc29tXCBcdTAwRjZ2ZXJzYXR0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX21hcmtfdHJhbnNsYXRlZF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgYWRkaW5nIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbiB0byB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfYWRkPUFkZFwgQ3VycmVudFwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2FkZF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY2xvc2luZyB0aGUgcHJvamVjdCB3aW5kb3cKK2J1dHRvbl9wcm9qZWN0X2Nsb3NlPUNsb3NlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2Nsb3NlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfbmV3PU5ld1wgUHJvamVjdAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9uZXdfdHJpZ2dlcj1uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIG9wZW5pbmcgYSBwcm9qZWN0IGZpbGUKK2J1dHRvbl9wcm9qZWN0X29wZW49T3BlblwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9vcGVuX3RyaWdnZXI9bworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciByZW1vdmluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9yZW1vdmU9UmVtb3ZlXCBTZWxlY3Rpb24KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjYXVzaW5nIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUgdG8gYmUgdGhlIG9uZSBiZWluZyBlZGl0ZWQgaW4gdGhlIG1haW4gYXBwbGljYXRpb24KK2J1dHRvbl9wcm9qZWN0X3NlbGVjdD1FZGl0XCBTZWxlY3RlZAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9zZWxlY3RfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBwZXJmb3JtaW5nIGEgY29tcGxldGUgc2VhcmNoCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsPUhpdHRhXCBhbGxhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbF90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgY29tcGxldGUgc2VhcmNoIGFuZCByZXBsYWNlCitidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsPUVyc1x1MDBFNHR0XCBhbGxhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbF90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciB1cGRhdGluZyBpbmZvcm1hdGlvbgorYnV0dG9uX3VwZGF0ZT1VcGRhdGVyYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl91cGRhdGVfdHJpZ2dlcj11CisKKyMKKyMgQGdyb3VwIERpYWxvZ3MKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbnMgdmFyaW91cyBkaWFsb2cgYm94ZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkYWlsb2dfdGl0bGVfcHJlZmVyZW5jZXM9SW5zdGFsbG5pbmdhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3ZXRoZXIgb3Igbm90IGEgbmV3IGZpbGUgd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhlIGJhc2UgY2xhc3MKK2RpYWxvZ19jaGVja2JveF9jb3B5X2VsZW1lbnRzPUtvcGllcmFcIHNha2VyXCBmcmFuXCBiYXNrbGFzc1wgdGlsbFwgbnlcIGZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgSW5kaWNhdG9yIG9mIHdldGhlciBhbiBpdGVtIGlzIHRyYW5zbGF0ZWQgb3Igbm90CitkaWFsb2dfY2hlY2tib3hfdHJhbnNsYXRlZD1PdmVyc2F0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY29tbWVudD1Lb21lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19jb3VudHJ5PUxhbmQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0ZWQ9U2thcGFkXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0b3I9U2thcGFyZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAezF9IFRoZSBkYXRlCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBpbnZvbHZlZAorIyBAY29tbWVudCBUaGUgZGF0ZSBhbmQgcGVyc29uIGFzc29jaWF0ZWQgd2l0aCBhIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhbiBpdGVtCitkaWFsb2dfZGF0ZV9wZXJzb249ezB9XCBhdlwgezF9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWZhdWx0X2NvbW1lbnQ9U2tvbnN2YXJkZVwgZm9yXCBrb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVmYXVsdF90cmFuc2xhdGlvbj1Ta29uc3ZhcmRlXCBmb3JcIG92ZXJzYXR0bmluZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2ZpbGU9VGFcIGJvcnRcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2dyb3VwPVRhXCBib3J0XCByZXN1cnNcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfaXRlbT1UYVwgYm9ydFwgcmVzdXJzc2FrCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFdhcm5pbmcgZGlzcGxheWVkIHdoZW4gYSB1c2VyIGFza3MgZm9yIGEgZGVsZXRpb24gb2YgYSBmaWxlLiBQcm9tcHRzIGZvciAnWWVzJyBvciAnTm8nCitkaWFsb2dfZGVsZXRlX3dhcm5pbmc9VmFybmluZ1whXCBSYWRlcmluZ2VuXCBrYW5cIGludGVcIFx1MDBFNW5ncmFzLlxuXHUwMEM0clwgZHVcIHNcdTAwRTRrZXJcIGF0dFwgZHVcIHZpbGxcIGZvcnRzXHUwMEU0dHRhPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZW5jb2Rpbmc9S29kbmluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2NvbW1lbnQ9S29tbWVudGFyXCBmb3JcIHJlc3Vyc2ZpbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbj1CYXNrbGFzc1wgZWdlbnNrYXBzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERlc2NyaXB0aW9uIG9mIEZpbGUgRmlsdGVyIGZvciBSQlJlcG9ydGVyIFhNTCBzY2FuIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2RpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbl9zY2FuPVhNTFwgUkJSZXBvcnRlclwgbFx1MDBFNHNcIGZpbGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2luZm89RmlsXCBpbmZvcm1hdGlvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9tYW5hZ2VyPU5hbW5cIGZvclwgcmVzdXJzYWdhcmVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV90aXRsZT1UaXRlbFwgZm9yXCByZXN1cnNmaWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZ3JvdXA9R3J1cHBcIG5hbW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZ3JvdXBfY29tbWVudD1HcnVwcFwga29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2tleT1OeWNrZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfbGFuZ3VhZ2U9U3ByYWsKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2xvb2t1cHM9VXBwbGV0bmluZ2FyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVkPVNlbmFzdFwgbW9kaWZpZXJhZFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllcj1TZW5hc3RcIG1vZGlmaWVyYWRcIGF2XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgbGFuZ3VhZ2UsIGNvdW50cnksIG9yIHZhcmlhbnQgb2YgYSBsYW5ndWFnZSBmaWxlCitkaWFsb2dfbmFtZT1OYW1uXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBuYW1lIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlLCBiZWZvcmUgY3JlYXRpbmcgdGhhdCBidW5kbGUKK2RpYWxvZ19uZXdfYmFzZWNsYXNzPU1hdGFcIGluXCBlblwgbnlcIGJhc2tsYXNzbmFtblwgZm9yXCByZXN1cnNmaWxlbi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyBwb3B1cCB3aW5kb3cgdGV4dCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK2RpYWxvZ19uZXdfcHJvamVjdD1QbGVhc2VcIGVudGVyXCBhXCB0aXRsZVwgZm9yXCB5b3VyXCBuZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlcyBtYWtpbmcgaXQgdGhyb3VnaCB0aGUgZmlsdGVyIHVwb24gb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZQorZGlhbG9nX29wZW5fZmlsZV9maWx0ZXI9QmFza2xhc3NcIGVnZW5za2Fwc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHNlY3Rpb24gaGVhZGluZyBmb3Igc2V0dGluZyB0aGUgbG9jYWxlCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlPUxva2FsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBMb2NhbGVzIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIGZvciB0aGUgYXBwbGljYXRpb24KK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfZGVmaW5lZD1EZWZpbmllcmFkXCBmb3JcIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfaXNvPUlTT1wgU3RhbmRhcmRlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBMb2NhbGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBKYXZhIFZpcnR1YWwgTWFjaGluZQorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9tYWNoaW5lPUtvbXBhdGliZWxcIHV0cnVzdG5pbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfd2FybmluZz1PQlMuXCBBbmRyaW5nYXJcIHRpbGxcIGxva2FsZW5cIGFyXCBpbnRlXCBha3RpdmFcIHRpbGxzXCBhcHBsaWthdG9pbmVuXCBhdGVyc3RhcnRhcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9va2FuZGZlZWw9J0xvb2tcIGFuZFwgRmVlbCcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX3VzZXJuYW1lPUFudmFuZGFybmFtblw6CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZXNjcmlwdG9yIHRoYXQgZ29lcyBpbnRvIEdVSSBmaWxlIGNob29zZXIKK2RpYWxvZ19wcm9qZWN0X2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPVJCTWFuYWdlclwgUHJvamVjdFwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEZpbGUgRmlsdGVyIGRlc2NyaXB0aW9uIGZvciByZXNvdXJjZSBidW5kbGUgcHJvamVjdCBmaWxlcworZGlhbG9nX3Byb2plY3RfZmlsdGVyX2Rlc2NyaXB0aW9uPVJlc291cmNlXCBCdW5kbGVcIFByb2plY3RzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIHRoYXQgbm8gcHJvamVjdCBpcyBvcGVuLCBwbGFjZWQgaW4gdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cgd2hlcmUgdGhlIHByb2plY3QgbmFtZSB3b3VsZCBub3JtYWxseSBnbworZGlhbG9nX3Byb2plY3Rfbm9uZV9zZWxlY3RlZD1Ob1wgQWN0aXZlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgd2luZG93IHNob3dpbmcgYWxsIHRoZSByZXNvdXJjZSBidW5kbGVzIGluIGEgcHJvamVjdAorZGlhbG9nX3Byb2plY3RfdGl0bGU9UmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFByb21wdHMgdGhlIHVzZXIgaWYgdGhleSB3b3VsZCBsaWtlIHRvIHNhdmUgY2hhbmdlcyBiZWZvcmUgZXhpdGluZworZGlhbG9nX3F1aXRfc2F2ZT1WaWxsXCBkdVwgc3BhcmFcIGlubmFuXCBkdVwgYXZzbHV0YXJcIFJCTWFuYWdlcj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQSBnZW5lcmljIHByb3BtcHQgdG8gYXNrIHRoZSB1c2VyIGlmIHRoZXkgd2lzaCB0byBzYXZlIGNoYW5nZXMKK2RpYWxvZ19zYXZlPVZpbGxcIGR1XCBzcGFyYVwgYW5kcmluZ2FyXCB0aWxsXCByZXN1cnNncnVwZW4/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfb3B0aW9ucz1Tb2tuaW5nc2FsdGVybmF0aXYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3NlYXJjaF9wYXJhbT1MZXRhXCBlZnRlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgdGl0bGUgb2YgdGhlIGFib3V0IGRpYWxvZyBib3gKK2RpYWxvZ190aXRsZV9hYm91dF9yYm1hbmFnZXI9T21cIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgZGVsZXRpb24gb2YgYW4gZW50aXJlIHJlc291cmNlIGdyb3VwCitkaWFsb2dfdGl0bGVfZGVsZXRlX2dyb3VwPVRhXCBib3J0XCByZXN1cnNcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIHdoZW4gcHJvbXB0aW5nIHRvIGRlbGV0ZSBhIHJlc291cmNlCitkaWFsb2dfdGl0bGVfZGVsZXRlX2l0ZW09VGFcIGJvcnRcIHJlc3VycworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9ncm91cD1FZGl0ZXJhXCBSZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9pdGVtPUVkaXRlcmFcIHJlc3Vyc3NhaworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3I9RXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2Vycm9yX2NyZWF0aW5nX2J1bmRsZT1GZWxcIHZpZFwgc2thcGFuZGVcIGF2XCByZXN1cnNmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIHdoZW4gb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZSBub3QgY3JlYXRlZCBieSBSQk1hbmFnZXIKK2RpYWxvZ190aXRsZV9lcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1GZWxcOlwgT2xcdTAwRTRzYmFyXCByZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaXRsZSBvbiBhIHdhcm5pbmcgZGlhbG9nIHRoYXQgSS9PIG1hbGZ1bmN0aW9uZWQgb3BlbmluZyBhIGZpbGUKK2RpYWxvZ190aXRsZV9lcnJvcl9vcGVuaW5nX2ZpbGU9RmVsXCB2aWRcIFx1MDBGNnBwbmFuZGVcIGF2XCBmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBhIGRpYWxvZyBib3ggZm9yIGVudGVyaW5nIHNwZWNpYWwgcGFyYW1ldGVycyBuZWVkZWQgdG8gZXhwb3J0IGEgcmVzb3VyY2UgYnVuZGxlIHRvIGphdmEgY2xhc3MgY29kZQorZGlhbG9nX3RpdGxlX2V4cG9ydF9qYXZhX29wdGlvbnM9RXhwb3J0XCBwYXJhbWV0cmFyXDpcIEphdmFcIGtsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBhIGRpYWxvZyB3aXRoIGEgcHJvZ3Jlc3MgYmFyIGdvdmVybmluZyBpbXBvcnQgc3RhdHVzCitkaWFsb2dfdGl0bGVfaW1wb3J0X3Byb2dyZXNzPUltcG9ydGVyaW5nc2ZyYW1nXHUwMEU1bmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBuZXcgYnVuZGxlCitkaWFsb2dfdGl0bGVfbmV3X2J1bmRsZT1Ta2FwYVwgbnlcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUKK2RpYWxvZ190aXRsZV9uZXdfZmlsZT1Ta2FwYVwgbnlcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCitkaWFsb2dfdGl0bGVfbmV3X2dyb3VwPVNrYXBhXCBueVwgcmVzdXJzZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyByZXNvdXJjZQorZGlhbG9nX3RpdGxlX25ld19pdGVtPVNrYXBhXCBueVwgcmVzdXJzc2FrCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgZGlhbG9nIGJveCBzaG93aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorZGlhbG9nX3RpdGxlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfcHJlZmVyZW5jZXM9SW5zdGFsbG5pbmdhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNvbmZpcm1pbmcgZXhpdCBmcm9tIGFwcGxpY2F0aW9uCitkaWFsb2dfdGl0bGVfcXVpdD1BdnNsdXRhXCBSQk1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3NlYXJjaD1Tb2sKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3VzZXJfbmFtZT1NYXRhXCBpblwgYW52YW5kYXJuYW1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ190cmFuc2xhdGlvbj1PdmVyc2F0dG5pbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdXNlcl9uYW1lPU1hdGFcIGluXCBuYW1uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdmFyaWFudD1WYXJpYW50XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2dyb3VwPU9tXCBkdVwgdGFyXCBib3J0XCBkZW5cIGFyXCBncnVwcGVuXCBzYVwgZm9yc3Zpbm5lclwgYWxsYVwgc2FrZXJcIGlcIGdydXBwZW4uXCBWaWxsXCBkdVwgZm9yc2F0dGE/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ193YXJuaW5nX2RlbGV0ZV9pdGVtPVJlc3Vyc3Nha2VuXCBrb21tZXJcIGF0dFwgZm9yc3Zpbm5hLlwgVmlsbFwgZHVcIGZvcnNhdHRhPworCisjCisjIEBncm91cCBFcnJvciBNZXNzYWdlcworIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yPUZlbAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGFkZCBhIHJlc291cmNlIGJ1bmRsZSB0byBhIHByb2plY3QuCitlcnJvcl9hZGRpbmdfcHJvamVjdF9idW5kbGU9QW5cIGVycm9yXCBvY2N1cnJlZFwgdHJ5aW5nXCB0b1wgYWRkXCB0aGVcIFJlc291cmNlXCBCdW5kbGVcIHlvdVwgc2VsZWN0ZWQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX2Jhc2VjbGFzc193aGl0ZXNwYWNlPVJlc3Vyc25hbW5cIGthblwgaW50ZVwgaGFcIHNwYWNlXCBpXCBkZW0uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX2J1bmRsZV9ub3RfY3JlYXRlZD1JbmdlblwgcmVzdXJzZmlsXCB2YXJcIHNrYXBhZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZmlsZT1FdHRcIGZlbFwgdXBwc3RvZFwgbmFyXCB2aVwgZm9yc29rdGVcIHNrYXBhXCByZXN1cnNmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2dyb3VwPUV0dFwgcHJvYmxlbVwgdXBwc3RvZFwgbmFyXCBncnVwcGVuXCBmb3Jzb2t0ZVwgc2thcGFzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9pdGVtPUV0dFwgZmVsXCB1cHBzdG9kXCB2aWRcIHNrYXBhbmRlXCBhdlwgbnlcIG92ZXJzYXR0bmluZworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gY3JlYXRpbmcgYSBwcm9qZWN0CitlcnJvcl9jcmVhdGluZ19wcm9qZWN0PUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCBhXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAezB9IFRoZSBtZXNzYWdlIGZyb20gYW4gSU9FeGNlcHRpb24gdGhhdCBpcyB0aHJvd24KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBmaWxlCitlcnJvcl9kZWxldGluZz1FdHRcIGZlbFwgdXBwc3RvZFwgblx1MDBFNHJcIGphZ1wgZlx1MDBGNnJzXHUwMEY2a3RlXCB0YVwgYm9ydFwgZmlsXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBBbiBlcnJvciB0aGF0IG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBkZWxldGUgYSBmaWxlLCBidXQgdGhlIHZpcnR1YWwgbWFjaGluZSBjYW4gbm90IGRvIHNvCitlcnJvcl9kZWxldGlvbl9ub3RfcG9zc2libGU9UkJNYW5hZ2VyXCBrdW5kZVwgZWpcIHRhXCBib3J0XCBmaWwuXCBUaWxsc3RcdTAwRTVuZFwgZlx1MDBGNnJianVkZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSBmb3IgZXhwb3J0aW5nIHJlc291cmNlIGJ1bmRsZXMKK2Vycm9yX2V4cG9ydD1FdHRcIGZlbFwgdXBwc3RvZFwgdmlkXCBleHBvcnRlcmluZ1wgYXZcIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX2ludGVybmFsPUludGVybnRcIGZlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfZmlsZT1FdHRcIGZlbFwgdXBwc3RvZFwgdmlkXCBtb2RpZmllcmluZ1wgYXZcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfZ3JvdXA9RXR0XCBmZWxcIHVwcHN0b2RcIG5hclwgZ3J1cHBcIG1vZGlmaWVyYWRlcy4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2l0ZW09RXR0XCBmZWxcIHVwcHN0b2RcIG5hclwgb3ZlcnNhdHRuaW5nXCBhbmRyYWRlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2ZpbGU9Rm9yXCBhdHRcIHNrYXBhXCBlblwgcmVzdXJzZmlsXCBzYVwgbWFzdGVcIGR1XCBmb3JzdFwgc2thcGFcIGVuXCByZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2dyb3VwPUZvclwgYXR0XCBza2FwYVwgZW5cIGdydXBwXCBzYVwgbWFzdGVcIGR1XCBmb3JzdFwgc2thcGFcIGVuXCByZXN1cnNncnVwcC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgcmVzb3VyY2UsIHdpdGhvdXQgYW4gb3BlbiByZXNvdXJjZSBidW5kbGUKK2Vycm9yX25vX2J1bmRsZV9mb3JfaXRlbT1PcHBuYVwgZW5cIHJlc3Vyc2dydXBwXCBpbm5hblwgZHVcIGZvcnNva2VyXCBza2FwYVwgZW5cIG55XCBvdmVyc2F0dG5pbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitlcnJvcl9ub19rZXlfcmVwbGFjZT1FcnNcdTAwRTR0dFwgZnVuZ2VyYXJcIGVqXCBmXHUwMEY2clwgcmVzdXJzXCBueWNrbGFyLlwgQWxsYVwgYW5kcmFcIGVyc1x1MDBFNHR0bmluZ2FyXCBrb21tZXJcIGF0dFwgdXRmXHUwMEY2cmFzLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIHRoYXQgUkJNYW5hZ2VyIGNhbiBub3QgcmVhZCB0aGUgZmlsZSBhcyBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9RGVuXCB2YWxkYVwgcmVzdXJzXCBncnVwcGVuXCB2YXJcIGVqXCBza2FwYWRcIGF2XCBSQk1hbmFnZXIsXCBlbGxlclwgZmlsZW5cIFx1MDBFNHJcIHNrYWRhZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdvdWxkIG5vdCBvcGVuCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2Ugb2NjdXJpbmcgb24gYW4gSS9PIGVycm9yIHRyeWluZyB0byBvcGVuIGEgZmlsZQorZXJyb3Jfb3BlbmluZ19maWxlPUt1bmRlXCBlalwgXHUwMEY2cHBuYVwgZmlsXCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiBSQk1hbmFnZXIgZW5jb3VudGVycyBhbiBlcnJvciB3cml0aW5nIHByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIHN5c3RlbQorZXJyb3JfcHJlZmVyZW5jZXNfc2F2ZT1FdHRcIGZlbFwgdXBwc3RvZFwgblx1MDBFNHJcIGphZ1wgZlx1MDBGNnJzXHUwMEY2a3RlXCBzcGFyYVwgZGluYVwgaW5zdFx1MDBFNGxsaW5nYXIuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkCisjIEBjb21tZW50IEEgbWVzc2FnZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgd2hlbiBhbiBlcnJvciBvY2N1cnMgaW4gc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUKK2Vycm9yX3NhdmluZz1Qcm9ibGVtXCB2aWRcIHNwYXJhbmRlXCBhdlwgcmVzdXJzZ3J1cHBlblw6XCBcIHswfQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gc2F2aW5nIGEgcHJvamVjdAorZXJyb3Jfc2F2aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBzYXZlXCB0aGVcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1Z2dlc3QgdHJ5aW5nIHRvIGltcG9ydCB0aGUgcmVzb3VyY2UgYnVuZGxlIGluc3RlYWQgb2Ygb3BlbmluZyBpdC4KK2Vycm9yX3N1Z2dlc3RfaW1wb3J0X3Byb3BlcnRpZXM9Rlx1MDBGNnJzXHUwMEY2a1wgaW1wb3J0ZXJhXCByZXN1cnNncnVwcGVuXCBpc3RcdTAwRTRsbGV0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5fZmlsZT1Gb3Jzb2tcIGlnZW5cIG1lZFwgZW5cIGFubmFuXCBrb2RuaW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9ncm91cD1Gb3Jzb2tcIGlnZW5cIG1lZFwgZW5cIGFubmFuXCBncnVwcG5hbW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2l0ZW09Rm9yc29rXCBpZ2VuXCBtZWRcIGVuXCBhbm5hblwgbnlja2VsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFZhbHVlIGluc2VydGVkIGludG8gdGFibGUgY2VsbHMgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJlZAordGFibGVfY2VsbF9lcnJvcj0qRmVsKgorCisjCisjIEBncm91cCBFeHBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGV4cG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgT3B0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGZvciBjcmVhdGVkIGEgcHJvdGVjdGVkIGNsYXNzCitleHBvcnRfamF2YV9jbGFzc19wcm90ZWN0ZWQ9U2thcGFcIGVuXCBza3lkZGFkXCBrbGFzcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBzZXR0aW5nIHRoZSBjcmVhdGVkIGNsYXNzIGFzIHB1YmxpYworZXhwb3J0X2phdmFfY2xhc3NfcHVibGljPVNrYXBhXCBlblwgcHVibGlrXCBrbGFzcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBmb3IgY3JlYXRpbmcgcHJvdGVjdGVkIG1ldGhvZHMgaW4gdGhlIGphdmEgY2xhc3MKK2V4cG9ydF9qYXZhX21ldGhvZHNfcHJvdGVjdGVkPVNrYXBhXCBlblwgc2t5ZGRhZFwgbWV0b2QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHB1YmxpYyBtZXRob2RzCitleHBvcnRfamF2YV9tZXRob2RzX3B1YmxpYz1Ta2FwYVwgcHVibGlrXCBtZXRvZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaXRsZSBvZiBhIGNoZWNrIGJveCBmb2xsb3dlZCBieSBhIHRleHQgZmllbGQgZm9yIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdG8gdXNlIGEgcGFja2FnZSBpbiB0aGUgZ2VuZXJhdGVkIGphdmEgY2xhc3MgYW5kIHdoYXQgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGNhbGxlZAorZXhwb3J0X2phdmFfcGFja2FnZT1TcGVjaWZpZXJhXCBKYXZhXCBwYWNrYWdlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGV4dCBwbGFjZWQgaW4gYSBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoZSBkaWFsb2cgYm94IGZvciBzcGVjaWZ5aW5nIHBhcmFtZXRlcnMgY29uY2VybmluZyB0aGUgZXhwb3J0IG9mIHJlc291cmNlIGJ1bmRsZXMgaW50byBhIGphdmEgY2xhc3MKK2V4cG9ydF9qYXZhX3RpdGxlPVZhclwgZ29kXCBzcGVjaWZpY2VyYVwgZlx1MDBGNmxqYW5kZVwgcGFyYW1ldHJhclwgZlx1MDBGNnJcIGRpblwgSmF2YVwga2xhc3NcOgorCisjCisjIEBncm91cCBHZW5lcmFsCisjCisjIEBncm91cENvbW1lbnQgU29tZSBpdGVtcyB0aGF0IGFyZSBjb21tb24gYWNjcm9zcyBncm91cHMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIGZpbGUgb3IgY2xhc3MgY29tcG9zZWQgb2YgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb25zIGZvciB0aGUgYnVuZGxlCitiYXNlY2xhc3M9QmFza2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgVGhpcyBpcyB0aGUgbGVnYWwgY29weXJpZ2h0IG5vdGljZQorY29weXJpZ2h0PShDKVwgS29waWVyaW5nc3NreWRkYWRcIElCTVwgQ29ycC5cIDIwMDAtMjAwNFwgLVwgQWxsYVwgcmF0dGlnaGV0ZXJcIHJlc2VydmVyYWRlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlcm5lcmFsIHVzZSBmb3IgZmlsZSBkaXJlY3RvcmllcworZGlyZWN0b3J5PUZvbGRlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitncm91cHM9R3J1cHBlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZpbGUgaW4gdGhlICdJbWFnZXMnIGRpcmVjdG9yeSB0aGF0IHJlcHJlc2VudHMgdGhlIGxvZ28gc2VlbiBhdCB0aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbgorbG9nb19maWxlbmFtZT1UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUcmVlIG5vZGUgdGl0bGUgd2hlbiB2aWV3aW5nIGEgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBwcm9qZWN0IHZpZXcgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgcHJvamVjdAorbm9fcHJvamVjdD1EZWZhdWx0XCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUcmVlIG5vZGUgdGl0bGUgZGVmYXVsdGVkIHRvIHdoZW4gbm8gcmVzb3VyY2UgYnVuZGxlIG9yIHByb2plY3QgaGFzIGJlZW4gb3BlbmVkIGJ5IHRoZSB1c2VyCitub19wcm9qZWN0X2J1bmRsZT1Ob1wgUHJvamVjdFwgb3JcIFJlc291cmNlXCBCdW5kbGVcIE9wZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSB0b3AgdHJlZSBub2RlIHRpdGxlLCB3aGVuIG5vIHJlc291cmNlIGJ1bmRsZSBoYXMgYmVlbiBvcGVuZWQgb3IgY3JlYXRlZAorbm9fcmVzb3VyY2VfYnVuZGxlPUluZ2VuXCByZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitub25lPUluZ2VuCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQcm9qZWN0IHRhYmxlIGNvbHVtbiBuYW1lIC0gTG9jYXRpb24gb2YgYSByZXNvdXJjZSBidW5kbGUKK3Byb2plY3RfdGFibGVfZmlsZV9sb2NhdGlvbj1GaWxlXCBMb2NhdGlvbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGFibGUgQ29sdW1uIE5hbWUgZm9yIHJlc291cmNlIGJ1bmRsZSBuYW1lCitwcm9qZWN0X3RhYmxlX3Jlc291cmNlX2J1bmRsZT1SZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoaXMgYXBwbGljYXRpb24KK3JibWFuYWdlcj1SQk1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgCityYm1hbmFnZXJfY29udGFjdD1Ta2FwYXJlXDpcIEphcmVkXCBKYWNrc29uXCAmXCBHZW9yZ2VcIFJob3RlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIGZ1bGwgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfbWFuYWdlcj1SZXN1cnNncnVwcFwgQWdhcmUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAordGFibGVfY29sdW1uX2Vycm9yPUZlbFwgaVwga29sdW1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAezB9IAorIyBAY29tbWVudCBOb2RlIHRpdGxlLCB1bmRlciB3aGljaCBhbGwgZmlsZXMgb2YgdGhlIHNhbWUgY291bnRyeSwgbGFuZ3VhZ2UgcmVzaWRlCit0cmVlX2NvdW50cnlfbm9kZT1MYW5kc2tvZFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEB7MH0gTGFuZ3VhZ2UgRW5jb2RpbmcKKyMgQGNvbW1lbnQgVGhlIG5vZGUgYmVsb3cgd2hpY2ggbGFuZ3VhZ2VzIG9mIG9uZSBlbmNvZGluZyBhcmUgZ3JvdXBlZAordHJlZV9sYW5ndWFnZV9ub2RlPVNwcmFra29kXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCit0cmVlX3ZhcmlhbnRfbm9kZT1WYXJpYW50ZXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgYXNzaWduZWQgYXMgYSB1c2VyIG5hbWUgd2hlbiB0aGUgdXNlciBuYW1lIGlzIG5vdCBzcGVjaWZpZWQKK3Vua25vd25fdXNlcj1Pa2FuZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCit1bnRpdGxlZD1JbmdlblwgdGl0ZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAordW50cmFuc2xhdGVkX2l0ZW1zPU9vdmVyc2F0dGFcIHNha2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAezB9IFRoZSB2ZXJzaW9uIG51bWJlcgorIyBAY29tbWVudCBUaGUgdmVyc2lvbiBvZiB0aGlzIGFwcGxpY2F0aW9uCit2ZXJzaW9uPVZlcnNpb25cIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBnZW5lcmFsIHVzZSBXYXJuaW5nCit3YXJuaW5nPVZhcm5pbmcKKworIworIyBAZ3JvdXAgSW1wb3J0CisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGRlYWxpbmcgd2l0aCBpbXBvcnQgb3B0aW9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBmaWxlIGNob29zZXIgZm9yIGNob29zaW5nIFRNWCBmaWxlcworaW1wb3J0X1RNWF9maWxlX2Rlc2NyaXB0aW9uPVRNWFwgZmlsZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBUTVggWE1MIGZpbGVzCitpbXBvcnRfVE1YX3RpdGxlPVRNWFwgZmlsaW1wb3J0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgZmlsZSBjaG9vc2VyIGZvciBjaG9vc2luZyBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfZmlsZV9kZXNjcmlwdGlvbj1YTElGRlwgZmlsZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgRGlhbG90IHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfdGl0bGU9WExJRkZcIGZpbGltcG9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGNpdHMgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMKK2ltcG9ydF9jb25mbGljdF9wcm9tcHQ9RnJcdTAwRTVnYVwgdmlkXCB2YXJqZVwga29uZmxpa3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIHNwZWNpZnlpbmcgd2hldGhlciBhIGdyb3VwIGZvdW5kIGluIHRoZSB0YXJnZXQgYnV0IG5vdCBmb3VuZCBpbiB0aGUgYWN0aXZlIHJlc291cmNlIGJ1bmRsZSBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIG9yIG5vdAoraW1wb3J0X2RlZmF1bHRfZ3JvdXBfY3JlYXRpb249U2thcGFcIGdydXBwZXJcIHNvbVwgaW50ZVwgZXhpc3RlcmFyXCBpXCBudXZhcmFuZGVcIGJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRvaW4gZm9yIG1hcmtpbmcgdGhlIGluY29taW5nIHZhbHVlcyBhcyB0cmFuc2xhdGVkIG9yIG5vdAoraW1wb3J0X2RlZmF1bHRfdHJhbnNsYXRlZD1NYXJrZXJhXCBzb21cIFx1MDBGNnZlcnNhdHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIG9wdGlvbnMgc3BlY2lmeWluZyB0aGUgbWV0YSBkYXRhIHRvIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCByZXNvdXJjZXMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgaW1wb3J0IHNvdXJjZQoraW1wb3J0X2RlZmF1bHRfdmFsdWVzPVNrXHUwMEY2bnN2XHUwMEU0cmRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBsb2NhbGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgaW4gcXVlc3Rpb24KKyMgQGNvbW1lbnQgSW5zdHJ1Y3Rpb25zIGZvciBwcm9tcHRpbmcgdGhlIHVzZXIgdG8gcmVzb2x2ZSBhIGNvbmZsaWN0IHdoZW4gaW1wb3J0aW5nIHJlc291cmNlcyBmcm9tIGEgbG9jYWxlIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdF9jaG9vc2U9S29kbmluZ2VuXCB7MH1cIGZpbm5zXCBlai5cIFZcdTAwRTRsalwgZXR0XCB2YWxcIGZcdTAwRjZyXCBhdHRcIGZpeGFcIGtvbmZsaWt0ZW4sXCBlbGxlclwgYXZicnl0XCBmXHUwMEY2clwgYXR0XCBpZ25vcmVyYS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCBhIG5ldyBmaWxlIGlzIGdlbmVyYXRlZCwgYnV0IG5vdCBwb3B1bGF0ZWQKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX2VtcHR5PVNrYXBhXCBlblwgbnksXCB0b21cIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCBhIG5ldyBmaWxlIGlzIGdlbmVyYXRlZCBhbmQgcG9wdWxhdGVkIHdpdGggYWxsIHRoZSBleGlzdGluZyByZXNvdXJjZXMKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX3BvcHVsYXRlPVNrYXBhXCBlblwgbnlcIHJlc3Vyc2ZpbFwgb2NoXCBmeWxsXCBpXCBtZWRcIGJhcy1rbGFzc2Vuc1wgcmVzdXJlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIHRoZSBjb25mbGljdHMgYXJlIGlnbm9yZWQKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2lnbm9yZT1Ta2lwcGFcIG9jaFwgaWdub3JlcmFcIGFsbGFcIHJlc3Vyc2VyXCBmclx1MDBFNW5cIGxva2FsZXJcIHNvbVwgaW50ZVwgZXhpc3RlcmFyXCBpXCBudXZhcmFuZGVcIGJ1bnQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBzZWN0aW9uIGxpc3Rpbmcgb3B0aW9ucyBmb3Igd2hhdCB0byBkbyB3aGVuIGFuIGltcG9ydGVkIHZhbHVlIGV4aXN0cyBpbiBhIGxvY2FsZSBub3QgZGVmaW5lZCBpbiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdHM9UmVzdXJzZmlsXCBzYWtuYXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU2VsZWN0aW9uIG9mIHRoZSBkZWZhdWx0IGdyb3VwLiBBIGxpc3Qgb2YgZ3JvdXBzIHdpbGwgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGlzIHJlc291cmNlIGluIGEgQ29tYm9Cb3gKK2ltcG9ydF9pbnNlcnRfZ3JvdXA9TFx1MDBFNGdnXCB0aWxsXCBncnVwcFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgdHlwZXMgb2YgZmlsZXMgYWNjZXB0ZWQgZm9yIHRoaXMgaW1wb3J0IHR5cGUKK2ltcG9ydF9qYXZhX2ZpbGVfZGVzY3JpcHRpb249SmF2YVwgTGlzdFJlc291cmNlQnVuZGxlXCBCYXNcIGtsYXNzZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGRpYWxvZyBwcm9tcHRpbmcgZm9yIGltcG9ydCBmcm9tIGphdmEgY2xhc3NlcworaW1wb3J0X2phdmFfdGl0bGU9SmF2YVwgTGlzdFJlc291cmNlQnVuZGxlXCBLbGFzc1wgaW1wb3J0ZXJpbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgaW5kaWNhdGluZyBzZWN0aW9uIGNvbnRhaW5pbmcgdXNlciBvcHRpb25zCitpbXBvcnRfb3B0aW9ucz1JbXBvcnRlcmluZ3NpbnN0XHUwMEU0bGxuaW5nYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3Igc2VsZWN0aW9uIG9mIHJlc291cmNlIGJ1bmRsZXMgc3RvcmVkIGluIC5wcm9wZXJ0aWVzIGZpbGVzCitpbXBvcnRfcHJvcGVydGllc19maWxlX2Rlc2NyaXB0aW9uPVJlc3Vyc2J1bnRcIGJhc2tsYXNzZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIChjcmVhdGVkIG9yIG5vdCBieSBSQk1hbmFnZXIpCitpbXBvcnRfcHJvcGVydGllc190aXRsZT1SZXN1cnNidW50XCBpbnN0XHUwMEU0bGxuaW5nc2ltcG9ydGVyaW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MX0gRW5jb2Rpbmcgb2YgdGhlIHJlc291cmNlIHZhbHVlIHdpdGggYSBjb25mbGljdAorIyBAezB9IFRoZSBrZXkgdmFsdWUgb2YgdGhlIHJlc291cmNlIGluIGNvbmZsaWN0CisjIEBjb21tZW50IFRoaXMgaXMgYSB3YXJuaW5nIGFuZCBpbnN0cnVjdGlvbiBmb3Igd2hlbiBhIHJlc291cmNlIGNvbmZsaWN0IG9jY3VycyBkdXJpbmcgYW4gaW1wb3J0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlPU55Y2tlbG5cIHswfVwgZmlubnNcIHJlZGFuXCBpXCB7MX1cIHJlc3Vyc2J1bnQuXCBWXHUwMEU0bGpcIGV0dFwgYWx0ZXJuYXRpdlwgZlx1MDBGNnJcIGF0dFwgbFx1MDBGNnNhXCBwcm9ibGVtZXQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHRyYW5zbGF0aW9uIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UgaXRlbQorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgYWNjb3JkaW5nIHRvIHRoZSBpbXBvcnQgZmlsZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV9zb3VyY2U9SW1wb3J0XHUwMEY2dmVyc1x1MDBFNHR0bmluZ1w6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdHJhbnNsYXRpb24gdmFsdWUgaGVsZCBieSB0aGUgYWN0aXZlIHJlc291cmNlIGJ1bmRsZSBkdXJpbmcgYSB0cmFuc2xhdGlvbiByZXNvdXJjZSBjb25mbGljdAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV90YXJnZXQ9UmVzdXJzYnVudFwgXHUwMEY2dmVyc1x1MDBFNHR0bmluZ1w6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgcmVzb3VyY2UgY29uZmxpY3RzIGJ5IGlnbm9yaW5nIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZT1JZ25vcmVyYVwga29uZmxpdGVuXCBvY2hcIGxcdTAwRTRtbmFcIG9yaWdpbmFscmVzdXJzZW5cIG9cdTAwRTRuZHJhZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGljdHMgYnkgdXNpbmcgdGhlIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZT1Ta3JpdlwgXHUwMEY2dmVyXCByZXN1cnNlblwgbWVkXCB2XHUwMEU0cmRlblwgZnJcdTAwRTVuXCBpbXBvcnRlcmFkXCBmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgbGlzdGluZyBvcHRpb25zIGZvciByZXNvbHZpbmcgY29uZmxpY3RzIGJldHdlZW4gcmVzb3VyY2VzCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RzPVJlc3Vyc1wga29uZmxpa3RlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZQorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZSBmb3IgdGhlIGltcG9ydAoraW1wb3J0X3NvdXJjZV9maWxlPUtcdTAwRTRsbGZpbFw6XCB7MH0KKworIworIyBAZ3JvdXAgTWVudSBJdGVtcworIworIyBAZ3JvdXBDb21tZW50IFRoZXNlIHJlc291cmNlcyByZXByZXNlbnQgYWxsIG9mIHRoZSBtZW51IGFuZCBtZW51IGl0ZW0gdGl0bGVzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIG1lbnUgdGl0bGUgY292ZXJpbmcgY29weWluZywgcGFzdGluZywgZGVsZXRpbmcgb2YgaXRlbXMKK21lbnVfZWRpdD1FZGl0ZXJhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHk9S29waWVyYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jb3B5X3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXQ9VGFcIGJvcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY3V0X3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9kZWxldGU9UmFkZXJhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZV90cmlnZ2VyPWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGU9S2xpc3RyYVwgaW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGVfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2VkaXQnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZWRpdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgdGhlIG9wZW5pbmcsIHNhdmluZywgZXRjLiBkb2N1bWVudHMgYW5kIGV4aXRpbmcgdGhlIHByb2dyYW0KK21lbnVfZmlsZT1GaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgcmVzb3VyY2UgYnVuZGxlcyBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cworbWVudV9maWxlX2V4cG9ydD1FeHBvcnRlcmFcIHJlc3Vyc2J1bnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAyLTA1LTE3IEBtb2RpZmllZCAyMDAyLTA1LTE3IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgQWJsaXR5IHRvIGV4cG9ydCB0byBJQ1UgUmVzb3VyY2UgQnVuZGxlIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X0lDVT1JQ1VcIEZpbGVyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMi0wNS0xNyBAbW9kaWZpZWQgMjAwMi0wNS0xNyBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9JQ1VfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFibGl0eSB0byBleHBvcnQgdG8gVE1YIFhNTCBmaWxlcworbWVudV9maWxlX2V4cG9ydF9UTVg9VE1YXCBGaWxlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfVE1YX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCB4CittZW51X2ZpbGVfZXhwb3J0X1hMRj1YTElGRlwgRmlsZXIuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgdG8gamF2YSBmaWxlcyB0aGF0IGNvbXBpbGUgdG8gYmUgTGlzdFJlc291cmNlQnVuZGxlIGNsYXNzIGV4dGVuc2lvbnMKK21lbnVfZmlsZV9leHBvcnRfamF2YT1Lb21wYXRpYmxhXCBKYXZhXCBmaWxlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRXhwb3J0IGFiaWxpdHkgdG8gcHJvcGVydGllcyBmaWxlcyBtaW51cyB0aGUgbWV0YWRhdGEKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllcz1NaW5pbWFsXCBpbnN0XHUwMEU0bGxuaW5nc2ZpbC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllc190cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGltcG9ydCBhbmQgbWVyZ2luZyBhbm90aGVyIHJlc291cmNlIGZpbGUgd2l0aCB0aGUgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfaW1wb3J0PUltcG9ydGVyYVwgcmVzdXJzZ3J1cHBcIGZyYW5cIGZpbC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJsaWl0eSBmcm9tIFhNTCBUTVggZG9jdW1lbnRzCittZW51X2ZpbGVfaW1wb3J0X1RNWD1UTVhcIGRvY3VtZW50Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gWE1MIFhMSUZGICgueGxmKSBmaWxlcworbWVudV9maWxlX2ltcG9ydF9YTEY9WExJRkZcIGRvY3VtZW50Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IFgKK21lbnVfZmlsZV9pbXBvcnRfWExGX3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIGphdmEgY2xhc3NlcyAoTGlzdFJlc291cmNlQnVuZGxlKQorbWVudV9maWxlX2ltcG9ydF9qYXZhPUxpc3RSZXNvdXJjZUJ1bmRsZVwgSmF2YVwgS2xhc3Nlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIG5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCittZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXM9RW5rZWxcIHJlc3Vyc2J1bnQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXNfdHJpZ2dlcj1TCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF90cmlnZ2VyPW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9uZXc9TnlcIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX25ld190cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCittZW51X2ZpbGVfb3Blbj1PcHBuYVwgcmVzdXJzZ3J1cHAuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfb3Blbl90cmlnZ2VyPW8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjbG9zaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9maWxlX3F1aXQ9QXZzbHV0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK21lbnVfZmlsZV9xdWl0X3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfc2F2ZT1TcGFyYVwgcmVzdXJzZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZV90cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBzYXZpbmcgYSByZXNvdXJjZSBidW5kbGUgdG8gYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUKK21lbnVfZmlsZV9zYXZlYXM9U3BhcmFcIHJlc3Vyc2dydXBwXCBzb20uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZWFzX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9maWxlJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2ZpbGVfdHJpZ2dlcj1mCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGhlbHAgaW5mb3JtYXRpb24gYW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyYW0KK21lbnVfaGVscD1IamFscAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBNZW51IGl0ZW0gd2hpY2ggYnJpbmdzIHVwIGEgZGlhbG9nIGRlc2NyaWJpbmcgdGhlIGFwcGxpY2F0aW9uCittZW51X2hlbHBfYWJvdXQ9T21cIFJCTWFuYWdlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfaGVscF9hYm91dF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfaGVscCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9oZWxwX3RyaWdnZXI9aAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBvcHRpb25zIHN1Y2ggYXMgY3JlYXRpbmcgbmV3IHJlc291cmNlcywgZ3JvdXBzLCBhbmQgcmVzb3VyY2UgZmlsZXMKK21lbnVfb3B0aW9ucz1JbnN0YWxsbmluZ2FyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgaXRlbQorbWVudV9vcHRpb25zX2FkZGVudHJ5PVNrYXBhXCBueVwgb3ZlcnNhdHRuaW5nLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGVudHJ5X3RyaWdnZXI9aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZS9jb3VudHJ5L3ZhcmlhbnQKK21lbnVfb3B0aW9uc19hZGRmaWxlPVNrYXBhXCBueVwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGZpbGVfdHJpZ2dlcj1mCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK21lbnVfb3B0aW9uc19hZGRncm91cD1Ta2FwYVwgbnlcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGdyb3VwX3RyaWdnZXI9ZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBlZGl0aW5nIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorbWVudV9vcHRpb25zX3ByZWZlcmVuY2VzPVBlcnNvbmxpZ2FcIGluc3RhbGxuaW5nYXIuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3ByZWZlcmVuY2VzX3RyaWdnZXI9cAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgbWFrZXMgdmlzaWJsZSB0aGUgcHJvamVjdCB2aWV3ZXIKK21lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcj1PcGVuXCBQcm9qZWN0XCBWaWV3ZXIKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXI9dgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9vcHRpb25zJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X29wdGlvbnNfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGFkZGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgdG8gdGhlIHByb2plY3QKK21lbnVfdHJlZV9hZGRfcHJvamVjdF9idW5kbGU9QWRkXCBSZXNvdXJjZVwgQnVuZGxlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgZGVsZXRpbmcgcGVybWFuZW50bHkgYSByZXNvdXJjZSBmaWxlCittZW51X3RyZWVfZGVsZXRlPVRhXCBib3J0XCByZXN1cnNcIGZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHJlbW92aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSB0cmVlIHZpZXcgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorbWVudV90cmVlX2hpZGU9R1x1MDBGNm1cIHJlc3Vyc1wgZmlsCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHByb2plY3QKK21lbnVfdHJlZV9uZXdfcHJvamVjdD1OZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuLi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CittZW51X3RyZWVfb3Blbl9wcm9qZWN0PU9wZW5cIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuLi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBwcm9qZWN0IHRyZWUKK21lbnVfdHJlZV9yZW1vdmVfcHJvamVjdF9idW5kbGU9UmVtb3ZlXCBmcm9tXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igc2F2aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgYnVuZGxlIGZpbGUKK21lbnVfdHJlZV9zYXZlPVNwYXJhXCByZXN1cnNcIGZpbAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBzYXZpbmcgY2hhbmdlcyB0byB0aGUgcmVzb3VyY2UgcHJvamVjdCBmaWxlLCBub3QgdGhlIHJlc291cmNlIGJ1bmRsZXMgdGhlbXNlbHZlcyB3aXRoaW4gdGhlIHByb2plY3QKK21lbnVfdHJlZV9zYXZlX3Byb2plY3Q9U2F2ZVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdFwgRmlsZS4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBmb3Igc2VsZWN0aW5nIGEgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIHByb2plY3QgdHJlZSB0byBiZSBlZGl0ZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSB0cmVlCittZW51X3RyZWVfc2VsZWN0X3Byb2plY3RfYnVuZGxlPVdvcmtcIHdpdGhcIHRoaXNcIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgY2hhbmdpbmcgdGhlIGRpc3BsYXkgYmVpbmcgc2VlbiBieSB0aGUgdXNlcgorbWVudV92aWV3PVZpc2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgdGFrZXMgeW91IGRpcmVjdGx5IHRvIHRoZSBzdGF0aXN0aWNzIHBhbmVsIGZvciB0aGUgZW50aXJlIGJ1bmRsZQorbWVudV92aWV3X3N0YXRpc3RpY3M9U3RhdGlzdGlrXCBmb3JcIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV92aWV3X3N0YXRpc3RpY3NfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X3ZpZXcnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfdmlld190cmlnZ2VyPXYKKworIworIyBAZ3JvdXAgUHJvamVjdCBQYW5lbAorIworIyBAZ3JvdXBDb21tZW50IFBhbmVsIGFzc29jaWF0ZWQgd2l0aCBQcm9qZWN0IGVkaXRpbmcKKworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCisjIEBjb21tZW50IExhYmVsIGluZGljYXRvciBhc3NvY2lhdGluZyBhIHRleHQgYm94IGNvbnRhaW5pbmcgYSB0cmFuc2xhdGlvbiB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgdGhlIHRyYW5zbGF0aW9uIGNvbWVzIGZyb20KK3Byb2plY3RfcGFuZWxfYnVuZGxlPVJlc291cmNlXCBCdW5kbGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IE5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorIyBAY29tbWVudCBTcGVjaWFsIGluZGljYXRvciBvZiB0aGUgcmVzb3VyY2UgaXRlbSByZXNvdXJjZSBidW5kbGUgd2hlbiB0aGUgaXRlbSBpcyB1bnRyYW5zbGF0ZWQKK3Byb2plY3RfcGFuZWxfYnVuZGxlX3VudHJhbnNsYXRlZD1SZXNvdXJjZVwgQnVuZGxlXDpcIHswfVwgKFVudHJhbnNsYXRlZCkKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IExhYmVsIHRleHQgbWFya2luZyB0aGUgbGluZSBhYm92ZSBvciB0byB0aGUgbGVmdCBvZiBhIHJlc291cmNlIGNvbW1lbnQKK3Byb2plY3RfcGFuZWxfY29tbWVudD1CYXNlXCBDbGFzc1wgUmVzb3VyY2VcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBmb3IgYSBjb21tZW50IHdoZW4gbm9uZSBpcyBmb3VuZCBmb3IgYSByZXNvdXJjZQorcHJvamVjdF9wYW5lbF9jb21tZW50X25vbmU9Tm9cIGNvbW1lbnRcIHN1cHBsaWVkCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgc2hvd24gb24gdGhlIHByb2plY3QgcGFuZWwgZm9yIGNvbW1pdHRpbmcgY2hhbmdlIHRvIG9uZSByZXNvdXJjZSBvbmx5Citwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b249Q29tbWl0XCBDaGFuZ2UKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3Igc2F2aW5nIGFsbCBvZiB0aGUgcmVzb3VyY2VzIGRpc3BsYXllZC4gVGhpcyBtZWFucyBtdWx0aXBsZSByZXNvdXJjZSBmaWxlcyBnZXQgc2F2ZWQuCitwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b25fYWxsPUNvbW1pdFwgQWxsXCBSZXNvdXJjZVwgQ2hhbmdlcworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGVmYXVsdCB0aXRsZSBzaG93biBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGVuIG5vIHBhcnRpY3VsYXIgcmVzb3VyY2UgaGFzIGJlZW4gc2VsZWN0ZWQKK3Byb2plY3RfcGFuZWxfZGVmYXVsdF90aXRsZT1Qcm9qZWN0XCBSZXNvdXJjZVwgRWRpdGluZworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGV4dCBmaWVsZCBtYXJrZXIgZm9yIHRoZSB0cmFuc2xhdGlvbiBvZiBhIHJlc291cmNlIHdoZW4gdGhhdCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIGVuY29kaW5nIGZpbGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoCitwcm9qZWN0X3BhbmVsX2l0ZW1faW5oZXJpdHM9PE5vXCBUcmFuc2xhdGlvblw6XCBSZXNvdXJjZVwgSW5oZXJpdHNcIGZyb21cIHBhcmVudD4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UKKyMgQGNvbW1lbnQgVGl0bGUgb24gdGhlIHByb2plY3QgcGFuZWwgd2hpbGUgYSByZXNvdXJjZSBpcyBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF90aXRsZT1Qcm9qZWN0XCBSZXNvdXJjZVwgRWRpdGluZ1w6XCB7MH0KKworIworIyBAZ3JvdXAgUkJSZXBvcnRlcgorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3IgdGhlIFJCUmVwb3J0ZXIgYXBwbGljYXRpb24KKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBzZWxlY3RpbmcgZmlsZSBsb2NhdGlvbnMgZm9yIGlucHV0L291dHB1dAorcmVwb3J0ZXJfYnV0dG9uX2Nob29zZT1WXHUwMEU0bGouLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBpbmRpY2F0aW5nIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBzaG91bGQgb2NjdXIgaW1tZWRpYXRlbHkKK3JlcG9ydGVyX2J1dHRvbl9ub3c9VXBkYXRlcmFcIG51Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0yOSBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3Igc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzIGFzIGRlZmF1bHQKK3JlcG9ydGVyX2J1dHRvbl9zYXZlX2RlZmF1bHRzPVNwYXJhXCBpbnN0XHUwMEU0bGxuaW5nYXJcIHNvbVwgc2tcdTAwRjZuc3ZcdTAwRTRyZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdG8gYWN0aXZhdGUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RhcnQ9U3RhcnRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdG8gZGVhY3RpdmUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RvcD1TdG9wcGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IExldmVsIG9mIGRldGFpbDogbW9zdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUKK3JlcG9ydGVyX2RldGFpbF9oaWdoPUhcdTAwRjZnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIGEgc2VsZWN0aW9uIG9wdGlvbiBvZiB0aGUgbGV2ZWwgb2YgZGV0YWlsIGluIHJlcG9ydGluZworcmVwb3J0ZXJfZGV0YWlsX2xldmVsPURldGFsam5pdlx1MDBFNVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBMZXZlbCBvZiBkZXRhaWw6IHN0YW5kYXJkCityZXBvcnRlcl9kZXRhaWxfbm9ybWFsPU5vcm1hbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogSFRNTAorcmVwb3J0ZXJfZm9ybWF0X2h0bWw9SFRNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQgdHlwZTogcGxhaW4gdGV4dAorcmVwb3J0ZXJfZm9ybWF0X3RleHQ9VGV4dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQ6IFhNTAorcmVwb3J0ZXJfZm9ybWF0X3htbD1YTUwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgZmlsZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRvIHJlcG9ydCBvbgorcmVwb3J0ZXJfaW5wdXRfYnVuZGxlPVJlc3Vyc2J1bnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiB0aGF0IHJlcG9ydGluZyB3aWxsIGhhcHBlbiBhdCBhIHNwZWNpaWZpZWQgdGltZSBvZiBkYXkuIEZvbGxvd2VkIGJ5IGEgdGltZSBhbmQgZGF5IG9wdGlvbi4KK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWQ9UmFwcG9ydGVyYVwgdmlkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2Ygc2VxdWVudGlhbCByZXBvcnRpbmcgcGF1c2VkIGZvciBhIGRlZmluZWQgaW50ZXJ2YWwgYmV0d2VlbiByZXBvcnRpbmcuIEltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGFuZCBhIHVuaXQgb2YgbWVhc3VyZSBvZiB0aW1lCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsPVJhcG9ydGVyYVwgdmFyamUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gRGF0ZS9UaW1lIG9mIGxhc3QgcmVwb3J0IGdlbmVyYXRpb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgdGltZSBvZiB0aGUgbGFzdCByZXBvcnQKK3JlcG9ydGVyX2xhc3RfcmVwb3J0PVNlbmFzdGVcIHJhcHBvcnRcOlwgezAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gRGF0ZS9UaW1lIG9mIG5leHQgcmVwb3J0CisjIEBjb21tZW50IEluZGljYXRpb24gb2Ygd2hlbiB0aGUgbmV4dCByZXBvcnQgd2lsbCBiZSBnZW5lcmF0ZWQKK3JlcG9ydGVyX25leHRfcmVwb3J0PU5cdTAwRTRzdGFcIHJhcHBvcnRcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHJlcG9ydHMgYXJlIHBsYWNlZAorcmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeT1VdGZvbGRlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIG91dHB1dCBmb3JtYXQKK3JlcG9ydGVyX291dHB1dF9maWxlPUZpbG5hbW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIHNldHRpbmcgaW50ZXJ2YWwgb2YgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9pbnRlcnZhbD1SYXBwb3J0aW50ZXJ2YWxsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgb2YgdGhlIHJlcG9ydGluZworcmVwb3J0ZXJfcGFuZWxfb3B0aW9ucz1SYXBwb3J0XCBpbnN0XHUwMEU0bGxuaW5nYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1YnBhbmVsIHRpdGxlIGZvciBjaG9vc2luZyBvdXRwdXQgZm9ybWF0cyBmb3IgdGhlIHJlcG9ydHMKK3JlcG9ydGVyX3BhbmVsX291dHB1dF9mb3JtYXQ9VXRmb3JtYXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBpbmRpY2F0aW9uIG9mIHJ1bm5pbmcgc3RhdHVzIG9mIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfcGFuZWxfc3RhdHVzPVN0YXR1cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTaG9ydCB0aXRsZSBmb3Igc2VsZWN0aW5nIGEgY29kZSBzY2FuIGNvbmZpZ3VyYXRpb24gZmlsZQorcmVwb3J0ZXJfcGVyZm9ybV9zY2FuPUtvZGFcIGZpbGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBRdWljayBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlcG9ydGVyIGlzIGFjdGl2ZSAocGVyaGFwcyB3YWl0aW5nKQorcmVwb3J0ZXJfc3RhdHVzX3J1bm5pbmc9U3RhcnRhZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUXVpY2sgc3RhdHVzIGluZGljYXRpb24gdGhhdCB0aGUgcmVwb3J0ZXIgaXMgbm90IGFjdGl2ZQorcmVwb3J0ZXJfc3RhdHVzX3N0b3BwZWQ9U3RvcHBhZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZGF5cyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZGF5cz1EYWdhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZXZlcnkgZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9ldmVyeWRheT1WYXJqZVwgZGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBmcmlkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2ZyaWRheT1GcmVkYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGhvdXJzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9ob3Vycz1UaW1tYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IG1pbnV0ZXMgb3B0aW9uCityZXBvcnRlcl90aW1lX21pbnV0ZXM9TWludXRlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgbW9uZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9tb25kYXk9TVx1MDBFNW5kYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHNhdHVyZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zYXR1cmRheT1MXHUwMEY2cmRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgc3VuZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zdW5kYXk9U1x1MDBGNm5kYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHRodXJzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV90aHVyc2RheT1Ub3JzZGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB0dWVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV90dWVzZGF5PVRpc2RhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgd2VkbmVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV93ZWRuZXNkYXk9T25zZGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgYXBwbGljYXRpb24KK3Jlc291cmNlX2J1bmRsZV9yZXBvcnRlcj1SQlJlcG9ydGVyCisKKyMKKyMgQGdyb3VwIFNlYXJjaCBhbmQgUmVwbGFjZQorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBmb3VuZCBvbiB0aGUgc2VhcmNoIHRhYiBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJhbCBzZWFyY2ggdGl0bGUKK3NlYXJjaD1MZXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIG1ha2luZyB0aGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdAorc2VhcmNoX2Nhc2Vfc2Vuc2l0aXZlPUJva3N0YXZza1x1MDBFNG5zbGlnXCBzXHUwMEY2a25pbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBzZWFyY2hpbmcgdGhyb3VnaCByZXNvdXJjZSBjb21tZW50cworc2VhcmNoX2NvbW1lbnRzPUtvbW1lbnRhcmVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiB0aGUgZmllbGQgZm9yIGVudGVyaW5nIHRleHQgdG8gc2VhcmNoIG9uCitzZWFyY2hfZmluZD1IaXR0YVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBzZWxlY3Rpb24gZm9yIHNlYXJjaGluZyBvcHRpb24gdGhyb3VnaCByZXNvdXJjZSBrZXlzCitzZWFyY2hfa2V5cz1SZXN1cnNueWNrbGFyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiB0aGUgZmllbGQgZm9yIGVudGVyaW5nIHRleHQgZm9yIHJlcGxhY2luZyB0aGUgZm91bmQgdmFsdWUKK3NlYXJjaF9yZXBsYWNlPUVyc1x1MDBFNHR0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggdHJhbnNsYXRpb24gdmFsdWVzCitzZWFyY2hfdmFsdWVzPVx1MDBENnZlcnNcdTAwRTR0dG5pbmdhcgorCisjCisjIEBncm91cCBUYWJzCisjCisjIEBncm91cENvbW1lbnQgR1VJIFRhYnMgaW4gdGhlIG1haW4gcGFuZWwKKworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgVGFiYmVkIFBhbmUgb3ZlciB0aGUgdHJlZSBzaG93aW5nIGEgc2luZ2xlIHJlc291cmNlIGJ1bmRsZSBhbmQgaXRzIHZhcmlvdXMgZmlsZXMKK3RhYl9idW5kbGU9QnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUYWIgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2YXJpb3VzIGdyb3VwcyBpbiB0aGUgYnVuZGxlCit0YWJfZ3JvdXBzPUdydXBwZXIKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdVSSBUYWIgZm9yIHRhYiBvdmVyIHRyZWUgc2hvd2luZyBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0Cit0YWJfcHJvamVjdD1Qcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBwYW5lIGFsbG93aW5nIGZvciBzZWFyY2ggYW5kIHJlcGxhY2UgZnVuY3Rpb25zCit0YWJfc2VhcmNoPUxldGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRhYiBmb3Igc3RhdGlzdGljcyBkaXNwbGF5IGZvciBlaXRoZXIgdGhlIFJlc291cmNlIEJ1bmRsZSBhcyBhIHdob2xlIG9yIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgZmlsZXMKK3RhYl9zdGF0aXN0aWNzPVN0YXRpc3RpaworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGFiIGZvciBkaXNwbGF5IG9mIHVudHJhbnNsYXRlZCBpdGVtcyBpbiB0aGUgZGlmZmVyZW50IGxhbmd1YWdlIGZpbGVzCit0YWJfdW50cmFuc2xhdGVkPU9vdmVyc2F0dAorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IENvbHVtbiB0aXRsZSBmb3IgaXRlbSBjb21tZW50cworbGFuZ3VhZ2Vncm91cF9jb2x1bW5fY29tbWVudD1Lb21tZW50YXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IENvbHVtbiB0aXRsZSBmb3IgaXRlbSdzIHJlc291cmNlIGtleQorbGFuZ3VhZ2Vncm91cF9jb2x1bW5fa2V5PVJlc3Vyc255Y2tlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitsYW5ndWFnZWdyb3VwX2NvbHVtbl90cmFuc2xhdGlvbj1PdmVyc2F0dG5pbmcKKworIworIyBAZ3JvdXAgVHJhbnNsYXRpb24gRmlsZSBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gdGhlIGxhbmd1YWdlIGZpbGUgc3RhdGlzdGljcyBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEEgY29tbWVudCBnaXZlbiB0byB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb21tZW50PUtvbW1lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgY291bnRyeSBiZWluZyBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfY291bnRyeT1MYW5kXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2l0ZW1fY291bnQ9QW50YWxcIHJlc3Vyc2VyXCBpXCBkZW5cIGhhclwgZmlsZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19sYW5ndWFnZT1TcHJha1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgbmFtZSBvZiBhIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgdGhlIHRyYW5zbGF0aW9ucyBpbiB0aGlzIGxhbmd1YWdlIGZpbGUKK2xhbmd1YWdlc3RhdHNfbWFuYWdlcj1SZXN1cnNmaWxcIGFnYXJlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBuYW1lIGdpdmVuIHRvIHRoZSBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RpdGxlPVJlc3Vyc1wgdGl0ZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTnVtYmVyIG9mIHJlc291cmNlcyBuZWVkaW5nIHRyYW5zbGF0aW9uIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RyYW5zbGF0aW9uX2NvdW50PUFudGFsXCBvb3ZlcnNhdHRhXCByZXN1cnNzYWtlclwgaVwgZGVuXCBoYXJcIGZpbGVuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZS9yZWdpb24gdmFyaWFudCBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdmFyaWFudD1WYXJpYW50XCBcOgorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBjb2x1bW4gdGl0bGUgZm9yIGdyb3VwIG5hbWVzIG9mIGl0ZW1zIGluIHRoZSByb3dzCitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2dyb3VwPUdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUga2V5IG9mIHRoZSBpdGVtIGEgcm93CitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleT1SZXN1cnNueWNrZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSB0cmFuc2xhdGVkIHZhbHVlIG9mIGFuIGl0ZW0gaW4gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fdHJhbnNsYXRpb249T3ZlcnNhdHRuaW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGNvdmVyaW5nIGJ1dHRvbnMgdGhhdCBhcHBseSB0byBhIHNlbGVjdGVkIHJlc291cmNlIGZyb20gYSB0YWJsZSBvZiByZXNvdXJjZXMKK2xhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucz1JbnN0XHUwMEU0bGxuaW5nYXJcIGZcdTAwRjZyXCB2YWxkXCByZXN1cnMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvcHJlZmVyZW5jZXMucHJvcGVydGllcyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvcHJlZmVyZW5jZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWQ3NDJhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKKyNSQk1hbmFnZXIgUHJlZmVyZW5jZXMKKyNXZWQgRGVjIDE5IDE0OjA4OjU1IFBTVCAyMDAxCityZXBvcnRlcl9mb3JtYXRfaHRtbF9maWxlPXJlcG9ydC5odG1sCit1c2VybmFtZT1Vbmtub3duCityZXBvcnRlcl9mb3JtYXRfdGV4dF9kZXRhaWw9SGlnaAorcmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWw9SGlnaAorcmVwb3J0ZXJfZm9ybWF0X2htdGxfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2VuYWJsZWQ9WWVzCityZXBvcnRlcl9mb3JtYXRfeG1sX2ZpbGU9cmVwb3J0LnhtbAorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9ob3VyPTEKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWU9MQorcmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF91bml0cz1Ib3VycworcmVwb3J0ZXJfcGVyZm9ybV9zY2FuPVllcworcmVwb3J0ZXJfZm9ybWF0X3RleHRfZmlsZT1yZXBvcnQudHh0CityZXBvcnRlcl9mb3JtYXRfeG1sX2VuYWJsZWQ9WWVzCityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX2RheT1TYXR1cmRheQorbG9jYWxlPWVuCityZXBvcnRlcl9pbnRlcnZhbD1TZXF1ZW50aWFsCityZWNlbnRmaWxlbG9jMz0KK3JlY2VudGZpbGVsb2MyPQorcmVjZW50ZmlsZWxvYzE9CityZWNlbnRmaWxlbG9jMD0KK3JlcG9ydGVyX3NjYW5fZmlsZT0uL3JibWFuYWdlcl9zY2FubmVyLnhtbAorcmVwb3J0ZXJfZm9ybWF0X2h0bWxfZW5hYmxlZD1ZZXMKK3JlY2VudGZpbGVpZDM9CityZWNlbnRmaWxlaWQyPQorcmVjZW50ZmlsZWlkMT0KK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfbWludXRlPTAwCityZWNlbnRmaWxlaWQwPQorcmVwb3J0ZXJfZm9ybWF0X3RleHRfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2Jhc2VfY2xhc3NfZmlsZT0KK3JlcG9ydGVyX291dHB1dF9kaXJlY3Rvcnk9CityZXBvcnRlcl9mb3JtYXRfaHRtbF9kZXRhaWw9SGlnaApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2xpY2Vuc2UuaHRtbCBiL3VuaWNvZGV0b29scy9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5NmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0bWw+CisKKzxoZWFkPgorPHRpdGxlPklDVTRKIGxpY2Vuc2UgLSBJQ1U0SiAxLjMuMSBhbmQgbGF0ZXI8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBCR0NPTE9SPSIjZmZmZmZmIj4KKzxoMj5JQ1U0SiBsaWNlbnNlIC0gSUNVNEogMS4zLjEgYW5kIGxhdGVyPC9oMj4KKworPHA+Q09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRTwvcD4KKworPHA+CitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKzwvcD4KKzxwPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzwvcD4KKzxwPgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCit0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKzwvcD4KKzxwPgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorPC9wPgorPHA+CitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorPC9wPgorCis8aHI+Cis8c21hbGw+CitBbGwgdHJhZGVtYXJrcyBhbmQgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKzwvc21hbGw+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvcmVhZG1lLmh0bWwgYi91bmljb2RldG9vbHMvcmVhZG1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3MzQxMwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9yZWFkbWUuaHRtbApAQCAtMCwwICsxLDQwMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8dGl0bGU+SUNVJ3MgVW5pY29kZSBUb29scyBSZWFkIE1lPC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJDT1BZUklHSFQiIGNvbnRlbnQ9CisgICAgIkNvcHlyaWdodCAoYykgMjAwNC0yMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIgLz4KKzxzdHlsZT4KKzwhLS0KK2xpICAgICAgICAgICB7IG1hcmdpbi10b3A6IDAuNWVtOyBtYXJnaW4tYm90dG9tOiAwLjVlbSB9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDE+VW5pY29kZVRvb2xzPC9oMT4KKzxwPlRoaXMgZmlsZSBwcm92aWRlcyBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIGFuZCBydW5uaW5nIHRoZSBVbmljb2RlVG9vbHMsIHdoaWNoPGJyPgorY2FuIGJlIHVzZWQgdG86PC9wPgorPHVsPgorICA8bGk+YnVpbGQgdGhlIERlcml2ZWQgVW5pY29kZSBmaWxlcyBpbiB0aGUgVUNEIChVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSksPC9saT4KKyAgPGxpPmJ1aWxkIHRoZSB0cmFuc2Zvcm1lZCBVQ0EgKFVuaWNvZGUgQ29sbGF0aW9uIEFsZ29yaXRobSkgZmlsZXMgbmVlZGVkIGJ5IElDVS48L2xpPgorICA8bGk+cnVuIGNvbnNpc3RlbmN5IGNoZWNrcyBvbiBiZXRhIHJlbGVhc2VzIG9mIHRoZSBVQ0QgYW5kIHRoZSBVQ0EuPC9saT4KKyAgPGxpPmJ1aWxkIDQgY2hhcnQgZm9sZGVycyBvbiB0aGUgdW5pY29kZSBzaXRlPC9saT4KKzwvdWw+Cis8cD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PGI+V0FSTklORyEhPC9iPjwvZm9udD48L3A+Cis8dWw+CisgIDxsaT5UaGlzIGlzIE5PVCBwcm9kdWN0aW9uIGxldmVsIGNvZGUsIGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBpbiBwcm9ncmFtcy48L2xpPgorICA8bGk+VGhlIEFQSSBpcyBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZSwgYW5kIHdpbGwgbm90IGJlIG1haW50YWluZWQuPC9saT4KKyAgPGxpPlRoZSBzb3VyY2UgaXMgdW5jb21tZW50ZWQsIGFuZCBoYXMgbWFueSB3YXJ0czsgc2luY2UgaXQgaXMgbm90IHByb2R1Y3Rpb24gY29kZSwgaXQgaGFzIG5vdCAKKyAgYmVlbiB3b3J0aCB0aGUgdGltZSB0byBjbGVhbiBpdCB1cC48L2xpPgorICA8bGk+SXQgd2lsbCBwcm9iYWJseSBub3Qgd29yayBvbiBVbml4IG9yIE1hYyB3aXRob3V0IGNoYW5naW5nIHRoZSBmaWxlIHNlcGFyYXRvci48L2xpPgorICA8bGk+Q3VycmVudGx5IGl0IHVzZXMgaGFyZC1jb2RlZCBkaXJlY3RvcnkgbmFtZXMuPC9saT4KKyAgPGxpPlRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgVUNEIG11c3QgYmUgY29waWVkIHRvIGEgbG9jYWwgZGlyZWN0b3J5LCBhcyBkZXNjcmliZWQgCisgIGJlbG93LjwvbGk+Cis8L3VsPgorPGgyPkluc3RydWN0aW9uczo8L2gyPgorPGgzPjAuIFlvdSB3aWxsIG5lZWQgdG8gZ2V0IElDVTRKIG9uIHlvdXIgc3lzdGVtLCB1c2luZyBDVlMuPC9oMz4KKzxwPlRoZSByZXN0IG9mIHRoaXMgd2lsbCBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBzZXQgdXAgQ1ZTIHNvIHRoYXQgeW91IGxvYWQgdGhlIElDVTRKIHByb2plY3QgaW50byAKK0M6XElDVTRKPGJyPgorPGJyPgorWW91IG5lZWQgYm90aCB0aGUgbWFpbiBpY3U0aiBhbmQgYSBzdWJwcm9qZWN0IGNhbGxlZCB1bmljb2RldG9vbHMuIFNlZToKKzxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9zb2Z0d2FyZS9nbG9iYWxpemF0aW9uL2ljdS9yZXBvc2l0b3J5LmpzcCI+CitodHRwOi8vd3d3LmlibS5jb20vc29mdHdhcmUvZ2xvYmFsaXphdGlvbi9pY3UvcmVwb3NpdG9yeS5qc3A8L2E+LiBJbnNpZGUgdW5pY29kZXRvb2xzLCBsb29rIGF0IGNvbS9pYm0vdGV4dC4gVGhlIAorbWFpbiBkaXJlY3RvcmllcyBvZiBpbnRlcmVzdCBhcmUgVUNELCBVQ0EgYW5kIHV0aWxpdHkuPC9wPgorPGg0PjBhLiBJZiB5b3UgYXJlIHVzaW5nIEVjbGlwc2UgZm9yIHlvdXIgSURFLCBsb29rIGF0IHRoZSBpbnN0cnVjdGlvbnMgb24KKzxhIGhyZWY9Imh0dHA6Ly9pY3Uuc291cmNlZm9yZ2UubmV0L2RvY3MvZWNsaXBzZV9ob3d0by9lY2xpcHNlX2hvd3RvLmh0bWwiPgoraHR0cDovL2ljdS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9lY2xpcHNlX2hvd3RvL2VjbGlwc2VfaG93dG8uaHRtbDwvYT4gPC9oND4KKzxwPlNldCB1cCBFY2xpcHNlIHRvIGJ1aWxkIHR3byBwcm9qZWN0czogSUNVNEogYW5kIFVuaWNvZGVUb29sczo8YnI+Cis8YnI+Cis8Yj5Qcm9qZWN0IE5hbWU6IDwvYj5JQ1U0Sjxicj4KKzxiPkRpcmVjdG9yeTogPC9iPkM6XElDVTRKXGljdTRqPGJyPgorPGI+RGVmYXVsdCBvdXRwdXQgZm9sZGVyID0gPC9iPklDVTRKL2NsYXNzZXM8YnI+Cis8YnI+Cis8Yj5Qcm9qZWN0IE5hbWU6IDwvYj51bmljb2RldG9vbHM8YnI+Cis8Yj5DcmVhdGUgcHJvamVjdCBmcm9tIGV4aXN0aW5nIHNvdXJjZTogPC9iPkM6XElDVTRKXHVuaWNvZGV0b29sczxicj4KKzxiPkRlZmF1bHQgT3V0cHV0IEZvbGRlcjogPC9iPnVuaWNvZGV0b29scy9jbGFzc2VzPGJyPgorPGJyPgorQWZ0ZXIgRWNsaXBzZSBpcyBzZXQgdXAgd2l0aCB0aGVzZSwgZXhjbHVkZSBjZXJ0YWluIGZpbGVzIGZyb20gdW5pY29kZXRvb2xzOjxicj4KKzxicj4KK1JpZ2h0LUNsaWNrIFVuaWNvZGVUb29scyAmZ3Q7IFByb3BlcnRpZXMgJmd0OyBKYXZhIEJ1aWxkIFBhdGggJmd0OyBFeGNsdXNpb25zPGJyPgorY29tL2libS9yYm0vPGJyPgorY29tL2libS90ZXh0L3V0aWxpdHkvVW5pY29kZU1hcEludC5qYXZhPGJyPgorY29tL2libS90ZXh0L3V0aWxpdHkvVGVzdFV0aWxpdHkuamF2YTxicj4KK2NvbS9pYm0vdGV4dC9VQ0QvR2VuZXJhdGVUaGFpQnJlYWtzLW9sZC5qYXZhLzxicj4KK2NvbS9pYm0vdGV4dC9VQ0QvUHJvY2Vzc1VuaWhhbi5qYXZhLzxicj4KK2NvbS9pYm0vdGV4dC9VQ0EvV3JpdGVIVE1MQ29sbGF0aW9uLmphdmEvPGJyPgorPGJyPgorVW5pY29kZVRvb2xzIG11c3QgYWxzbyBpbmNsdWRlIHRoZSBJQ1U0SiBwcm9qZWN0LCB3aXRoPGJyPgorPGJyPgorUmlnaHQtQ2xpY2sgVW5pY29kZVRvb2xzICZndDsgUHJvcGVydGllcyAmZ3Q7IEphdmEgQnVpbGQgUGF0aCAmZ3Q7IFByb2plY3RzPC9wPgorPGgzPjEuIEluIFVDRCwgeW91IG11c3QgZWRpdCBVQ0RfVHlwZXMuamF2YSBhdCB0aGUgdG9wLCB0byBzZXQgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgYnVpbGQ6PC9oMz4KKzxwPnB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfRElSID0gJnF1b3Q7QzpcXERBVEFcXCZxdW90Ozs8YnI+CitwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVQ0RfRElSID0gQkFTRV9ESVIgKyAmcXVvdDtVQ0RcXCZxdW90Ozs8YnI+CitwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5fRElSID0gREFUQV9ESVIgKyAmcXVvdDtCSU5cXCZxdW90Ozs8YnI+CitwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHRU5fRElSID0gREFUQV9ESVIgKyAmcXVvdDtHRU5cXCZxdW90Ozs8YnI+Cis8YnI+CitNYWtlIHN1cmUgdGhhdCBlYWNoIG9mIHRoZXNlIGRpcmVjdG9yaWVzIGV4aXN0LiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmc8YnI+CitleGlzdDo8YnI+Cis8YnI+CismbHQ7R0VOX0RJUiZndDsvRGVyaXZlZERhdGE8YnI+CismbHQ7R0VOX0RJUiZndDsvRGVyaXZlZERhdGEvRXh0cmFjdGVkUHJvcGVydGllczxicj4KKyZsdDtVQ0RfRElSJmd0Oy9FWFRSQVMtVXBkYXRlPC9wPgorPGgzPjIuIERvd25sb2FkIGFsbCBvZiB0aGUgVW5pY29kZURhdGEgZmlsZXMgZm9yIGVhY2ggdmVyc2lvbiBpbnRvIFVDRF9ESVIuPC9oMz4KKzxwPlRoZSBmb2xkZXIgbmFtZXMgbXVzdCBiZSBvZiB0aGUgZm9ybTogJnF1b3Q7My4yLjAtVXBkYXRlJnF1b3Q7LCBzbyByZW5hbWUgdGhlIGZvbGRlcnMgb24gdGhlPGJyPgorVW5pY29kZSBzaXRlIHRvIHRoaXMgZm9ybWF0LiBJPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRkZGMDAiPmYgdGhlIAorZm9sZGVyIGNvbnRhaW5zIHVjZCwgdGhlbiBtYWtlIHRoZSBjb250ZW50cyBvZiB0aGF0IGRpcmVjdG9yeSBiZSB0aGUgY29udGVudHMgb2YgCit0aGUgeC54LngtVXBkYXRlIGRpcmVjdG9yeS4gVGhhdCBpcywgZWFjaCBkaXJlY3Rvcnkgd2lsbCBkaXJlY3RseSBjb250YWluIGZpbGVzIAorbGlrZSBQcm9wTGlzdC4uLi50eHQ8L3NwYW4+PC9wPgorPGg0PjJhIEVuc3VyZSBDb21wbGV0ZSBSZWxlYXNlPC9oND4KKzxwPklmIHlvdSBhcmUgZG93bmxvYWRpbmcgYW55ICZxdW90O2luY29tcGxldGUmcXVvdDsgcmVsZWFzZSAob25lIHRoYXQgZG9lcyBub3QgY29udGFpbiBhIGNvbXBsZXRlIHNldCBvZiBkYXRhIAorZmlsZXMgZm9yIHRoYXQgcmVsZWFzZSwgeW91IG5lZWQgdG8gYWxzbyBkb3dubG9hZCB0aGUgcHJldmlvdXMgY29tcGxldGUgcmVsZWFzZSkuIE1vc3Qgb2YgdGhlIE4uTS1VcGRhdGUgCitkaXJlY3Rvcmllc3MgYXJlIGNvbXBsZXRlLCAqZXhjZXB0Kjo8L3A+Cis8cD40LjAtVXBkYXRlLCB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgY29weSBvZiBVbmloYW4udHh0IGFuZCBzb21lIG90aGVyIGZpbGVzPGJyPgorMy4xLVVwZGF0ZSwgd2hpY2ggZG9lcyBub3QgY29udGFpbiBhIGNvcHkgb2YgQmlkaU1pcnJvcmluZy50eHQ8L3A+Cis8cD5BbHNvLCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byBVbmljb2RlRGF0YSBmb3IgMS4xLjU6PC9wPgorPHA+PGI+RGVsZXRlPC9iPjwvcD4KKzxwcmU+MzQwMDtIQU5HVUwgU1lMTEFCTEUgS0lZRU9LIEE7TG87MDtMOzExMDAgMTE2MTs7OztOOzs7OzsKKy4uLgorNERGRjtIQU5HVUwgU1lMTEFCTEUgTUlFVU0gV0VPIFJJRVVMLVRISUVVVEg7TG87MDtMOzExMDYgMTE2RiAxMUI0Ozs7O047Ozs7OworNEUwMDs8Y2prIElERU9HUkFQSCBSRVBSRVNFTlRBVElWRT47TG87MDtMOzs7OztOOzs7Ozs8L3ByZT4KKzxwPjxiPkFkZDo8L2I+PC9wPgorPHByZT40RTAwOzxjamsgSWRlb2dyYXBoLCBGaXJzdD47TG87MDtMOzs7OztOOzs7OzsKKzlGQTU7PGNqayBJZGVvZ3JhcGgsIExhc3Q+O0xvOzA7TDs7Ozs7Tjs7Ozs7CitFMDAwOzxwcml2YXRlIFVzZSwgRmlyc3Q+O0NvOzA7TDs7Ozs7Tjs7Ozs7CitGOEZGOzxwcml2YXRlIFVzZSwgTGFzdD47Q287MDtMOzs7OztOOzs7Ozs8L3ByZT4KKzxwPjxiPkFuZCBmcm9tIGEgbGF0ZSB2ZXJzaW9uIG9mIFVuaWNvZGUsIGFkZDo8L2I+PC9wPgorPHByZT5GOTAwO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GOTAwO0xvOzA7TDs4QzQ4Ozs7O047Ozs7OworLi4uCitGQTJEO0NKSyBDT01QQVRJQklMSVRZIElERU9HUkFQSC1GQTJEO0xvOzA7TDs5REI0Ozs7O047Ozs7OzwvcHJlPgorPGg0PjJiLiBVQ0EgZGF0YTwvaDQ+Cis8cD5JZiB5b3UgYXJlIGJ1aWxkaW5nIGFueSBvZiB0aGUgVUNBIHRvb2xzLCB5b3UgbmVlZCB0byBnZXQgYSBjb3B5IG9mIHRoZSBVQ0EgZGF0YSBmaWxlPGJyPgorZnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIxMC8jQWxsS2V5cy4gVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoaXMgaXM6PGJyPgorPGJyPgorQkFTRV9ESVIgKyAmcXVvdDtDb2xsYXRpb25cYWxsa2V5cyZxdW90OyArIFZFUlNJT04gKyAmcXVvdDsudHh0JnF1b3Q7Ljxicj4KKzxicj4KK0lmIHlvdSBoYXZlIGl0IGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCBjaGFuZ2UgdGhhdCB2YWx1ZSBmb3IgS0VZUyBpbiBVQ0EuamF2YSwgYW5kIDxicj4KK3RoZSB2YWx1ZSBmb3IgQkFTRV9ESVI8L3A+Cis8aDQ+MmMuIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgZGVmYXVsdCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpdGggZmlsZXMuIEFsbCBvZiAKK3RoZSB5ZWxsb3cgb25lcyBzaG91bGQgZXhpc3Q8L2g0PgorPHByZT5DOi8vREFUQS8KKworICAgICAgICBCSU4vCisgICAgCis8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+ICAgICAgICBDb2xsYXRpb24vCisgICAgICAgICAgICBhbGxrZXlzLTMuMS4xLnR4dAorPC9zcGFuPiAgICAgICAgCisgICAgICAgIEdFTi8KKyAgICAgICAgICAgIERlcml2ZWREYXRhLworPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRkZGMDAiPiAgICAgICAgPC9zcGFuPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwIj5VQ0QvCisgICAgICAgICAgICAzLjAuMC1VcGRhdGUvCisgICAgICAgICAgICAgICAgVW5paGFuLTMuMi4wLnR4dAorICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgMy4wLjEtVXBkYXRlLworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgMy4xLjAtVXBkYXRlLworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgMy4xLjEtVXBkYXRlLworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgMy4yLjAtVXBkYXRlLworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgNC4wLjAtVXBkYXRlLworICAgICAgICAgICAgICAgIEFyYWJpY1NoYXBpbmctNC4wLjBkMTRiLnR4dAorICAgICAgICAgICAgICAgIEJpZGlNaXJyb3JpbmctNC4wLjBkMWIudHh0CisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBFWFRSQVMtVXBkYXRlLzwvc3Bhbj48L3ByZT4KKzxoMz4zLiBWZXJzaW9uczwvaDM+Cis8cD5BbGwgb2YgdGhlIGZvbGxvd2luZyBoYXZlICZxdW90O3ZlcnNpb24gWCZxdW90OyBpbiB0aGUgb3B0aW9ucyB5b3UgZ2l2ZSB0byBKYXZhIChlaXRoZXIgb24gdGhlJm5ic3A7IAorY29tbWFuZCBsaW5lLCBvciBpbiB0aGUgRWNsaXBzZSAncnVuJyBvcHRpb25zLiBJZiB5b3Ugd2FudCBhIHNwZWNpZmljIHZlcnNpb24gbGlrZSAzLjEuMCwgdGhlbiB5b3UgCit3b3VsZCB3cml0ZSAmcXVvdDt2ZXJzaW9uIDMuMS4xJnF1b3Q7LiBJZiB5b3Ugd2FudCB0aGUgbGF0ZXN0IHZlcnNpb24gKDQuMS4wKSwgeW91IGNhbiBvbWl0IHRoZSAmcXVvdDt2ZXJzaW9uIFgmcXVvdDsuPC9wPgorPGgzPjQuIEJ1aWxkaW5nIEZpbGVzPC9oMz4KKzxvbD4KKwk8bGk+PGI+U2V0dXA8L2I+PG9sPgorCQk8bGk+SW4gRWNsaXBzZSwgb3BlbiB0aGUgUGFja2FnZSBFeHBsb3JlciAoVXNlIFdpbmRvdyZndDtTaG93IFZpZXcgaWYgeW91IAorCQlkb24ndCBzZWUgaXQpPC9saT4KKwkJPGxpPk9wZW4gVW5pY29kZVRvb2xzPHVsPgorCQkJPGxpPmNvbS5pYm0udGV4dC5VQ0Q8dWw+CisJCQkJPGxpPk1ha2VVbmljb2RlRmlsZXMuPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRkZGMDAiPnR4dDwvc3Bhbj48cD5UaGlzIGZpbGUgZHJpdmVzIHRoZSBwcm9kdWN0aW9uIG9mIAorCQkJCXRoZSBkZXJpdmVkIFVuaWNvZGUgZmlsZXMuIFRoZSBmaXJzdCB0aHJlZSBsaW5lcyBjb250YWluIAorCQkJCXBhcmFtZXRlcnMgdGhhdCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IGF0IHNvbWUgdGltZXM6PC9wPgorCQkJCTxwcmU+R2VuZXJhdGU6IDxiPi4qc2NyaXB0Lio8L2I+IDxpPi8vIHRoaXMgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIFVzZSAuKiBmb3IgYWxsIGZpbGVzPC9pPgorRGVsdGFWZXJzaW9uOiA8Yj4xMDwvYj4gPGk+ICAgIC8vIFRoaXMgZ2V0cyBhcHBlbmRlZCB0byB0aGUgZmlsZSBuYW1lLiBQaWNrIDErIHRoZSBoaWdoZXN0IHZhbHVlIGluIFB1YmxpYzwvaT4KK0NvcHlyaWdodFllYXI6IDxiPjIwMDY8L2I+IDxpPiAvLyBQaWNrIHRoZSBjdXJyZW50IHllYXI8L2k+PC9wcmU+CisJCQkJPC9saT4KKwkJCTwvdWw+CisJCQk8L2xpPgorCQk8L3VsPgorCQk8L2xpPgorCQk8bGk+T3BlbiBpbiBQYWNrYWdlIEV4cGxvcmVyIAorCQk8dWw+CisJCQk8bGk+Y29tLmlibS50ZXh0LlVDRDx1bD4KKwkJCQk8bGk+TWFpbjwvbGk+CisJCQk8L3VsPgorCQkJPC9saT4KKwkJPC91bD4KKwkJPC9saT4KKwkJPGxpPlJ1biZndDtSdW4gQXMuLi48b2w+CisJCQk8bGk+Q2hvb3NlIEphdmEgQXBwbGljYXRpb248dWw+CisJCQkJPGxpPml0IHdpbGwgZmFpbCwgZG9uJ3Qgd29ycnk7IHlvdSBuZWVkIHRvIHNldCBzb21lIHBhcmFtZXRlcnMuPC9saT4KKwkJCTwvdWw+CisJCQk8L2xpPgorCQk8L29sPgorCQk8L2xpPgorCQk8bGk+UnVuJmd0O1J1bi4uLjx1bD4KKwkJCTxsaT5TZWxlY3QgdGhlIEFyZ3VtZW50cyB0YWIsIGFuZCBmaWxsIGluIHRoZSBmb2xsb3dpbmc8dWw+CisJCQkJPGxpPlByb2dyYW0gYXJndW1lbnRzOjxwcmU+YnVpbGQgNS4wPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRkZGMDAiPi4wPC9zcGFuPiBNYWtlVW5pY29kZUZpbGVzPC9wcmU+CisJCQkJPC9saT4KKwkJCQk8bGk+Vk0gYXJndW1lbnRzOiAKKwkJCQk8cHJlPi1YbXM1MTJtIC1YbXg1MTJtPC9wcmU+CisJCQkJPC9saT4KKwkJCTwvdWw+CisJCQk8L2xpPgorCQkJPGxpPkNsb3NlIGFuZCBTYXZlPC9saT4KKwkJPC91bD4KKwkJPC9saT4KKwk8L29sPgorCTwvbGk+CisJPGxpPjxiPlJ1bjwvYj48b2w+CisJCTxsaT5Zb3UnbGwgc2VlIGl0IGJ1aWxkIHRoZSA1LjAgZmlsZXMsIHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyAKKwkJcmVzdWx0czo8cHJlPldyaXRpbmcgVUNEX0RhdGE1LjAuMAorRGF0YSBTaXplOiAxMDksODAyCitXcm90ZSBEYXRhIDEwOTgwMjwvcHJlPgorCQk8L2xpPgorCQk8bGk+Rm9yIGVhY2ggdmVyc2lvbiwgdGhlIHRvb2xzIGJ1aWxkIGEgc2V0IG9mIGJpbmFyeSBkYXRhIGluIEJJTiB0aGF0IAorCQljb250YWluIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhhdCByZWxlYXNlLiBUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSwgb3IgCisJCXlvdSBjYW4gbWFudWFsbHkgZG8gaXQgd2l0aCB0aGUgUHJvZ3JhbSBBcmd1bWVudHM8cHJlPnZlcnNpb24gWCBidWlsZDwvcHJlPgorCQk8cD5UaGlzIGJ1aWxkcyBhbiBjb21wcmVzc2VkIGZvcm1hdCBvZiBhbGwgdGhlIFVDRCBkYXRhIChleGNlcHQgYmxvY2tzIAorCQlhbmQgVW5paGFuKSBpbnRvIHRoZSBCSU4gZGlyZWN0b3J5LiBEb24ndCB3b3JyeSBhYm91dCB0aGUgdm9sdW1pbm91cyAKKwkJY29uc29sZSBtZXNzYWdlcywgdW5sZXNzIG9uZSBzYXlzICZxdW90O0ZBSUwmcXVvdDsuPC9wPgorCQk8cD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PGk+WW91IGhhdmUgdG8gbWFudWFsbHkgZG8gdGhpcyBpZiB5b3UgY2hhbmdlIAorCQlhbnkgb2YgdGhlIGRhdGEgZmlsZXMgaW4gdGhhdCB2ZXJzaW9uITwvaT48L2ZvbnQ+PC9wPgorCQk8cD5Ob3RlOiBpZiBmb3IgYW55IHJlYXNvbiB5b3UgbW9kaWZ5IHRoZSBiaW5hcnkgZm9ybWF0IG9mIHRoZSBCSU4gZmlsZXMsIHlvdSBhbHNvIGhhdmUgdG8gYnVtcCB0aGUgCit2YWx1ZSBpbiB0aGF0IGZpbGU6PC9wPgorCQk8cHJlPnN0YXRpYyBmaW5hbCBieXRlIEJJTkFSWV9GT1JNQVQgPSA4OyAvLyBidW1wZWQgaWYgYmluYXJ5IGZvcm1hdCBvZiBVQ0QgY2hhbmdlczwvcHJlPgorCQk8L2xpPgorCTwvb2w+CisJPC9saT4KKwk8bGk+UmVzdWx0cyBpbiA8YSBocmVmPSJmaWxlOi8vL0M6L0RBVEEvR0VOL0Rlcml2ZWREYXRhIj4KKwlDOlxEQVRBXEdFTlxEZXJpdmVkRGF0YTwvYT48b2w+CisJCTxsaT5UaGUgZmlsZXMgd2lsbCBiZSBpbiB0aGlzIGRpcmVjdG9yeS48L2xpPgorCQk8bGk+VGhlcmUgYXJlIGFsc28gRElGRiBmb2xkZXJzLCB0aGF0IGNvbnRhaW4gQkFUIGZpbGVzIHRoYXQgeW91IGNhbiBydW4gCisJCW9uIFdpbmRvd3Mgd2l0aCBDb21wYXJlSXQuIChZb3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBidWlsZCBCQVRzIHdpdGggCisJCWFub3RoZXIgRGlmZiBwcm9ncmFtIGlmIHlvdSB3YW50KS48b2w+CisJCQk8bGk+Rm9yIGFueSBmaWxlIHdpdGggYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBpdCB3aWxsIGJ1aWxkIHR3byAKKwkJCUJBVCBmaWxlcywgc3VjaCBhcyB0aGUgZmlyc3QgdHdvIGJlbG93LjxwcmU+RGlmZl9Qcm9wTGlzdC01LjAuMGQxMC50eHQuYmF0CitPTERFUi1EaWZmX1Byb3BMaXN0LTUuMC4wZDEwLnR4dC5iYXQKKworVU5DSEFOR0VELURpZmZfUHJvcGVydHlWYWx1ZUFsaWFzZXMtNS4wLjBkMTAudHh0LmJhdDwvcHJlPgorCQkJPC9saT4KKwkJPC9vbD4KKwkJPC9saT4KKwkJPGxpPkFueSBmaWxlcyB3aXRob3V0IHNpZ25pZmljYW50IGNoYW5nZXMgd2lsbCBoYXZlICZxdW90O1VOQ0hBTkdFRCZxdW90OyBhcyBhIAorCQlwcmVmaXg6IGlnbm9yZSB0aGVtLiZuYnNwOyBUaGUgT0xERVIgcHJlZml4IGlzIHRoZSBjb21wYXJpc29uIHRvIHRoZSAKKwkJbGFzdCB2ZXJzaW9uIG9mIFVuaWNvZGUuPC9saT4KKwkJPGxpPk9uIFdpbmRvd3MgeW91IGNhbiBydW4gdGhlc2UgQkFUcyB0byBjb21wYXJlIGZpbGVzOjwvbGk+CisJPC9vbD4KKwk8L2xpPgorCTxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+TkZTa2lwcGFibGU8L3NwYW4+PG9sPgorCTxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+QSBmaWxlIGlzIG5lZWRlZCBieSBJQ1UgdGhhdCBpcyAKKwlnZW5lcmF0ZWQgd2l0aCB0aGUgc2FtZSB0b29sLiBKdXN0IHVzZSB0aGUgaW5wdXQgcGFyYW1ldGVyICZxdW90O05GU2tpcHBhYmxlJnF1b3Q7IHRvIAorCWdlbmVyYXRlIHRoZSBmaWxlIE5GU2FmZVNldHMudHh0LCBhbHNvIGluIDwvc3Bhbj4KKwk8YSBocmVmPSJmaWxlOi8vL0M6L0RBVEEvR0VOIj48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+CisJZmlsZTovLy9DOi9EQVRBL0dFTjwvc3Bhbj48L2E+PC9saT4KKzwvb2w+CisJPC9saT4KKzwvb2w+Cis8aDM+NS4gSW52YXJpYW50IENoZWNraW5nPC9oMz4KKzxvbD4KKwk8bGk+U2V0dXA8b2w+CisJCTxsaT5PcGVuIGluIFBhY2thZ2UgRXhwbG9yZXI8dWw+CisJCQk8bGk+Y29tLmlibS50ZXh0LlVDRDx1bD4KKwkJCQk8bGk+VGVzdFVuaWNvZGVJbnZhcmlhbnRzLmphdmE8L2xpPgorCQkJPC91bD4KKwkJCTwvbGk+CisJCTwvdWw+CisJCTwvbGk+CisJCTxsaT5SdW4mZ3Q7UnVuIEFzLi4uIEphdmEgQXBwbGljYXRpb248YnI+CisJCVdpbGwgY3JlYXRlIHRoZSBmb2xsb3dpbmcgZmlsZSBvZiByZXN1bHRzOjxwcmU+PGEgaHJlZj0iZmlsZTovLy9DOi9EQVRBL0dFTi9Vbmljb2RlSW52YXJpYW50UmVzdWx0cy50eHQvIj5DOlxEQVRBXEdFTlxVbmljb2RlSW52YXJpYW50UmVzdWx0cy50eHRcPC9hPjwvcHJlPgorCQk8cD5BbmQgb24gdGhlIGNvbnNvbGUgd2lsbCBsaXN0IHdoZXRoZXIgYW55IHByb2JsZW1zIGFyZSBmb3VuZC4gVGh1cyBpbiAKKwkJdGhlIGZvbGxvd2luZyBjYXNlIHRoZXJlIHdhcyBvbmUgZmFpbHVyZTo8L3A+CisJCTxwcmU+UGFyc2VFcnJvckNvdW50PTAKK1Rlc3RGYWlsdXJlQ291bnQ9MTwvcHJlPgorCQk8L2xpPgorCQk8bGk+VGhlIGhlYWRlciBvZiB0aGUgcmVzdWx0IGZpbGUgZXhwbGFpbnMgdGhlIHN5bnRheCBvZiB0aGUgdGVzdHMuPC9saT4KKwkJPGxpPk9wZW4gdGhhdCBmaWxlIGFuZCBzZWFyY2ggZm9yICZxdW90OyoqKiogU1RBUlQgRXJyb3IgSW5mbyAqKioqJnF1b3Q7LiBFYWNoIHN1Y2ggCisJCXBvaW50IHByb3ZpZGVzIGEgZHVtcCBvZiBjb21wYXJpc29uIGluZm9ybWF0aW9uLjxvbD4KKwkJPGxpPkZhaWx1cmVzIHByaW50IGEgbGlzdCBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzZXRzIGJlaW5nIAorCQljb21wYXJlZC4gU28gaWYgQSBhbmQgQiBhcmUgYmVpbmcgY29tcGFyZWQsIGl0IHByaW50cyBhbGwgdGhlIGl0ZW1zIGluIAorCQlBLUIsIHRoZW4gaW4gQi1BLCB0aGVuIGluIEEmYW1wO0IuPC9saT4KKwkJPGxpPkZvciBleGFtcGxlLCBoZXJlIGlzIGEgbGlzdGluZyBvZiBhIHByb2JsZW0gdGhhdCBtdXN0IGJlIGNvcnJlY3RlZC4gCisJCU5vdGUgdGhhdCB1c3VhbGx5IHRoZXJlIGlzIGEgY29tbWVudCB0aGF0IGV4cGxhaW5zIHdoYXQgdGhlIGZvbGxvd2luZyAKKwkJbGluZSBvciBsaW5lcyBhcmUgc3VwcG9zZWQgdG8gdGVzdC4gVGhlbiB3aWxsIGNvbWUgRkFMU0UgKGluZGljYXRpbmcgCisJCXRoYXQgdGhlIHRlc3QgZmFpbGVkKSwgdGhlbiB0aGUgZGV0YWlsZWQgZXJyb3IgcmVwb3J0LjxwcmU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOXB0Ij4jIENhbm9uaWNhbCBkZWNvbXBvc2l0aW9ucyAobWludXMgZXhjbHVzaW9ucykgbXVzdCBiZSBpZGVudGljYWwgYWNyb3NzIHJlbGVhc2VzCitbJERlY29tcG9zaXRpb25fVHlwZTpDYW5vbmljYWwgLSAkRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb25dID0gWyTXRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICTXRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb25dCisKK0ZBTFNFCisqKioqIFNUQVJUIEVycm9yIEluZm8gKioqKgorCitJbiBbJNdEZWNvbXBvc2l0aW9uX1R5cGU6Q2Fub25pY2FsIC0gJNdGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbl0sIGJ1dCBub3QgaW4gWyREZWNvbXBvc2l0aW9uX1R5cGU6Q2Fub25pY2FsIC0gJEZ1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSA6CisKKyMgVG90YWwgY29kZSBwb2ludHM6IDAKKworTm90IGluIFsk10RlY29tcG9zaXRpb25fVHlwZTpDYW5vbmljYWwgLSAk10Z1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSwgYnV0IGluIFskRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICRGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbl0gOgorMUIwNiAgICAgICAgICAgIyBMbyAgICAgICBCQUxJTkVTRSBMRVRURVIgQUtBUkEgVEVEVU5HCisxQjA4ICAgICAgICAgICAjIExvICAgICAgIEJBTElORVNFIExFVFRFUiBJS0FSQSBURURVTkcKKzFCMEEgICAgICAgICAgICMgTG8gICAgICAgQkFMSU5FU0UgTEVUVEVSIFVLQVJBIFRFRFVORworMUIwQyAgICAgICAgICAgIyBMbyAgICAgICBCQUxJTkVTRSBMRVRURVIgUkEgUkVQQSBURURVTkcKKzFCMEUgICAgICAgICAgICMgTG8gICAgICAgQkFMSU5FU0UgTEVUVEVSIExBIExFTkdBIFRFRFVORworMUIxMiAgICAgICAgICAgIyBMbyAgICAgICBCQUxJTkVTRSBMRVRURVIgT0tBUkEgVEVEVU5HCisxQjNCICAgICAgICAgICAjIE1jICAgICAgIEJBTElORVNFIFZPV0VMIFNJR04gUkEgUkVQQSBURURVTkcKKzFCM0QgICAgICAgICAgICMgTWMgICAgICAgQkFMSU5FU0UgVk9XRUwgU0lHTiBMQSBMRU5HQSBURURVTkcKKzFCNDAuLjFCNDEgICAgICMgTWMgICBbMl0gQkFMSU5FU0UgVk9XRUwgU0lHTiBUQUxJTkcgVEVEVU5HLi5CQUxJTkVTRSBWT1dFTCBTSUdOIFRBTElORyBSRVBBIFRFRFVORworMUI0MyAgICAgICAgICAgIyBNYyAgICAgICBCQUxJTkVTRSBWT1dFTCBTSUdOIFBFUEVUIFRFRFVORworCisjIFRvdGFsIGNvZGUgcG9pbnRzOiAxMQorCitJbiBib3RoIFsk10RlY29tcG9zaXRpb25fVHlwZTpDYW5vbmljYWwgLSAk10Z1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSwgYW5kIGluIFskRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICRGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbl0gOgorMDBDMC4uMDBDNSAgICAgIyBMJmFtcDsgICBbNl0gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFLi5MQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMDBDNy4uMDBDRiAgICAgIyBMJmFtcDsgICBbOV0gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEuLkxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzAwRDEuLjAwRDYgICAgICMgTCZhbXA7ICAgWzZdIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERS4uTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworLi4uCiszMEY3Li4zMEZBICAgICAjIExvICAgWzRdIEtBVEFLQU5BIExFVFRFUiBWQS4uS0FUQUtBTkEgTEVUVEVSIFZPCiszMEZFICAgICAgICAgICAjIExtICAgICAgIEtBVEFLQU5BIFZPSUNFRCBJVEVSQVRJT04gTUFSSworQUMwMC4uRDdBMyAgICAgIyBMbyBbMTExNzJdIEhBTkdVTCBTWUxMQUJMRSBHQS4uSEFOR1VMIFNZTExBQkxFIEhJSAorCisjIFRvdGFsIGNvZGUgcG9pbnRzOiAxMjA4OQorKioqKiBFTkQgRXJyb3IgSW5mbyAqKioqPC9zcGFuPjwvcHJlPgorCQk8L2xpPgorCTwvb2w+CisJCTwvbGk+CisJCTxsaT5PcHRpb25zOjxvbD4KKwkJPGxpPi1yJm5ic3A7Jm5ic3A7Jm5ic3A7IFByaW50IHRoZSBmYWlsdXJlcyBhcyBhIHJhbmdlIGxpc3QuPC9saT4KKwkJPGxpPi1meHh4Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVzZSBhIGRpZmZlcmVudCBpbnB1dCBmaWxlLCBzdWNoIGFzIC1mSW52YXJpYW50VGVzdC50eHQ8L2xpPgorCTwvb2w+CisJCTwvbGk+CisJPC9vbD4KKwk8L2xpPgorPC9vbD4KKzxoMz42LiBPcHRpb25zPC9oMz4KKzxvbD4KKwk8bGk+SWYgeW91IHdhbnQgdG8gc2VlIGZpbGVzIHRoYXQgYXJlIG9wZW5lZCB3aGlsZSBwcm9jZXNzaW5nLCBkbyB0aGUgCisJZm9sbG93aW5nOjxvbD4KKwkJPGxpPlJ1biZndDtSdW48L2xpPgorCQk8bGk+U2VsZWN0IHRoZSBBcmd1bWVudHMgdGFiLCBhbmQgYWRkIHRoZSBmb2xsb3dpbmc8b2w+CisJCQk8bGk+Vk0gYXJndW1lbnRzOgorCQkJPHByZT4tRFNIT1dfRklMRVM8L3ByZT4KKwkJCTwvbGk+CisJCTwvb2w+CisJCTwvbGk+CisJPC9vbD4KKwk8L2xpPgorPC9vbD4KKzxoMz41LiBVQ0E8L2gzPgorPG9sPgorCTxsaT5Zb3Ugd2lsbCB1c2UgY29tLmlibS50ZXh0LlVDQS5NYWluIGFzIHlvdXIgbWFpbiBjbGFzcywgY3JlYXRpbmcgYWxvbmcgCisJdGhlIHNhbWUgbGluZXMgYXMgYWJvdmUuPC9saT4KKwk8bGk+VG8gdGVzdCB3aGV0aGVyIHRoZSBVQ0EgZmlsZXMgYXJlIHZhbGlkLCB1c2UgdGhlCisJPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPm9wdGlvbnMgKDxpPm5vdGU6IHlvdSBtdXN0IGFsc28gYnVpbGQgdGhlIElDVSAKKwlmaWxlcyBiZWxvdywgc2luY2UgdGhleSB0ZXN0IG90aGVyIGFzcGVjdHM8L2k+KS48L3NwYW4+PHByZT53cml0ZUNvbGxhdGlvblZhbGlkaXR5TG9nPC9wcmU+CisJPHA+SXQgd2lsbCBjcmVhdGUgYSBmaWxlOjwvcD4KKwk8cHJlPjxhIGhyZWY9ImZpbGU6Ly8vQzovREFUQS9HRU4vY29sbGF0aW9uLzUuMC4wL0NoZWNrQ29sbGF0aW9uVmFsaWRpdHkuaHRtbCI+QzpcREFUQVxHRU5cY29sbGF0aW9uXDUuMC4wXENoZWNrQ29sbGF0aW9uVmFsaWRpdHkuaHRtbDwvYT48L3ByZT4KKwk8b2w+CisJCTxsaT5SZXZpZXcgdGhpcyBmaWxlLiBJdCB3aWxsIGxpc3QgZXJyb3JzLiBTb21lIG9mIHRob3NlIGFyZSBhY3R1YWxseSAKKwl3YXJuaW5ncywgYW5kIGluZGljYXRlIHBvc3NpYmxlIHByb2JsZW1zICh0aGlzIGlzIGluZGljYXRlZCBpbiB0aGUgdGV4dCwgCisJc3VjaCBhcyBieTogJnF1b3Q7VGhlc2UgYXJlIG5vdCBuZWNlc3NhcmlseSBlcnJvcnMsIGJ1dCBzaG91bGQgYmUgZXhhbWluZWQgZm9yIAorCQk8aT5wb3NzaWJsZTwvaT4gZXJyb3JzJnF1b3Q7KS4gSW4gdGhvc2UgY2FzZXMsIHRoZSBpdGVtcyBzaG91bGQgYmUgcmV2aWV3ZWQgdG8gbWFrZSAKKwlzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGluYWR2ZXJ0ZW50IHByb2JsZW1zLjwvbGk+CisJCTxsaT5JZiBpdCBpcyBub3Qgc28gbWFya2VkLCBpdCBpcyBhIHRydWUgZXJyb3IsIGFuZCBtdXN0IGJlIGZpeGVkLjwvbGk+CisJCTxsaT5BdCB0aGUgZW5kLCB0aGVyZSBpcyBzZWN0aW9uIDxiPjExLiBDb3ZlcmFnZTwvYj4uIFRoZXJlIGFyZSB0d28gc2VjdGlvbnM6PG9sPgorCQkJPGxpPkluIFVDRHh4eCwgYnV0IG5vdCBpbiBhbGxrZXlzLiBDaGVjayB0aGlzIG92ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgCisJYXJlIGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBnZXQgPGI+PGk+aW1wbGljaXQ8L2k+PC9iPiB3ZWlnaHRzLjwvbGk+CisJCQk8bGk+SW4gYWxsa2V5cywgYnV0IG5vdCBpbiBVQ0QuIFRoZXNlIHNob3VsZCBiZSA8Yj48aT5vbmx5PC9pPjwvYj4gCisJY29udHJhY3Rpb25zLiBDaGVjayB0aGVtIG92ZXIgdG8gbWFrZSBzdXJlIHRoZXkgbG9vayByaWdodCBhbHNvLjwvbGk+CisJCTwvb2w+PC9saT4KKwk8L29sPjwvbGk+CisJPGxpPgorCTxoND48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+VG8gYnVpbGQgYWxsIHRoZSBjaGFydHMgKGluY2x1ZGluZyBmb3IgCisJdGhlIFVDQSksIHVzZSB0aGUgb3B0aW9uczogPC9zcGFuPjwvaDQ+CisJPHByZT5ub3JtYWxpemF0aW9uQ2hhcnQgY2FzZUNoYXJ0IHNjcmlwdENoYXJ0IGluZGV4Q2hhcnQ8L3ByZT4KKwk8cD5UaGV5IHdpbGwgYmUgYnVpbHQgaW50bzwvcD4KKwk8cHJlPjxhIGhyZWY9ImZpbGU6Ly8vQzovREFUQS9HRU4vY2hhcnRzIj5DOlxEQVRBXEdFTlxjaGFydHM8L2E+PC9wcmU+CisJPHA+PGI+T25jZSBVQ0EgaXMgcmVsZWFzZWQsIHRoZW4gY29weSB0aG9zZSBmaWxlcyB1cCB0byB0aGUgcmlnaHQgc3BvdHMgaW4gCisJdGhlIFVuaWNvZGUgc2l0ZTo8L2I+PHVsPgorCQk8bGk+CisJCTxwcmU+PGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvbm9ybWFsaXphdGlvbi8iPmh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2hhcnRzL25vcm1hbGl6YXRpb24vPC9hPjwvcHJlPgorCQk8L2xpPgorCQk8bGk+CisJCTxwcmU+PGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvY29sbGF0aW9uLyI+aHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvY29sbGF0aW9uLzwvYT4gPC9wcmU+CisJCTwvbGk+CisJCTxsaT4KKwkJPHByZT48YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jYXNlLyI+aHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvY2FzZS88L2E+IDwvcHJlPgorCQk8L2xpPgorCQk8bGk+CisJCTxwcmU+PGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvY29sbGF0aW9uLyI+aHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvY29sbGF0aW9uLzwvYT4gPC9wcmU+CisJCTwvbGk+CisJPC91bD4KKwk8L2xpPgorCTxsaT4KKwk8aDQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPlRvIGJ1aWxkIGFsbCB0aGUgVUNBIGZpbGVzIHVzZWQgYnkgSUNVLCB1c2UgdGhlIAorCW9wdGlvbjo8L3NwYW4+PC9oND4KKwk8cHJlPklDVTwvcHJlPgorCTxwPlRoZXkgd2lsbCBiZSBidWlsdCBpbnRvOjwvcD4KKwk8cHJlPjxhIGhyZWY9ImZpbGU6Ly8vQzovREFUQS9HRU4vY29sbGF0aW9uLzUuMC4wIj5DOlxEQVRBXEdFTlxjb2xsYXRpb25cNS4wLjA8L2E+PC9wcmU+CisJPC9saT4KKwk8bGk+WW91IHNob3VsZCB0aGVuIGJ1aWxkIGEgc2V0IG9mIHRoZSBJQ1UgZmlsZXMgZm9yIHRoZSBwcmV2aW91cyB2ZXJzaW9uLCAKKwlpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtLiBVc2UgdGhlIG9wdGlvbnM6PHByZT52ZXJzaW9uIDQuMS4wIElDVTwvcHJlPgorCTxwPk9yIHdoYXRldmVyIHRoZSBsYXN0IHZlcnNpb24gd2FzLjwvbGk+CisJPGxpPk5vdywgeW91IHdpbGwgd2FudCB0byBjb21wYXJlIHZlcnNpb25zLiBUaGUga2V5IGZpbGUgaXMgCisJVUNBX1J1bGVzX05vQ0UudHh0LiBJdCBjb250YWlucyB0aGUgcnVsZXMgZXhwcmVzc2VkIGluIElDVSBmb3JtYXQsIHdoaWNoIAorCWFsbG93cyBmb3IgY29tcGFyaXNvbiBhY3Jvc3MgdmVyc2lvbnMgb2YgVUNBIHdpdGhvdXQgc3B1cmlvdXMgdmFyaWF0aW9ucyBvZiAKKwl0aGUgbnVtYmVycyBnZXR0aW5nIGluIHRoZSB3YXkuPG9sPgorCQk8bGk+RG8gYSBEaWZmIGJldHdlZW4gdGhlIGxhc3QgYW5kIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlc2UgZmlsZXMsIGFuZCAKKwkJdmVyaWZ5IHRoYXQgYWxsIHRoZSBkaWZmZXJlbmNlcyBhcmUgZWl0aGVyIG5ldyBjaGFyYWN0ZXJzLCBvciB3ZXJlIAorCQlhdXRob3JpemVkIHRvIGJlIGNoYW5nZWQgYnkgdGhlIFVUQy48L2xpPgorCTwvb2w+PC9saT4KKzwvb2w+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK